HDP2.6.3环境下Spark2.2在YARN Cluster模式无法加载配置
解决Spark2.2在YARN Cluster模式下无法读取/etc/spark2/conf配置的问题
这个问题的核心差异在于YARN Client和Cluster模式下Driver的运行位置不同:
- Client模式下,Driver运行在你提交任务的本地机器上,自然能直接读取本地的
/etc/spark2/conf配置文件; - Cluster模式下,Driver是运行在YARN集群的某个节点上的,默认情况下Spark不会自动把提交机器上的配置文件分发到Driver所在节点,所以会出现配置缺失的情况。
下面是几个针对性的解决方案,按推荐程度排序:
1. 通过Ambari配置自动分发Spark配置(最推荐)
因为你的集群是Ambari管理的,直接在Spark2的服务配置里设置默认的文件分发规则,一劳永逸:
- 登录Ambari UI,进入Spark2服务的配置页面;
- 在搜索框输入
spark.yarn.dist.files,找到这个配置项; - 添加需要分发的配置文件路径,比如:
/etc/spark2/conf/hive-site.xml,/etc/spark2/conf/spark-defaults.conf; - 保存配置并重启Spark2服务。
之后再提交Cluster模式任务时,Ambari会自动帮你把这些配置文件分发到Driver和Executor节点,无需手动加参数。
2. 提交任务时手动指定--files参数
如果只是临时测试,不想修改集群配置,可以在提交命令里用--files参数显式分发需要的配置文件:
spark-submit --class com.virtuslab.sparksql.MainClass --master yarn --deploy-mode cluster \ --files /etc/spark2/conf/hive-site.xml,/etc/spark2/conf/spark-defaults.conf \ /tmp/spark-hive-test/spark_sql_under_the_hood-spark2.2.0.jar
这样YARN会把这些文件复制到Driver和Executor的工作目录下,Spark启动时就能读取到这些配置了。
3. 确保Hive Metastore配置的正确性
另外,Cluster模式下无法访问Hive表,也可能是Hive metastore的配置问题:
- 检查
/etc/spark2/conf/hive-site.xml里的hive.metastore.uris配置是否正确(比如thrift://<metastore-host>:9083); - 确认YARN集群的所有节点都能连通这个metastore地址,端口没有被防火墙拦截;
- 提交任务时可以额外指定Hive版本和metastore jars配置,避免版本兼容问题:
(HDP2.6.3对应的Hive版本是1.2.1,这个参数要和集群实际Hive版本匹配)spark-submit --class com.virtuslab.sparksql.MainClass --master yarn --deploy-mode cluster \ --files /etc/spark2/conf/hive-site.xml \ --conf spark.sql.hive.metastore.version=1.2.1 \ --conf spark.sql.hive.metastore.jars=builtin \ /tmp/spark-hive-test/spark_sql_under_the_hood-spark2.2.0.jar
4. 验证配置是否生效
提交任务后,可以通过YARN的Application UI查看Driver的日志,搜索“hive-site.xml”或者“spark-defaults.conf”,确认这些配置文件是否被正确加载;也可以在Spark作业里打印相关配置项,比如spark.sql.hive.metastore.uris,验证配置是否生效。
内容的提问来源于stack exchange,提问作者Venkata Sudheer Kumar M
相关产品推荐
相关产品推荐

