Spark on k8s: 配置和使用ConfigMap

什么是 ConfigMap

顧名思義,用來存配置的Map星瘾,可以存單個配置或者配置文件组力,在 POD 中我們可以通過環(huán)境變量來訪問單個配置和配置文件瘟斜,后者一般會被 mount 到 Pod 的一個 Volume 上县貌,這樣我們在跑 Spark on k8s 的時候术陶,可以將一些配置放在 ConfigMap 中,和容器鏡像解耦煤痕。

Spark 支持哪些 ConfigMap

如果使用 Spark 社區(qū)默認(rèn)的 spark-submit 的提交方式梧宫,在 Spark 3.0 之后(當(dāng)然目前還沒有release),支持以下類型的 ConfigMap摆碉。

配置 默認(rèn)值 說明
spark.kubernetes.hadoop.configMapName <none> 相當(dāng)于本地配置HADOOP_CONF_DIR
spark.kubernetes.kerberos.krb5.configMapName <none> 用于指定krb5.conf文件

這些是用戶可以配置的塘匣,在 Spark on k8s 的內(nèi)部運行實現(xiàn)上,也用了一些 ConfigMap 特性帶來的便利巷帝,可以通過 describe 命令查看下 Driver Pod 的描述忌卤,

Volumes:
  hadoop-properties:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      hz10-hadoop-dir
    Optional:  false
  krb5-file:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      hehe-2c6c6c6cdbf66f13-krb5-file
    Optional:  false
  kerberos-keytab:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  hehe-2c6c6c6cdbf66f13-kerberos-keytab
    Optional:    false
  spark-local-dir-1:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  spark-conf-volume:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      hehe-2c6c6c6cdbf66f13-driver-conf-map
    Optional:  false
  default-token-nxhgg:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-nxhgg
    Optional:    false

比如 spark-conf-volume 這個,就存放了客戶端匯總的所有 spark 相關(guān)的配置楞泼,默認(rèn)被 mount 到 /opt/spark/conf/spark.properties 這個位置驰徊,然后在 Driver Pod 啟動時,通過 --properties-file 參數(shù)指定现拒,也可以通過 describe 命令,我們也可以查看這個 map 的內(nèi)容

 Kent@KentsMacBookPro  ~  kubectl describe cm hehe-2c6c6c6cdbf66f13-driver-conf-map  -nns1
Name:         hehe-2c6c6c6cdbf66f13-driver-conf-map
Namespace:    ns1
Labels:       <none>
Annotations:  <none>

Data
====
spark.properties:
----
#Java properties built from Kubernetes config map with name: hehe-2c6c6c6cdbf66f13-driver-conf-map
#Thu Aug 29 14:00:59 CST 2019
spark.driver.host=hehe-2c6c6c6cdbf66f13-driver-svc.ns1.svc
spark.driver.blockManager.port=7079
spark.kubernetes.executor.podNamePrefix=hehe-2c6c6c6cdbf66f13
spark.kubernetes.container.image=harbor-inner.sparkonk8s.netease.com/tenant1-project1/spark\:v3-SPARK-28896
spark.jars=hdfs\://hz-cluster10/user/kyuubi/udf/spark-upload-6bd024d4-a59a-4628-b923-b7a8bc5139f8/hadoop-lzo-0.4.20-SNAPSHOT.jar
spark.kubernetes.submitInDriver=true
spark.kerberos.principal=kyuubi/dev@HADOOP.HZ.NETEASE.COM
spark.submit.deployMode=cluster
spark.kubernetes.memoryOverheadFactor=0.1
spark.kubernetes.resource.type=java
spark.kubernetes.hadoop.configMapName=hz10-hadoop-dir
spark.kubernetes.kerberos.krb5.path=/etc/krb5.conf
spark.master=k8s\://https\://10.120.238.100\:7443
spark.executor.instanses=5
spark.submit.pyFiles=
spark.kubernetes.container.image.pullSecrets=mysecret
spark.kubernetes.driver.pod.name=hehe-2c6c6c6cdbf66f13-driver
spark.kubernetes.namespace=ns1
spark.kerberos.keytab=/mnt/secrets/kerberos-keytab/kyuubi.keytab
spark.app.id=spark-b2c4c18da0fa4e43b8dfd554893f2950
spark.app.name=hehe
spark.driver.extraJavaOptions=-agentlib\:jdwp\=transport\=dt_socket,server\=y,suspend\=y,address\=50014
spark.kubernetes.file.upload.path=hdfs\://hz-cluster10/user/kyuubi/udf
spark.driver.port=7078

Events:  <none>

如何使用 ConfigMap

創(chuàng)建

