【Python】工作流:Jupyter Notebook、Airflow

工作流:Jupyter Notebook、Airflow

1. Jupyter Notebook

1.1 安装

可以使用 pip 或者 conda 进行安装。

  • 使用 pip 安装
pip install notebook
  • 使用 conda 安装
conda install -c conda-forge notebook
1.2 基本概念
  • Notebook 文件:以 .ipynb 为扩展名,它是一个包含代码、文本(支持 Markdown 格式)、图像和计算结果的文档。可以将其看作是一个交互式的实验环境,适合进行数据分析、机器学习模型开发、数据可视化等工作。
  • Cell(单元格):是 Notebook 的基本组成单位,分为代码单元格和 Markdown 单元格。代码单元格用于编写和执行 Python 等代码;Markdown 单元格用于编写说明文档、注释等,支持丰富的文本格式,如标题、列表、表格等。
  • Kernel(内核):是一个独立的进程,负责执行代码单元格中的代码。Jupyter Notebook 支持多种内核,如 Python、R、Julia 等,可以根据需要切换内核。
1.3 工作流示例
  • 启动 Jupyter Notebook
    在命令行中输入以下命令启动 Jupyter Notebook 服务器:
jupyter notebook

这会在默认浏览器中打开 Jupyter Notebook 的主界面。

  • 创建新的 Notebook
    在主界面中点击 “New” 按钮,选择所需的内核(如 Python 3),即可创建一个新的 Notebook。

  • 编写和执行代码
    在代码单元格中编写 Python 代码,例如:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制图形
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

按下 Shift + Enter 组合键执行代码单元格,代码的执行结果(如绘图)会显示在单元格下方。

  • 保存和分享 Notebook
    点击界面上的保存按钮保存 Notebook 文件。可以将 .ipynb 文件分享给他人,他人可以在自己的 Jupyter Notebook 环境中打开并查看代码和结果。也可以将 Notebook 导出为多种格式,如 HTML、PDF 等。
1.4 Jupyter Notebook 的高级特性
  • 魔法命令:Jupyter Notebook 提供了一些特殊的魔法命令,以 %%% 开头。例如,%timeit 用于测量代码的执行时间,%%writefile 用于将单元格内容保存为文件。
%timeit [i**2 for i in range(1000)]
  • 交互式小部件:可以使用 ipywidgets 库创建交互式小部件,如滑块、下拉框等,增强 Notebook 的交互性。
import ipywidgets as widgets
from IPython.display import display

def f(x):
    print(x)

slider = widgets.IntSlider(min=0, max=10, step=1, value=5)
display(slider)
widgets.interact(f, x=slider);

2. Airflow

2.1 安装

可以使用 pip 进行安装:

pip install apache-airflow

安装完成后,需要进行初始化:

airflow db init

创建用户:

airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email [email protected]
2.2 基本概念
  • DAG(有向无环图):是 Airflow 的核心概念,用于定义任务之间的依赖关系和执行顺序。一个 DAG 由多个任务(Task)组成,任务之间通过有向边连接,表示任务的先后顺序。DAG 定义了一个工作流,规定了任务何时执行以及如何执行。
  • Task(任务):是 DAG 中的基本执行单元,可以是一个 Python 函数、一个 SQL 查询、一个 Shell 脚本等。每个任务都有一个唯一的标识符和执行逻辑。
  • Operator(操作符):用于定义任务的具体执行方式,Airflow 提供了多种内置的操作符,如 PythonOperator 用于执行 Python 函数,BashOperator 用于执行 Shell 脚本,SQLiteOperator 用于执行 SQL 查询等。
  • Scheduler(调度器):负责根据 DAG 的调度规则(如定时执行、间隔执行等)来触发 DAG 的运行,并协调任务的执行顺序。
  • Executor(执行器):负责实际执行任务,Airflow 支持多种执行器,如 SequentialExecutor(单线程执行,用于测试和开发)、LocalExecutor(多线程执行,在本地机器上运行)、CeleryExecutor(分布式执行,可在集群上运行)等。
2.3 工作流示例

以下是一个简单的 Airflow DAG 示例,包含两个任务,一个任务打印 “Hello”,另一个任务打印 “World”,且第二个任务依赖于第一个任务。

from datetime import datetime
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

# 定义 DAG 参数
dag = DAG(
    'hello_world_dag',
    description='A simple DAG to print Hello and World',
    schedule_interval='@daily',  # 每天执行一次
    start_date=datetime(2025, 2, 20),
    catchup=False
)

# 定义第一个任务
task1 = BashOperator(
    task_id='print_hello',
    bash_command='echo "Hello"',
    dag=dag
)

# 定义第二个任务
task2 = BashOperator(
    task_id='print_world',
    bash_command='echo "World"',
    dag=dag
)

# 设置任务依赖关系
task1 >> task2

将上述代码保存为一个 Python 文件(如 hello_world_dag.py),并将其放置在 Airflow 的 dags 目录下。然后启动 Airflow 的 Web 服务器和调度器:

airflow webserver -p 8080
airflow scheduler

在浏览器中打开 http://localhost:8080,登录 Airflow 界面,即可看到 hello_world_dag,可以手动触发 DAG 运行或等待调度器按照设定的时间自动触发。

2.4 Airflow 的高级特性
  • 动态 DAG 生成:可以使用 Python 代码动态生成 DAG,根据不同的参数或配置生成不同的任务和依赖关系。
  • 任务重试和容错:可以为任务设置重试次数和重试间隔,当任务失败时,Airflow 会自动进行重试。
  • 监控和日志:Airflow 提供了详细的监控界面和日志记录功能,可以查看 DAG 和任务的执行状态、运行时间、错误信息等。

3. Jupyter Notebook 与 Airflow 的协同工作流

  • 使用 Jupyter Notebook 进行数据探索和模型开发:在 Jupyter Notebook 中进行数据清洗、分析和机器学习模型的开发和测试。可以将代码封装成 Python 函数,方便后续在 Airflow 中调用。
  • 将 Jupyter Notebook 中的代码集成到 Airflow DAG 中:使用 PythonOperator 将 Jupyter Notebook 中的 Python 函数作为任务添加到 Airflow DAG 中。例如:
from datetime import datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator

# 定义一个 Python 函数,模拟在 Jupyter Notebook 中开发的代码
def my_data_processing_function():
    print("Data processing is done!")

# 定义 DAG
dag = DAG(
    'notebook_airflow_dag',
    description='Integrate Jupyter Notebook code into Airflow',
    schedule_interval='@weekly',
    start_date=datetime(2025, 2, 20),
    catchup=False
)

# 定义任务
task = PythonOperator(
    task_id='run_data_processing',
    python_callable=my_data_processing_function,
    dag=dag
)
  • 通过 Airflow 调度和监控数据处理任务:使用 Airflow 的调度器按照设定的时间间隔或条件触发 DAG 的运行,同时可以在 Airflow 的监控界面中查看任务的执行状态和日志信息。

通过这种协同工作流,可以充分发挥 Jupyter Notebook 的交互式开发优势和 Airflow 的任务调度和管理能力,提高大数据处理和分析的效率和可靠性。

你可能感兴趣的:(Python,python,jupyter,开发语言)