問題描述:一個項目組的同事反應他們的集群hive突然出現了問題,走mr就報錯
問題解決:首先問了下他們最近做了些什么操作,說是最近在lib下復制了一些jar包,后來就出現這個問題,把復制過來的jar包刪除了也沒用,發了些日志也只是hive報出來的表面現象,所以還是遠程協助進行解決,打開resource manager查看到出錯的日志如下
Application application_1464140393518_0021 failed 2 times due to Error launching appattempt_1464140393518_0021_000002. Got exception: org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container.
This token is expired. current time is 1468393291214 found 1468392500369
at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
...
大概意思是在創建container的時候沒有權限,token過期了,最重要的一點是
current time is 1468393291214 found 1468392500369這說明時間同步可能有問題
讓他們查了一下時間同步是否開啟或者是否設置,最后查出來是因為ntp服務啟了,但是可能中間有段時間有問題,服務器之間時間差異太大,同步時間后,再運行就不報這個錯了
查看資料知道nodemanager有個NMLivelinessMonitor服務
該服務周期性遍歷所有NodeManager,如果一個NodeManager在一定時間(可通過參數yarn.nm.liveness-monitor.expiry-interval-ms配置,默認為10min)內未匯報心跳信息,則認為它死掉了,它上面所有正在運行的Container將被置為運行失敗(RM不會重新執行這些Container,它只會通過心跳機制告訴對應的AM,由AM決定是否重新執行,如果需要,則AM重新向RM申請資源)。
結合遇到的這個現象可以得出節點時間不同步導致時間相差太大,讓nodemanager認為在超過10min沒有匯報心跳
所以遇到問題不要只看表面現象,要根據日志進行分析解決