Spark因為kinit跑在mesos上遇到的雷

今天遇到了在Mesos cluster A上跑的Spark Job,移植到Mesos cluster B上面的時候突然無法生成executor

開啟DEBUG模式出現了以下訊息

...
18/02/22 04:25:04 DEBUG MesosCoarseGrainedSchedulerBackend: Declining offer: 221f008d-6173-485e-aa0e-a810ea44c45c-O418 with attributes: Map(rack -> value: "dummy1"
, az -> value: "A"
) mem: 127702.0 cpu: 32.0 port: List((31000,32000))  (reason: Offer was declined due to unmet task launch constraints.)

嗯?明明資源都夠,也沒有設定constraints卻出現了unmet訊息?
啟動指令如下,只要了一個2G的executor

bin/pyspark --conf spark.executor.cores=1 --conf spark.cores.max=1

後來查詢Mesos的管理介面,我明明是用root身份去跑的spark,出現的身份卻是hadoopuser
訊息如下

Name:PySparkShellWeb 
UI:http://xxxxxx:4040
User:hadoopuser
Roles:*
Principal:
Registered:
....

翻遍了spark conf都沒有hadoopuser相關設定

後來發現我在執行spark前有用kinit去初始化hadoopuser的keytab

我在Mesos cluster A有hadoopuser,在Mesos cluster B上則沒有

原本我以為我用kinit只會影響我存取hadoop的資源

沒想到卻也改了我在Mesos上的啟動user

後來用kdestroy把kinit快取拿掉,啟動user變回root就解決了這問題

而即便我不使用kinit,改用spark參數依然有同樣的問題

bin/pyspark --conf spark.executor.cores=1 --conf spark.cores.max=1 --keytab=/etc/hadoopuser.keytab  --principal=hadoopuser

目前最直接的解決方法就是在Mesos cluster B上把hadoopuser加上去,這樣就能正確要到資源了

comments powered by Disqus