我使用以下命令在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文件也上传到纱线容器?
我可能在这里误解了一些东西,所以任何帮助都会非常感激.
谢谢
根据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上的固定路径.