How to launch/create Dataproc clusters with multi properties (jars, packages)?
在本範例你會學到:
- 如何在 GCP Dataproc properties 中帶入多個需要安裝的套件,本範例將會示範:
- kafka(
Prefix:spark
) - stackdriver(
Prefix:dataproc
) - clickhouse(
Prefix:spark
)
- kafka(
上方所列的 Prefix
將會在下方說明。
在本範例你需要先準備好:
- 對 GCP (Google Cloud Platform) 有基礎認識
- 有需要在 cluster 使用多種套件的需求
1.一般使用方式
根據 Google 官方文件,有定義了可以帶入的相關套件的Prefix
,ex: Spark, pig, hdfs等等的項目,更詳細的定義請見文件。
在網路上其實有相當多的使用方式,也看得眼花撩亂,其實官方文件最近已經把它定義的很清楚了,讓我來帶大家一探究竟:
懶得聽我廢話也可以自己看:
https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties
基礎定義:
file_prefix1:property1=value1,file_prefix2:property2=value2,...
- 此定義的前提是沒有重複使用到
相同的 prefix 中的不同套件
- 兩個
prefix
之間是用逗號隔開 - prefix 後會接一個冒號(
:
),再接property
名稱,再接(=
)來放入值
是不是沒有很懂,來簡單示範一次:
- 第一個要使用的套件
dataproc:dataproc.monitoring.stackdriver.enable=true
- 第二個要使用的套件
spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2
- 接起來的方式就是簡單用逗號(
,
)分開
--properties 'spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2,dataproc:dataproc.monitoring.stackdriver.enable=true'
大家可能會注意到,剛剛官網不是說只有三個符號,冒號、等號跟逗號
而已嗎?怎麼上面例子一大堆符號,這就來拿 clickhouse
的套件來簡單說明一下:
# 這個 clickhouse 例子等號後面又有兩個冒號
spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2
某些套件本身就已經有定義好他的名稱了,其中可能包含版本號碼,只要是等號後面的可以就當成一串 string 代表是某個套件名稱的組合喔,其中的標點符後就照抄官網上的就好! 上方範例等號後面 ru.yandex.clickhouse:clickhouse-jdbc:0.2
的字串就代表套件名稱與版本號
!不屬於 properties 本身的結構喔!
2.需要使用相同 prefix 的方式
大家可能會覺得,這跟 prefix
一不一樣有什麼關係,沒錯,我一開始也是這樣想的,所以延續上方的例子,我要再加入一個 kafka
的套件(也是來自 prefix:spark)的時候,第一直覺會這樣寫:
--properties 'spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2,dataproc:dataproc.monitoring.stackdriver.enable=true,spark:org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.2'
延續上面例子直接用,
在分開第三個套件就好了,是不是很直覺。真的去啟動 dataproc 的時候也不會有任何錯誤,但在 submit job 的時候就會發現,同一個 prefix
他只會認得一個喔,而且他會認得最後一個,也就是我最後只會成功帶入 stackdriver
與 kafka
,clickhouse
是會安裝失敗的!
對此狀況官網也有提出相對應的撰寫格式:
--properties ^#^file_prefix1:property1=part1,part2#file_prefix2:property2=value2
觀察一下整句語法,多了兩種符號的寫法:
^#^
:當遇到會使用相同 prefix 時的開頭寫法- 中間的
#
:分隔兩個不同的 prefix =part1,part2
: 剛剛上方講到的同套件問題,就可以直接用逗號
解決囉!
我們把剛剛錯誤的用法來稍微修正一下:
--properties ^#^spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2,org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.2#dataproc:dataproc.monitoring.stackdriver.enable=true
第一次看到的人應該還是會覺得很亂,不過懂了官方定義的格式其實就很明瞭了,相同共用 spark prefix 的 clickhouse 及 kafka 就在等號
後面用逗號
分隔,而不同prefix之間就用井字號
分隔。
3.完整寫法
gcloud dataproc clusters create test-cluster \
--region=global \
--master-machine-type n1-highmem-4 \
--master-boot-disk-size 100GB \
--num-workers 2 \
--worker-boot-disk-size 500GB \
--worker-machine-type n1-highmem-4 \
--zone asia-east1-b \
--image-version=1.4 \
--properties ^#^spark:spark.jars.packages=ru.yandex.clickhouse:clickhouse-jdbc:0.2,org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.2#dataproc:dataproc.monitoring.stackdriver.enable=true
參考資料
properties
其實還有相當多的功用,此篇就著重於額外套件的使用,以後有機會再跟大家分享其他有趣的功能!
官方文件:https://cloud.google.com/sdk/gcloud/reference/dataproc/clusters/create#--properties
properties格式定義 https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties
若有任何問題與指教歡迎與我聯繫,若覺得我的內容不錯麻煩幫我隨便點個廣告,謝謝。