問題描述:一個項目組的同事反應(yīng)他們的集群hive突然出現(xiàn)了問題,走mr就報錯
問題解決:首先問了下他們最近做了些什么操作,說是最近在lib下復(fù)制了一些jar包,后來就出現(xiàn)這個問題,把復(fù)制過來的jar包刪除了也沒用,發(fā)了些日志也只是hive報出來的表面現(xiàn)象,所以還是遠(yuǎn)程協(xié)助進(jìn)行解決,打開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)
...
大概意思是在創(chuàng)建container的時候沒有權(quán)限,token過期了,最重要的一點(diǎn)是
current time is 1468393291214 found 1468392500369這說明時間同步可能有問題
讓他們查了一下時間同步是否開啟或者是否設(shè)置,最后查出來是因為ntp服務(wù)啟了,但是可能中間有段時間有問題,服務(wù)器之間時間差異太大,同步時間后,再運(yùn)行就不報這個錯了
查看資料知道nodemanager有個NMLivelinessMonitor服務(wù)
該服務(wù)周期性遍歷所有NodeManager,如果一個NodeManager在一定時間(可通過參數(shù)yarn.nm.liveness-monitor.expiry-interval-ms配置,默認(rèn)為10min)內(nèi)未匯報心跳信息,則認(rèn)為它死掉了,它上面所有正在運(yùn)行的Container將被置為運(yùn)行失?。≧M不會重新執(zhí)行這些Container,它只會通過心跳機(jī)制告訴對應(yīng)的AM,由AM決定是否重新執(zhí)行,如果需要,則AM重新向RM申請資源)。
結(jié)合遇到的這個現(xiàn)象可以得出節(jié)點(diǎn)時間不同步導(dǎo)致時間相差太大,讓nodemanager認(rèn)為在超過10min沒有匯報心跳
所以遇到問題不要只看表面現(xiàn)象,要根據(jù)日志進(jìn)行分析解決