使用–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