You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Airflow的SparkSubmitOperator时HDFS路径无效问题求助

解决HDFS路径无效的Spark任务报错问题

错误原因分析

报错java.lang.IllegalArgumentException: Pathname /localhost:9000/hospital/data from hdfs:/localhost:9000/hospital/data is not a valid DFS filename主要由以下问题导致:

  • HDFS路径格式错误:使用了hdfs:/而非正确的hdfs://协议前缀
  • 集群模式下路径写法不合理:YARN模式任务运行在集群节点,localhost:9000无法被集群节点正确访问
  • 不必要的环境变量配置干扰了Spark的集群配置读取

具体解决方案

1. 修正HDFS路径写法

直接使用你实际存放文件的正确路径,有两种可选方式:

  • 完整HDFS URL(和文件实际路径一致):
    target_dir = "hdfs://hospital/data/test.csv"
    
  • 如果Hadoop配置中已将默认文件系统设置为hdfs://hospital,可简化为绝对路径:
    target_dir = "/hospital/data/test.csv"
    

注意:不要使用hdfs:/localhost:9000/...这类错误格式,也避免在YARN模式下用localhost指向NameNode。

2. 移除test.py中冗余的环境变量配置

通过Airflow的SparkSubmitOperator提交任务时,Spark会自动读取集群的Hadoop、Spark环境配置,无需在test.py中手动设置以下环境变量,删除这些代码:

os.environ['JAVA_HOME'] = '/usr/lib/jvm/java-1.8.0-openjdk-amd64'
os.environ['SPARK_HOME'] = '/opt/spark3'
os.environ['YARN_CONF_DIR'] = '/opt/hadoop/etc/hadoop'
os.environ['HADOOP_CONF_DIR'] = '/opt/hadoop/etc/hadoop'

3. 优化SparkSession配置

SparkSubmitOperator已经通过conf={'spark.master': 'yarn'}指定了运行模式,无需在test.py中重复设置master("yarn"),简化后的SparkSession初始化代码:

spark = SparkSession.builder.appName('test1').getOrCreate()

修改后的完整test.py代码

spark = SparkSession.builder.appName('test1').getOrCreate()

target_dir = "hdfs://hospital/data/test.csv"
# 或者使用简化路径:target_dir = "/hospital/data/test.csv"

file = spark.read.format('csv').options(header='True', inferSchema='True').load(target_dir)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:54:06