当前位置:  开发笔记 > 运维 > 正文

将文件传递到纱线群集模式中的spark中的应用程序jar

如何解决《将文件传递到纱线群集模式中的spark中的应用程序jar》经验,为你挑选了1个好方法。

我使用以下命令在yarn-cluster模式下部署我的spark应用程序

spark-submit --master yarn --deploy-mode cluster --class com.rocai.controller.Controller --jars  --driver-memory 1g --executor-memory 1g --num-executors 2 --executor-cores 2  

controller.xml是app.jar的参数.我总是最终找到controller.xml文件的文件未找到异常.我甚至尝试使用--files标签传递controller.xml文件

spark-submit --master yarn --deploy-mode cluster --class com.rocai.controller.Controller --jars  --driver-memory 1g --executor-memory 1g --num-executors 2 --executor-cores 2   --files 

这可能是因为controller.xml文件没有上传到应用程序容器.据我所知,纱线群集模式下的驱动程序进程将从群集中的任意节点开始.查看日志,我看到app.jar,ojdbc6.jar,hadoop_conf.zip和spark-assembly.jars正在上传到容器中.如何确保controller.xml文件也上传到纱线容器?

我可能在这里误解了一些东西,所以任何帮助都会非常感激.

谢谢



1> Ton Torres..:

根据Spark 文档,您的应用程序可以在本地打开文件,前提是每个节点都有一个文件副本并且位于相同的绝对路径中.

至于在提交应用程序时上传文件,我认为你必须--files在提交时在jar之前传递参数,所以像这样:

spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.rocai.controller.Controller \
--jars  \
--driver-memory 1g \
--executor-memory 1g \
--num-executors 2 \
--executor-cores 2 \
--files  \
  

但是,当您的控制器xml上传时,它将上传到HDFS上的../.sparkStaging/applicationId/...文件夹中.换句话说,即使文件已上载,作为参数传递给jar的绝对路径也不再有效.您必须以编程方式获取上载位置的路径.我相信你可以使用SparkFiles类,虽然我自己没有使用它.

另一种解决方法是手动将控制器xml上传到HDFS上的固定路径.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有