无需Airflow UI配置Airflow-MSSQL连接及报错排查求助
问题解决方案
一、解决ModuleNotFoundError: No module named 'airflow.providers.microsoft.mssql'
Airflow官方Docker镜像默认未预装MSSQL provider,你本地安装的依赖无法同步到容器内部,需通过自定义镜像完成依赖安装:
构建自定义Airflow镜像
在项目根目录新建Dockerfile,内容如下:FROM apache/airflow:2.4.1 USER root # 安装ODBC依赖(MSSQL连接必备) RUN apt-get update && apt-get install -y unixodbc-dev USER airflow # 安装与Airflow 2.4.1兼容的MSSQL provider版本 RUN pip install apache-airflow-providers-microsoft-mssql==3.3.0修改docker-compose.yaml配置
将原有Airflow服务的image字段替换为构建自定义镜像的配置:services: airflow-webserver: build: . # 保留原有的ports、volumes、environment等其他配置 airflow-scheduler: build: . # 保留原有的其他配置 airflow-worker: build: . # 保留原有的其他配置重启容器生效
docker-compose down docker-compose build docker-compose up -d
二、解决PyCharm的符号链接警告
该警告是Airflow尝试创建日志目录符号链接时,因系统权限不足或Windows环境不支持符号链接导致的,可直接关闭符号链接功能:
- 在PyCharm的DAG运行配置中,添加环境变量:
AIRFLOW__LOGGING__SYMLINK_LATEST=False - 若使用Windows系统,也可尝试以管理员权限启动PyCharm,允许创建符号链接。
三、验证DAG示例
确保DAG中导入正确的钩子并使用配置好的连接:
from airflow import DAG from airflow.operators.python import PythonOperator from airflow.providers.microsoft.mssql.hooks.mssql import MsSqlHook from datetime import datetime default_args = { 'owner': 'airflow', 'start_date': datetime(2023, 1, 1), } with DAG('mssql_read_dag', default_args=default_args, schedule_interval='@daily', catchup=False) as dag: def read_mssql_data(): # 使用配置好的连接ID获取钩子 hook = MsSqlHook(mssql_conn_id='MY_MSSQL') conn = hook.get_conn() cursor = conn.cursor() cursor.execute("SELECT TOP 10 * FROM your_target_table") results = cursor.fetchall() for row in results: print(row) conn.close() read_task = PythonOperator( task_id='read_mssql_data', python_callable=read_mssql_data ) read_task
四、确认连接配置正确性
检查docker-compose.yaml中的环境变量格式是否符合要求,因MSSQL部署在Airflow容器内,连接字符串示例:
environment: AIRFLOW_CONN_MY_MSSQL: "mssql+pyodbc://sa:YourStrongPassword@localhost:1433/YourDatabaseName?driver=ODBC+Driver+17+for+SQL+Server"
内容的提问来源于stack exchange,提问作者swede
相关产品推荐
相关产品推荐

