我正尝试通过以下命令向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 /火花/ lib目录下。
但是对于纱线群集模式,我需要将外部jar分发给所有群集,但上面的代码不起作用。
感谢您的帮助,谢谢。
P.S。我正在使用CDH5.4.2和spark 1.3.0
答案 0 :(得分:3)
根据Spark Submit的帮助选项
- jars包含要包含在驱动程序和执行程序类路径中的本地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.
希望这会有所帮助
答案 1 :(得分:0)
您是否尝试过此主题中发布的解决方案: Spark on yarn jar upload problems
通过将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