使用Airflow GlueJobOperator创建Python3作业却报Python2不支持错误
问题分析与解决方案
核心原因
你遇到的问题大概率是以下两种情况之一:
- 同名Glue作业已存在:AWS Glue中已经有与
job["name"]同名的作业,且该作业最初是用Python2配置的。Airflow的GlueJobOperator默认会复用现有作业配置而非覆盖,导致你指定的create_job_kwargs参数无法生效。 create_job_kwargs参数结构不完整:Glue的Command配置需要明确指定作业类型(Name字段),缺失该字段可能触发系统默认使用旧的Python版本配置逻辑。
解决方案
方案1:删除现有同名Glue作业
登录AWS Glue控制台,找到对应名称的作业并删除,之后重新运行Airflow DAG。此时Airflow会按照你指定的create_job_kwargs参数创建全新的Glue作业,自动应用Python3配置。
方案2:强制更新现有作业配置
如果不想删除现有作业,在GlueJobOperator中添加update_job_kwargs参数,将配置同步到已有作业:
glue = GlueJobOperator( task_id=f'run_{job["name"]}', job_name=job["name"], script_location=job["script_location"], script_args=job["script_args"], aws_conn_id='glue_job_conn', region_name='us-east-1', iam_role_name="AWSGlueServiceRoleReadS3", create_job_kwargs={"Command": {"Name": "glueetl", "PythonVersion": "3"}, "GlueVersion": "4.0", "WorkerType": "G.1X", "NumberOfWorkers": 2}, # 添加update_job_kwargs强制更新现有作业 update_job_kwargs={"Command": {"Name": "glueetl", "PythonVersion": "3"}, "GlueVersion": "4.0", "WorkerType": "G.1X", "NumberOfWorkers": 2}, deferrable=False, verbose=True, dag=dag, )
注意:
Command.Name需匹配作业类型:Spark ETL作业填glueetl,Python Shell作业填pythonshell。
方案3:升级Airflow亚马逊提供商版本
若使用的apache-airflow-providers-amazon版本较旧,可能存在参数传递的bug。升级到最新稳定版(如>=6.0.0)可解决这类问题:
pip install --upgrade apache-airflow-providers-amazon
内容的提问来源于stack exchange,提问作者Luis Felipe
相关产品推荐
相关产品推荐

