You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

远程Spark集群环境下spark-submit提交HDFS中Jar包失败报错排查

解决Spark-Submit Cluster模式下HDFS URI不完整的错误

你遇到的问题核心在于Cluster模式下Spark Driver和Executor读取的是集群节点的配置,而非本地笔记本的配置,再加上URI写法的小失误,才导致了这个报错。下面一步步帮你排查解决:

1. 修正HDFS URI的写法

你提到尝试用完整路径时写了hdfs:///mydns.asuscomm.com:8021/user/...,这里多了一个斜杠!正确的完整HDFS URI格式是hdfs://<host>:<port>/path——两个斜杠后直接跟主机和端口,再跟路径。你写的三个斜杠会让系统把mydns.asuscomm.com:8021当成路径的一部分,自然会报错"Incomplete HDFS URI, no host"。

正确的完整路径应该是:

hdfs://mydns.asuscomm.com:8021/user/stevenhurwitt/jars/redditStreaming-1.0-SNAPSHOT.jar

2. 确保集群节点的Hadoop/Spark配置同步

Cluster模式下,Driver是在集群的某个节点上启动的,Executor也运行在集群节点上,它们读取的是集群本地的配置文件,不是你笔记本上的core-site.xml。所以需要:

  • 登录到集群的所有节点,检查$HADOOP_HOME/libexec/etc/hadoop/core-site.xml,确保里面的fs.defaultFS配置和你本地一致:
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mydns.asuscomm.com:8021</value>
    </property>
    
  • 如果Spark使用独立的配置文件(比如$SPARK_HOME/libexec/conf/core-site.xml),也要同步这个配置到所有集群节点,然后重启Spark集群服务让配置生效。

3. 验证集群节点的HDFS访问能力

登录到集群的任意节点,执行以下命令确认节点能正常访问目标HDFS路径:

hdfs dfs -ls hdfs://mydns.asuscomm.com:8021/user/stevenhurwitt/jars/

如果这里失败,说明集群节点存在网络或解析问题:

  • 可以尝试换成NameNode的IP地址替代DNS域名;
  • 检查集群节点和NameNode之间的网络连通性,确保8021端口开放。

4. 显式指定Spark配置参数(兜底方案)

如果不想修改集群配置,或者配置同步有问题,可以在spark-submit命令中直接指定spark.hadoop.fs.defaultFS参数,强制Driver和Executor使用正确的默认FS:

spark-submit --deploy-mode cluster \
--conf spark.hadoop.fs.defaultFS=hdfs://mydns.asuscomm.com:8021 \
--class com.steven.redditStreaming.dataFrameFromCSVFile \
hdfs://mydns.asuscomm.com:8021/user/stevenhurwitt/jars/redditStreaming-1.0-SNAPSHOT.jar

按照上面的步骤操作,应该就能解决这个URI错误了。

内容的提问来源于stack exchange,提问作者steven hurwitt

火山引擎 最新活动