使用–jars的spark-submit yarn-cluster不起作用?
我试图通过以下命令向CDH纱线集群提交火花作业
我已经尝试了几种组合,但一切都行不通…我现在所有的poi jar都位于我的本地/ root,以及HDFS / user / root / lib,因此我尝试了以下
spark-submit --master yarn-cluster --class "ReadExcelSC" ./excel_sc.jar --jars /root/poi-3.12.jars, /root/poi-ooxml-3.12.jar, /root/poi-ooxml-schemas-3.12.jar spark-submit --master yarn-cluster --class "ReadExcelSC" ./excel_sc.jar --jars file:/root/poi-3.12.jars, file:/root/poi-ooxml-3.12.jar, file:/root/poi-ooxml-schemas-3.12.jar spark-submit --master yarn-cluster --class "ReadExcelSC" ./excel_sc.jar --jars hdfs://mynamenodeIP:8020/user/root/poi-3.12.jars,hdfs://mynamenodeIP:8020/user/root/poi-ooxml-3.12.jar,hdfs://mynamenodeIP:8020/user/root/poi-ooxml-schemas-3.12.jar
如何将jar传播到所有群集节点? 因为以上都没有工作,并且工作仍然以某种方式无法引用该类,因为我不断得到相同的错误:
java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory
相同的命令与“–master local”一起使用 ,没有指定–jars,因为我已将我的jar复制到/ opt / cloudera / parcels / CDH / lib / spark / lib。
但是对于纱线群集模式,我需要将外部jar分发给所有群集,但上面的代码不起作用。
感谢您的帮助。
ps我使用CDH5.4.2与spark 1.3.0
根据Spark Submit的帮助选项
-
–jars包括要包含在驱动程序和执行程序类路径中的本地jar。 [它只会设置路径]
-
—文件将复制你申请所需的jar子运行到执行者节点的所有工作目录[它将你的jar子运送到
工作目录]
注意:这类似于hadoop流中的-file选项,它将mapper / reducer脚本传输到从属节点。
所以尝试使用–files选项。
$ spark-submit --help Options: --jars JARS Comma-separated list of local jars to include on the driver and executor classpaths. --files FILES Comma-separated list of files to be placed in the working directory of each executor.
希望这可以帮助
您是否尝试过在此主题中发布的解决方案: Spark on yarn jar上传问题
通过将spark-assembly.jar复制到每个节点的hdfs上的目录中,然后将其作为参数传递给spark-submit –conf spark.yarn.jar来解决该问题。 命令如下:
hdfs dfs -copyFromLocal /var/tmp/spark/spark-1.4.0-bin-hadoop2.4/lib/spark-assembly-1.4.0-hadoop2.4.0.jar /user/spark/spark-assembly.jar /var/tmp/spark/spark-1.4.0-bin-hadoop2.4/bin/spark-submit --class MRContainer --master yarn-cluster --conf spark.yarn.jar=hdfs:///user/spark/spark-assembly.jar simplemr.jar