Apache Zeppelin结合Apache Airflow使用1
前言
之前学了Zeppelin的使用,今天开始结合Airflow串任务。
Apache Airflow和Apache Zeppelin是两个不同的工具,各自用于不同的目的。Airflow用于编排和调度工作流,而Zeppelin是一个交互式数据分析和可视化的笔记本工具。虽然它们有不同的主要用途,但可以结合使用以满足一些复杂的数据处理和分析需求。
下面是一些结合使用Airflow和Zeppelin的方式:
-
Airflow调度Zeppelin Notebooks:
- 使用Airflow编写调度任务,以便在特定时间或事件触发时运行Zeppelin笔记本。
- 在Airflow中使用Zeppelin的REST API或CLI命令来触发Zeppelin笔记本的执行。
-
数据流管道:
- 使用Airflow编排数据处理和转换任务,例如从数据源提取数据、清理和转换数据。
- 在Zeppelin中创建笔记本,用于进一步的数据分析、可视化和报告生成。
- Airflow任务完成后,触发Zeppelin笔记本执行以基于最新数据执行分析。
-
参数传递:
- 通过Airflow参数传递,将一些参数值传递给Zeppelin笔记本,以便在不同任务之间共享信息。
- Zeppelin笔记本可以从Airflow任务中获取参数值,以适应特定的数据分析需求。
-
日志和监控:
- 使用Airflow监控工作流的运行情况,查看任务的日志和执行状态。
- 在Zeppelin中记录和可视化Airflow工作流的关键指标,以获得更全面的工作流性能洞察。
-
整合数据存储:
- Airflow可以用于从不同数据源中提取数据,然后将数据传递给Zeppelin进行进一步的分析。
- Zeppelin可以使用Airflow任务生成的数据,进行更深入的数据挖掘和分析。
结合使用Airflow和Zeppelin能够充分发挥它们各自的优势,实现更全面、可控和可视化的数据处理和分析工作流。
一、安装Airflow
安装参考:
https://airflow.apache.org/docs/apache-airflow/stable/start.html
CentOS 7.9安装后启动会报错,还需要配置下sqlite,参考:https://airflow.apache.org/docs/apache-airflow/2.8.0/howto/set-up-database.html#setting-up-a-sqlite-database
[root@slas bin]# airflow standalone
Traceback (most recent call last):
File "/root/.pyenv/versions/3.9.10/bin/airflow", line 5, in <module>
from airflow.__main__ import main
File "/root/.pyenv/versions/3.9.10/lib/python3.9/site-packages/airflow/__init__.py", line 52, in <module>
from airflow import configuration, settings
File "/root/.pyenv/versions/3.9.10/lib/python3.9/site-packages/airflow/configuration.py", line 2326, in <module>
conf.validate()
File "/root/.pyenv/versions/3.9.10/lib/python3.9/site-packages/airflow/configuration.py", line 718, in validate
self._validate_sqlite3_version()
File "/root/.pyenv/versions/3.9.10/lib/python3.9/site-packages/airflow/configuration.py", line 824, in _validate_sqlite3_version
raise AirflowConfigException(
airflow.exceptions.AirflowConfigException: error: SQLite C library too old (< 3.15.0). See https://airflow.apache.org/docs/apache-airflow/2.8.0/howto/set-up-database.html#setting-up-a-sqlite-database
二、使用步骤
1.目标
我想做个简单的demo,包括两个节点,实现如图所示功能,读取csv,去重:
csv文件输入在airflow上实现,去重在zeppelin上实现。
2.编写DAG
先实现extract_data_script.py,做个简单的读取csv指定列数据写入新的csv文件。
import argparse
import pandas as pd
def extract_and_write_data(date, output_csv, columns_to_extract):
# 读取指定列的数据
csv_file_path = f"/home/works/datasets/data_{
date}.csv"
df = pd.read_csv(csv_file_path, usecols=columns_to_extract)
# 将数据写入新的 CSV 文件
df.to_csv(output_csv, index=False)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--date", type