![](/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.