Airflow调度本地Spark任务失败,请求协助排查解决
解决Airflow运行Spark任务的三个核心错误
根据报错日志,问题集中在三个关键点,逐个解决即可:
1. Spark Master地址格式错误(双端口7077:7077)
问题原因
Airflow的Spark连接配置中,Host字段重复添加了端口,导致生成的spark-submit命令出现spark://MacBook-Pro-de-AdminSensei-9.local:7077:7077这种无效格式。
解决方法
- 方法一:修正Airflow Spark连接配置
进入Airflow UI的「Admin → Connections」,找到ID为spark的连接,修改Host字段为spark://MacBook-Pro-de-AdminSensei-9.local:7077,确保只包含一个端口号。 - 方法二:直接指定本地模式(适合本地测试)
如果是运行本地Spark任务,无需依赖远程Master,可直接在DAG的SparkSubmitOperator中指定master参数,去掉conn_id:task_elt_documento_pagar = SparkSubmitOperator( task_id='task_run_pysparkjob', master='local[*]', # 用本地模式,自动使用所有CPU核心 application="./dags/sparkjob.py", )
2. 找不到ps命令
问题原因
运行Airflow的环境(如Docker容器)缺少procps包,ps命令属于该包,Spark的load-spark-env.sh脚本需要用到它。
解决方法
根据环境系统类型安装procps:
- Ubuntu/Debian系统:
apt-get update && apt-get install -y procps - CentOS/RHEL系统:
yum install -y procps-ng - Docker环境:在Dockerfile中添加上述安装命令,构建镜像时自动安装。
3. JAVA_HOME未设置
问题原因
Spark依赖Java运行环境,当前Airflow执行环境未配置JAVA_HOME环境变量。
解决方法
- 全局设置(推荐)
在Airflow的启动脚本或配置文件中添加环境变量:
如果是Docker容器,在Dockerfile中添加:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 # 替换为你的Java实际路径 export PATH=$JAVA_HOME/bin:$PATHENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 ENV PATH=$JAVA_HOME/bin:$PATH - 任务级临时设置
在SparkSubmitOperator中通过env_vars参数传递:task_elt_documento_pagar = SparkSubmitOperator( task_id='task_run_pysparkjob', master='local[*]', application="./dags/sparkjob.py", env_vars={'JAVA_HOME': '/usr/lib/jvm/java-1.8.0-openjdk-amd64'} )
内容的提问来源于stack exchange,提问作者KuRu
相关产品推荐
相关产品推荐

