1. 程式人生 > >Flink使用(三)——記一次Flink Session任務反覆重啟

Flink使用(三)——記一次Flink Session任務反覆重啟

前言

  環境: JDK 1.8+Flink 1.6+Hadoop 2.7.3

  文中若有表述不正確,歡迎大夥留言指出,謝謝!

1、現象

  使用yarn-session在yarn上啟動flink叢集並提交任務後,在Flink Web UI 上發現任務的state個數每十分鐘左右會從0到10左右後又重複從0開始,但輸出的結果沒有問題。

2、分析過程

  2.1 檢查checkpoint過程(不是最終原因)

  最開始以為是checkpoint的狀態(RockDB方式)未設定好,檢查配置未發現問題。使用yarn logs命令查詢任務日誌,發現沒有沒有Error,詳細分析日誌發現:

1 INFO:yarn.YarnApplicationMasterRunner:RECEIVER SIGNAL 15: SIGTERM. Shutting down as requested

   作業系統為什麼會發送請求kill掉容器了?從日誌中沒有找到有用資訊,在網上查詢前輩們的使用經驗[1],發現當任務邏輯中有keyBy(key),其key變化時會導致視窗狀態無法清理導致實體記憶體溢位容器被kill,但是我們的checkpoint的狀態個數到10左右就又重新從0開始,而且每個state的大小隻有幾KB,所以可以排除是因為實體記憶體溢位導致的。

  2.2 虛擬記憶體溢位(不是最終原因)

  既然從任務日誌本身沒有發現問題,容器又被kill掉,所以打算從容器的日誌出發去分析原因。分析容器本身的日誌,就要去檢視yarn的對應日誌,通過任務日誌中獲取的容器資訊找到叢集對應的節點然後再分析對應時間短的容器日誌,發現虛擬記憶體超過了申請,如下:

  虛擬記憶體一般是申請記憶體的2.1倍(Hadoop中預設),博主為每個容器申請的記憶體為1G,所以對應的虛擬記憶體是2.1G,遇到這種情況最好的解決辦法是擴大申請的資源比如2G,擴大資源後發現問題還是存在。為什麼會用到這麼多虛擬記憶體了?組裡的前輩提示可能是JDK 1.8記憶體模型的原因,但是申請1G之前是可以測試的,而且我測試僅使用yarn-session在yarn上申請Flink叢集,但不提交任務,問題還是存在,所以沒有沿著這個方向去分析(後續還是得擴充套件學習的)。 

  在yarn的任務頁面檢視任務的狀態時發現其有多個Attempt ID,其對應web UI和埠都是變化的,具體如下圖:

    AM為什麼會重啟這麼多次了?AM的重啟的最大次數是由yarn.resourcemanager.am.max-attempts確定,而叢集中該引數為2。說明該引數未生效。

  2.3 繼續容器日誌分析

  繼續分析容器日誌發現如下:

   容器10min會timeout被幹掉,該值是由yarn上yarn.resourcemanager.container.liveness-monitor.interval-ms=600000ms(yarn-default.xml)確定的[2],到此,10min state重啟的原因找到了,但是為什麼AM重啟的次數未被限制住了?在日誌中找到資訊如下:

   從日誌中發現,任務重啟次數是統計在10秒鐘中任務重啟的次數,超過10重啟的次數就不會被統計,該值在Flink中是由akka.ask.timeout=10s決定的[3]。到此,AM多次重啟的原因也找到了。但是,是什麼原因導致的AM失敗還是沒有找到,後臺找到ERROR如下:

    該資訊僅顯示NodeManager的心跳資訊未上報成功,但原因未知。

3、嘗試輸出yarn對應類的Debug資訊

  設定是在瀏覽器中yarn的ResourceManager active 節點的8088埠後加上logLevel,如:127.0.0.1:8088/logLevel,在頁面上指定類名和日誌級別,然後在對應節點的ResourceManager日誌中就可以找到對應的debug日誌。本問題中設定類名為org.apache.hadoop.yarn.server.resourcemanager.mnode,結果沒有找到有用資訊。

4、解決辦法

  在排除問題過程中發現同叢集上Spark任務AM的attempt ID已經重啟到1600+了,所以到此判斷是Yarn的問題導致,但是什麼問題還是沒有找到。

  解決辦法:重啟yarn叢集即可。

後記:

  哎,真是一頓操作猛如虎啊,到頭啥原因還是沒有定位出來。不過在這個過程中涉及的思考過程和涉及的引數還是值得記錄下來的,所以有了這篇部落格,對不住了各位看官,願勿惱! 

Ref:

[1]https://blog.csdn.net/TripleDangClark/article/details/89146895

[2]http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

[3]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/jobmanager_high_availability.