我使用以下命令在yarn-cluster模式下部署我的spark应用程序
spark-submit --master yarn --deploy-mode cluster --class com.rocai.controller.Controller --jars <absolute-path-to-ojdbc6.jar> --driver-memory 1g --executor-memory 1g --num-executors 2 --executor-cores 2 <absolute-path-to-app.jar> <absolute-path-to-controller.xml>
controller.xml是app.jar的参数。我总是最终找到controller.xml文件的文件未找到异常。我甚至尝试使用--files标签传递controller.xml文件,如此
spark-submit --master yarn --deploy-mode cluster --class com.rocai.controller.Controller --jars <absolute-path-to-ojdbc6.jar> --driver-memory 1g --executor-memory 1g --num-executors 2 --executor-cores 2 <absolute-path-to-app.jar> <absolute-path-to-controller.xml> --files <absolute-path-to-controller.xml>
这可能是因为controller.xml文件没有上传到应用程序容器。据我所知,纱线群集模式下的驱动程序进程将从群集中的任意节点开始。查看日志,我看到app.jar,ojdbc6.jar,hadoop_conf.zip和spark-assembly.jars正在上传到容器中。如何确保controller.xml文件也上传到纱线容器?
我可能在这里误解了一些东西,所以任何帮助都会非常感激。
谢谢
答案 0 :(得分:5)
根据Spark documentation,您的应用程序可以在本地打开文件,前提是每个节点都有一个文件副本并且位于相同的绝对路径中。
至于在提交应用程序时上传文件,我认为你必须在提交时在jar之前传递--files
参数,所以像这样:
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.rocai.controller.Controller \
--jars <absolute-path-to-ojdbc6.jar> \
--driver-memory 1g \
--executor-memory 1g \
--num-executors 2 \
--executor-cores 2 \
--files <absolute-path-to-controller.xml> \
<absolute-path-to-app.jar> <absolute-path-to-controller.xml>
但是,当您上传控制器xml时,它将上传到HDFS上的../。sparkStaging / applicationId / ...文件夹中。换句话说,即使文件已上载,作为参数传递给jar的绝对路径也不再有效。您必须以编程方式获取其上载位置的路径。我相信你可以使用SparkFiles课程,但我自己还没有使用它。
另一种解决方法是手动将控制器xml上传到HDFS上的固定路径。
答案 1 :(得分:1)
仅为了参考,下面是我用来执行spark工作的命令
spark-submit \
--class com.rocai.controller.Controller \
--master yarn \
--deploy-mode cluster \
--jars /usr/hdp/current/spark-client/ojdbc6.jar,\
/usr/hdp/current/spark-client/lib/datanucleus-api-jdo-3.2.6.jar,\
/usr/hdp/current/spark-client/lib/datanucleus-core-3.2.10.jar,\
/usr/hdp/current/spark-client/lib/datanucleus-rdbms-3.2.9.jar \
--files controller.xml,/usr/hdp/current/spark-client/conf/hive-site.xml \
--driver-memory 1g --executor-memory 1G --num-executors 2 --executor-cores 1 \
app.jar \
controller.xml
似乎有必要包括datanucleus jar和hive-site.xml,以避免“找不到类”。例外。还要确保逗号分隔值之间没有空格。