GCP系列-使用 Dataproc initialization actions 安裝 python package

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

以上為簡略的說明,若有疑問請在留言區發問,若是文章有幫助到你也可以讓我知道。


 上一篇
pyspark 系列 - collect_list 與 collect_set 實例教學 pyspark 系列 - collect_list 與 collect_set 實例教學
How to use collect_list & collect_set in pyspark dataframe?在使用 spark 操作 dataframe 時常常會做合併 (groupby與 aggregation) 與展開
2019-12-12
下一篇 
keras系列 - keras model部署與序列化於spark進行預測 keras系列 - keras model部署與序列化於spark進行預測
How to serialize keras model and apply to all workers on spark?Keras 先天設計上無法序列化 (serialize),只能在單機上使用 (利用cpu 或 gpu)。但我又有需
2019-11-29
  目錄