当前位置: 首页 > 知识库问答 >
问题:

火花提交纱线簇与--罐子不起作用?

管景天
2023-03-14

我试图通过以下命令向CDH纱线集群提交spark作业

我试过几种组合,但都不起作用。。。现在,我的本地/root以及HDFS/user/root/lib中都有所有poi JAR,因此我尝试了以下方法

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本地”,但没有指定--jar,因为我已经将我的jar复制到 /opt/cloudera/parcels/CDH/lib/spark/lib.

然而,对于纱线集群模式,我需要将外部jar分发到所有集群,但上面的代码不起作用。

感谢你的帮助,谢谢。

p、 我正在使用CDH5。4.2带火花1.3.0

共有2个答案

单品
2023-03-14

你有没有尝试过这个帖子中的解决方案:Spark on thread jar上传问题

通过复制火花组件解决了该问题。将jar放入hdfs上每个节点的目录中,然后将其传递给spark submit--conf spark。纱线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
鞠源
2023-03-14

根据Spark提交的帮助选项

>

  • --JAR包括要包含在驱动程序和执行器类路径上的本地JAR。[它只会设置路径]

    ---file将复制应用程序运行所需的jar到执行器节点的所有工作目录[它将传输您的jar到工作目录]

    注意:这类似于hadoop streaming中的-file选项,它将映射器/还原器脚本传输到从属节点。

    因此,也可以尝试使用--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.
    

    希望这能有所帮助

  •  类似资料:
    • 我可以从IDE(远程)编程运行这个程序吗?我使用Scala-IDE。我寻找一些代码来遵循,但仍然没有找到合适的 我的环境:-Cloudera 5.8.2[OS redhat 7.2,kerberos 5,Spark2.1,scala 2.11]-Windows 7

    • 我正在从我的开发机器上启动spark-submit。 根据在YARN文档上运行Spark,我应该在env var或上为hadoop集群配置提供一个路径。这就是它变得棘手的地方:如果我将任务发送到远程YARN服务,为什么这些文件夹必须存在于我的本地机器上?这是否意味着spark-submit必须位于集群内部,因此我不能远程启动spark任务?如果没有,我应该用什么填充这些文件夹?我应该从任务管理器服

    • 首先,我想说的是我看到的解决这个问题的唯一方法是:Spark 1.6.1 SASL。但是,在为spark和yarn认证添加配置时,仍然不起作用。下面是我在Amazon's EMR的一个yarn集群上使用spark-submit对spark的配置: 注意,我用代码将spark.authenticate添加到了sparkContext的hadoop配置中,而不是core-site.xml(我假设我可以

    • 然而,我不知道我是否真的需要一个插件,如果需要,是哪一个,以及如何去做它。我尝试使用'build/mvn'和'build/sbt'直接编译github源代码,但是'spark-assembly2.11-2.0.2.jar'文件只有283字节。 我的目标是使用较新版本的fat jar运行pyspark shell,其方式与这里提到的类似。

    • 当我使用spark-submit with master yarn和deploy-mode cluster提交spark作业时,它不会打印/返回任何applicationId,一旦作业完成,我必须手动检查MapReduce jobHistory或spark HistoryServer来获取作业细节。 我的集群被许多用户使用,在jobHistory/HistoryServer中找到我的作业需要很多时