![](/img/trans.png)
[英]Hung cells: running multiple jupyter notebooks in parallel with papermill
[英]ETL in Airflow aided by Jupyter Notebooks and Papermill
所以我的问题是我在 Airflow 中构建了 ETL 管道,但实际上首先在 Jupyter 笔记本中开发和测试提取、转换和加载功能。 所以我最终一直在我的 Airflow Python 操作员代码和 Jupyter 笔记本之间来回复制粘贴,效率很低。 我的直觉告诉我,所有这些都可以自动化。
基本上,我想在 Jupyter 中编写我的提取、转换和加载函数并让它们留在那里,同时仍在 Airflow 中运行管道并显示提取、转换和加载任务,并重试和 Airflow 的所有好东西开箱即用。
Papermill 能够参数化笔记本,但我真的想不出这对我的情况有何帮助。 有人可以帮我把这些点联系起来吗?
单个主 Jupyter 笔记本,带有任意数量的从笔记本(用作模板),使用papermill.execute_notebook
按顺序执行,应该足以自动化任何 ML 管道。
为了在管道阶段(从一个从笔记本到下一个)之间传递信息,可以使用另一个 Netflix 包scrapbook
,它允许我们在从笔记本中记录 python 对象(因为它们由papermill
处理),然后从管道主机中的从属设备中检索这些对象(保存使用scrapbook.glue
和阅读scrapbook.read_notebook
)。
从任何已完成的阶段恢复也是可能的,但它需要将在前一阶段保存的必要输入存储在可从 master 到达的可预测位置(例如,在本地 master JSON 文件或 MLflow 中)。
主笔记本也可以使用 cron 作业进行调度,例如来自 Kubernetes )。
由于管理成本(5 个容器,包括 2 个数据库),Airflow 对大多数 ML 团队来说可能是一种矫枉过正,而其他(非 Netflix)python 包要么需要更多样板文件(Luigi),要么需要额外的特权和用于执行程序的自定义 docker 图像( Elyra),而 Ploomber 将面临少数维护者的风险。
根据您的建议,可以通过 Papermill 在您的 Airflow 管道中使用 Jupyter Notebooks。 但是,Airflow 的优点之一是您可以将管道分成离散的步骤,这些步骤彼此独立,因此如果您决定在一个 Jupyter Notebook 中编写整个管道,那就违背了使用 Airflow 的目的。
因此,假设您的每个独立ETL 步骤都位于单独的 Jupyter Notebook 中,您可以尝试以下操作:
copy_data_from_s3
、 cleanup_data
、 load_into_database
(3 个步骤,每个步骤一个笔记本)。import papermill as pm
# ...
# define DAG, etc.
# ...
def copy_data_from_s3(**context):
pm.execute_notebook(
"copy_data_from_s3_step.ipynb",
"copy_data_from_s3_step.ipynb"
parameters=dict(date=context['execution_date'])) # pass some context parameter if you need to
)
PythonOperator
(尽管如果您想从命令行运行 Papermill ,您也可以使用BashOperator
)。 要匹配上面的函数:copy_data = PythonOperator(dag=dag,
task_id='copy_data_task',
provide_context=True,
python_callable=copy_data_from_s3)
为什么要将 ETL 作业作为 jupyter notebook。 你看到什么优势? Notebooks 通常用于构建带有实时数据的精美文档。 ETL 作业应该是在后台运行并自动化的脚本。
为什么这些工作不能是纯 python 代码而不是笔记本?
此外,当您使用 PapermillOperator 运行笔记本时,运行的输出将是另一个保存在某处的笔记本。 继续检查这些输出文件并不是那么友好。
我建议用普通的 Python 编写 ETL 作业并使用 PythonOperator 运行它。 这更简单,更容易维护。
如果您想使用笔记本电脑的奇特功能,那是另一回事。
Ploomber 将能够解决您的问题! 它实际上支持参数化笔记本和通过 Airflow\/shell 脚本\/Slurm\/Kubeflow\/Argo 进行部署。 这也有助于您定义模块化管道而不是单体笔记本。 这很容易\/直接开始,它比造纸厂提供了更多的灵活性。 看看这个! https:\/\/github.com\/ploomber\/ploomber<\/a>
"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.