這陣子最常使用的GCP服務就是 Cloud Dataproc , Cloud Dataproc 是為了簡化Spark及Hadoop服務而設計,能讓使用者進行批次處理、查詢、資料串流及機器學習等工作,其自動化工具可協助使用者更快新增及更容易管理資料叢集,並且能在不使用時關閉,以降低成本,使企業能把心力花在資料分析的核心工作上。
對我來說他有幾個優點:
- 不用自己維運一組Yarn Spark Cluster,更不用煩惱需要擴充配置的問題
- 需要用就直接開,開完就砍掉,一切自動化又省錢
不過有在玩 Spark 而且是用PySpark 的人可能會遇到不少環境設定的問題,之所以會使用PySpark 開發就是貪圖python 的許多ML 和科學運算相關 Library,這時候就會遇到需要再每一台spark worker node 上安裝python lib 的問題,要解決這個問題有兩種方法:
- 利用Cloud Dataproc script 啟動 cluster 時,增加開機執行指令透過pip安裝套件
- 利用Cloud Dataproc script 啟動 cluster 時,直接使用 Custom Image 來開啟woker node
可想而知,第二個方法一定會比第一個方法(dataproc-initialization-actions)快的多,省掉了等待安裝套件的時間,所以本篇文章就來教大家怎麼使用Dataproc Custom Image 預先把需要用到的python lib 裝好。
參考資料:
準備環境 (我是mac 開發環境)
- 確認你的mac有安裝python
- 確認你的mac gcloud 套件
- 從 GoogleCloudPlatform/compute-image-tools 下載 Daisy,更改權限為可以執行
透過Script 產生 custom Image
產生custom Image 的script 可以參考我的repo:這邊有幾個參數(expire-day)你需要注意,代表你的這個image 會再一年後過期,到時候就要重新做一個。
python generate_custom_image.py \
--image-name pyspark-with-conda-v2-365 \
--dataproc-version 1.3.5 \
--customization-script customization_script.sh \
--daisy-path ~/bin/daisy \
--zone asia-east1-b \
--gcs-bucket gs://pvmax-spark-image \
--expire-day 365
custom image 你需要安裝什麼套件,則是修改這個檔案 customization_script.sh
#!/bin/bash
# Initialization actions examples: # # apt-get -y update # apt-get install python-dev # apt-get install python-pip # pip install numpy
# https://github.com/GoogleCloudPlatform/dataproc-initialization-actions/tree/master/conda
gsutil -m cp -r gs://dataproc-initialization-actions/conda/bootstrap-conda.sh . gsutil -m cp -r gs://dataproc-initialization-actions/conda/install-conda-env.sh .
chmod 755 ./*conda*.sh
# Install Miniconda / conda ./bootstrap-conda.sh
# Update conda root environment with specific packages in pip and conda CONDA_PACKAGES='numpy pyspark requests scipy tzlocal python-dateutil' PIP_PACKAGES='slackclient gpyopt' CONDA_PACKAGES=$CONDA_PACKAGES PIP_PACKAGES=$PIP_PACKAGES ./install-conda-env.sh
透過Custom Image 產生Cluster
gcloud dataproc clusters create ${GCS_CLUSTER} \
--scopes cloud-platform \
--image pyspark-with-conda-v2-365 \
--bucket ${bucket_name} \
--zone ${gcp_zone} \
--master-boot-disk-size 500GB \
--master-machine-type n1-highmem-2 \
--num-masters 1 \
--num-workers 2 \
--worker-machine-type n1-standard-8 \
--num-preemptible-workers 2 \
--preemptible-worker-boot-disk-size 500GB \
--properties ${PROPERTIES} \
--metadata slack_key=${slack_key}
因為 datarpoc 把工作的stdout 整合在後台,所以要察看程式執行結果只需要到選單(Dataproc --> 工作),就可以看到歷史執行狀況
結論
透過custom Image 可以有效降低啟動cluster 的時間,另外可以搭配程式執行完畢透過script 把cluster 自動砍掉,這樣一來就能有效降低運算分析的 Cost 。
沒有留言:
張貼留言