使用 ConfigMap 之前必須先創(chuàng)建望侈,我們可以通過kubectl create configmap --help 了解這個命令的用法印蔬。
ConfigMap 和命名空間是綁定的,創(chuàng)建在對應(yīng)的命名空間內(nèi)脱衙,后面跑 spark 的時候才能使用侥猬。
我們以 spark.kubernetes.hadoop.configMapName 來舉例,我們用來創(chuàng)建ConfigMap 來存儲 HADOOP_CONF_DIR 下的文件捐韩。

 # Create a new configmap named my-config based on folder bar
  kubectl create configmap my-config --from-file=path/to/bar

  # Create a new configmap named my-config with specified keys instead of file basenames on disk
  kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt

可以通過上面兩種方式退唠,直接使用路徑 或者 一個文件一個文件來指定

kubectl create configmap hz10-hadoop-dir -nns1 --from-file=./etc/hadoop
kubectl create configmap hz10-hadoop --from-file=./etc/hadoop/core-site.xml --from-file=./etc/hadoop/hdfs-site.xml --from-file=./etc/hadoop/yarn-site.xml -nns1

通過 describe 命令可以查看該 ConfigMap 信息。

ConfigMap 的 數(shù)據(jù)部分荤胁,key值對應(yīng)的是文件的名字瞧预,Value對應(yīng)的是該文件的實際內(nèi)容。

使用

創(chuàng)建完成后仅政,我們就可以通過將它的名稱垢油,如hz10-hadoop-dir,直接設(shè)置給spark.kubernetes.hadoop.configMapName 就可以使用啦

bin/spark-submit \
    --conf spark.kubernetes.namespace=ns1 \
    --conf spark.kubernetes.container.image.pullSecrets=mysecret \
    --conf spark.kubernetes.hadoop.configMapName=hz10-hadoop-dir \
    --conf spark.master=k8s://https://10.120.238.100:7443 \
    --conf spark.kubernetes.container.image=harbor-inner.sparkonk8s.netease.com/tenant1-project1/spark:v3-SPARK-28896
    --conf spark.kerberos.keytab=/Users/Kent/Downloads/kyuubi.keytab \
    --conf spark.kerberos.principal=kyuubi/dev@HADOOP.HZ.NETEASE.COM \
    --conf spark.kubernetes.kerberos.krb5.path=/etc/krb5.conf  \
    --name hehe \
    --deploy-mode cluster \
    --class org.apache.spark.examples.HdfsTest \
    local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0-SNAPSHOT.jar \
    hdfs://hz-cluster10/user/kyuubi/hive_db/kyuubi.db/hive_tbl

總結(jié)

  1. 目前Spark 2.3/2.4 不支持這個功能圆丹,需要等3.0 release
  2. 3.0貌似也也只暴露了這兩個 ConfigMap 給用戶側(cè)使用
  3. cluster 模式提交如果帶一些需要上傳的jar包滩愁,貌似有個bug,先提個PR再說 https://github.com/apache/spark/pull/25609
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辫封,一起剝皮案震驚了整個濱河市硝枉,隨后出現(xiàn)的幾起案子廉丽,更是在濱河造成了極大的恐慌,老刑警劉巖妻味,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件正压,死亡現(xiàn)場離奇詭異,居然都是意外死亡弧可,警方通過查閱死者的電腦和手機蔑匣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棕诵,“玉大人裁良,你說我怎么就攤上這事⌒L祝” “怎么了价脾?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笛匙。 經(jīng)常有香客問我侨把,道長,這世上最難降的妖魔是什么妹孙? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任秋柄,我火速辦了婚禮,結(jié)果婚禮上蠢正,老公的妹妹穿的比我還像新娘骇笔。我一直安慰自己,他們只是感情好嚣崭,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布笨触。 她就那樣靜靜地躺著,像睡著了一般雹舀。 火紅的嫁衣襯著肌膚如雪芦劣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天说榆,我揣著相機與錄音虚吟,去河邊找鬼。 笑死签财,一個胖子當(dāng)著我的面吹牛稍味,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荠卷,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼模庐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了油宜?” 一聲冷哼從身側(cè)響起掂碱,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怜姿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疼燥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沧卢,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年醉者,在試婚紗的時候發(fā)現(xiàn)自己被綠了但狭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡撬即,死狀恐怖立磁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剥槐,我是刑警寧澤唱歧,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站粒竖,受9級特大地震影響颅崩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蕊苗,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一沿后、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朽砰,春花似錦尖滚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饱搏。三九已至非剃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間推沸,已是汗流浹背备绽。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鬓催,地道東北人肺素。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像宇驾,于是被迫代替她去往敵國和親倍靡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容