大数据离线处理:Airflow调度Hive脚本工作流设计
1. 核心组件关系
graph LR
A[Airflow Scheduler] --> B[Hive Metastore]
A --> C[HiveServer2]
B --> D[HDFS/Hadoop集群]
C --> D
2. 工作流设计步骤
步骤1:环境准备
-
安装配置组件:
- Airflow 2.0+(启用
HiveOperator) - Hive 3.x(启用HiveServer2)
- Hadoop集群(HDFS+YARN)
- Airflow 2.0+(启用
-
连接配置:
python# airflow.cfg [hive] default_hive_mapred_queue = default
步骤2:创建Hive脚本 示例脚本 user_analysis.hql:
sql
-- 每日用户行为分析
CREATE TABLE IF NOT EXISTS dws_user_behavior_daily_${dt}
STORED AS ORC AS
SELECT
user_id,
COUNT(*) AS pv,
SUM(CASE WHEN event_type='purchase' THEN 1 ELSE 0 END) AS purchases
FROM ods_user_logs
WHERE dt = '${hivevar:dt}'
GROUP BY user_id;
步骤3:定义Airflow DAG
python
from airflow import DAG
from airflow.providers.apache.hive.operators.hive import HiveOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'data_team',
'retries': 3,
'retry_delay': timedelta(minutes=5)
}
with DAG(
'hive_daily_etl',
default_args=default_args,
schedule_interval='0 3 * * *', # 每天凌晨3点执行
start_date=datetime(2023, 1, 1),
catchup=False
) as dag:
# 任务1:执行Hive分析脚本
run_hive_analysis = HiveOperator(
task_id='run_user_analysis',
hql='user_analysis.hql',
hive_cli_conn_id='hive_default',
params={'dt': '{{ ds_nodash }}'}, # 自动注入执行日期
dag=dag
)
# 任务2:数据质量检查(示例)
data_quality_check = HiveOperator(
task_id='verify_data_integrity',
hql="SELECT COUNT(*) FROM dws_user_behavior_daily_{{ ds_nodash }} WHERE pv < 0",
dag=dag
)
# 任务依赖关系
run_hive_analysis >> data_quality_check
3. 关键配置说明
-
参数传递机制:
- 使用
{``{ ds_nodash }}获取执行日期(格式:20230101) - Hive脚本中通过
_${dt}接收参数
- 使用
-
Hive连接配置:
bashairflow connections add hive_default \ --conn-type hive \ --conn-host hive-server2.example.com \ --conn-port 10000 \ --conn-login hiveuser -
错误处理策略:
- 自动重试3次(可配置)
- 失败时邮件告警
- 数据质量检查失败阻断流程
4. 执行流程
-
调度触发:
- Airflow Scheduler 每天3:00启动DAG
- 生成
ds_nodash日期参数(如:20231001)
-
任务执行:
sequenceDiagram Airflow Worker->>HiveServer2: 提交HQL请求 HiveServer2->>Hive Metastore: 获取元数据 HiveServer2->>YARN: 申请资源 YARN->>Hadoop集群: 启动MapReduce任务 Hadoop集群->>HDFS: 读写数据 -
结果验证:
- 数据质量检查SQL返回0条异常记录
- 生成分区表:
dws_user_behavior_daily_20231001
5. 优化建议
-
性能优化:
- 使用Tez引擎:在Hive脚本首行添加
SET hive.execution.engine=tez; - 动态分区:
SET hive.exec.dynamic.partition.mode=nonstrict;
- 使用Tez引擎:在Hive脚本首行添加
-
资源控制:
sql-- 在Hive脚本中设置资源队列 SET mapreduce.job.queuename=etl_queue; SET tez.queue.name=etl_queue; -
数据回溯:
- 通过Airflow的
backfill命令重跑历史数据:
bashairflow backfill -s 20230101 -e 20230131 hive_daily_etl - 通过Airflow的
6. 监控与告警
-
Airflow UI监控:查看任务状态、日志、执行时长
-
Prometheus集成 :
python# 安装插件 pip install 'apache-airflow-prometheus' -
告警规则 :
- 任务失败率 > 5% 触发PagerDuty告警
- 单任务执行时间 > 2小时触发预警
设计要点:通过参数化日期实现增量处理,结合数据质量检查确保结果可靠性,利用Airflow的重试机制保障稳定性。