How to use dataproc initialization actions to install python packages on cluser (on all workers)?
在 GCP 的 Dataproc 要啟動 pyspark 後只會有一些相關預設的 python 套件可以使用,如果要額外的 package 就要事後自行安裝,不過卻只能在 master 安裝
(除非大大認真的每台都裝),所以 gcp 有提供 dataproc initialization actions
方法可以在 launch 機器時就將所有的 package 安裝至每一台 worker 上面,此範例將會有兩種用法:PIP_PACKAGES
, CONDA_PACKAGES
。
在本範例你會學到:
- 如何使用 dataproc initialization actions
- 安裝自己想要的 python 套件於 dataproc 上
在本範例你需要先準備好:
- 熟知 dataproc 基本語法
- 有使用 GCP 服務的經驗
- 本範例使用 image 版本為 1.4(文章最後一張會解釋)
註:由於 gcp 語法改版的的頻率其實不低,可能過幾個月就會長得有點不一樣,請大家斟酌參考(也可以留言告知我)。
1.基礎語法介紹
在過去都需要自己去更改 google 所提供的 initialization 的相關檔案,將 pip install ***
放進去才能安裝自己想要的套件,現在
google 將它獨立的出來變成了參數可以使用,就不用頻繁地去更動 sh
檔案了。
- 基礎範例
gcloud dataproc clusters create my-cluster \
--metadata 'PIP_PACKAGES=pandas' \
--initialization-actions gs://$MY_BUCKET/python/pip-install.sh
上方的 gs://
路徑可以直接指向 google 提供的檔案(gs://dataproc-initialization-actions/python/pip-install.sh
),也可以自己載回來自定義。
2.指定版本號
其實跟 pip
要指定版本時蠻像的,只是記得版本號的等號 ==
是兩個喔!
gcloud dataproc clusters create my-cluster \
--metadata 'PIP_PACKAGES=pandas==0.23.0' \
--initialization-actions gs://$MY_BUCKET/python/pip-install.sh
3.多套件同時安裝
與上方大同小異,要注意的是套件彼此之間的分隔是用一個空白
gcloud dataproc clusters create my-cluster \
--metadata 'PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
--initialization-actions gs://$MY_BUCKET/python/pip-install.sh
4.另一種方式
講到這前面其實還蠻簡單的吧,我們剩下一種就是 CONDA_PACKAGES
的方式,不過基本上就是一模一樣,將 PIP_PACKAGES
換掉就好,要注意的點是版本號的等號 =
是一個喔!(2020/04/14補充:經過實測單個或兩個等號都不會出錯,不知道之後會不會變動):
gcloud dataproc clusters create my-cluster \
--metadata 'CONDA_PACKAGES=pandas=0.23.0 scipy=1.1.0' \
--initialization-actions gs://$MY_BUCKET/python/conda-install.sh
5.Image版本差異
這裡要特別注意的是 dataproc 啟動時的 image 版本會影響 python
版本以及 dataproc initialization actions
與法上稍有不同。本文使用的是 --image-version=1.4
(啟動時會是 python3),這個版本下的語法就如前文所述,其他版本請見下方連結參考。
https://cloud.google.com/dataproc/docs/tutorials/python-configuration
參考資料
https://github.com/GoogleCloudPlatform/dataproc-initialization-actions/tree/master/python
以上為簡略的說明,若有疑問請在留言區發問,若是文章有幫助到你也可以讓我知道。