hue+oozie并發叢集阻塞的調優經曆
問題描述
使用hue+oozie進行資料倉庫開發,部署了大量workflow和并發任務,定時晚上集中時間執行時出現任務卡死狀态,全部是oozie launcher的job任務
方案一 調大叢集資源,開啟資源搶占
一開始以為叢集資源不夠,使用了公平排程原因,多個并發任務導緻資源競争任務卡死,然後修改參數yarn.scheduler.fair.preemption開啟資源搶占,減小ApplicationMaster占用資源數,配置修改如下圖所示
測試結果還是卡死,隻是卡死的任務數變多了,問題還是沒有得到解決,一天過去了,繼續探索
方案二 控制使用者任務并發數
chd配置方法,如下圖所示,進行使用者資源做大任務限制
這裡我設定了六個,然後并發測試,神奇的發現這裡當并發到六個資源以後,一樣卡死了,資源還有一半的空閑,不是資源問題,又郁悶了一天過去了
方案三 控制使用者任務并發數
根據上面的資源配置發現不是資源問題,那就是hue+oozie的問題了,研究oozie的機制才明白問題的真正原因。
使用oozie排程時啟動資料任務前會啟動對應的oozie launcher來監控排程任務 任務多導緻oozie launcher的并發高導緻oozie launcher會啟動多個,占用大量資源 oozie launcher的聲明周期是資料任務開始之前到結束,資源不會釋放 當資源别oozie launcher搶占到不能配置設定給資料任務時oozie會等待有空閑資源來配置設定給資料任務,導緻整個叢集陷入阻塞 oozie launcher單個占用資源較大會使用2個container,2core,4G記憶體(預設)
每個任務都會有一個oozie launcher來守護就像是開路保镖一樣,當真實的任務結束以後oozie launcher才會結束,一開始所有資源占用完是因為全部是oozie launcher任務,然後oozie launcher任務都在等待自己的“主人”運作通過,沒想到來的任務太多,所有的資源都被oozie launcher占用完了,都在等在自己的“主人”通過,所有的路都被一群眼瞎的保安堵死了,這些保安也不知道,就出現一直等待的狀态,後來控制資源使用隻限制六個app,當這個六個app都被oozie launcher占用時,就出現了一樣的效果。
解決方案
給oozie launcher開辟單獨的資源池,并且限制oozie并發的數量,讓他們和的“主人”不走同一個通道,就不會出現路被同時堵死的情況,控制并發防止資源被占用完。
配置方式如下:
1.建立新的資源池,這裡我們限制這個資源池最多跑四個job,防止太多的oozie launcher占用計算資源
2.在hue的任務中配置使用這個資源池
oozie.launcher.mapred.job.queue.name root.oozie
然後執行workflow就會發現oozie launcher在root.oozie隊列中了,不會與資料任務搶占資源。
在cdh中單獨配置了oozie的mr
oozie.launcher.mapreduce.map.memory.mb 512
oozie.launcher.yarn.app.mapreduce.am.resource.mb 512
然後改了yarn叢集的最小容器記憶體
也可以直接配置在每個workflow節點裡