2014年2月12日 星期三

hadoop 問題排除-start/stop不運作

在try&error建置時~
可能在那邊上上下下~

然後常常就會發現~ 怎麼startAll, stopAll都沒用了!!

這時候當然是先看log...
三成是網路問題~
(網路不通...發生在網管很嚴的~ 同一網段也鎖來鎖去Orz)

兩成是有人豬頭用了不同user跑hadoop指令
為了debug, sudo/su一般user切來切去~ 結果就發生慘事了Orz..
因權限不同~寫出的檔案無法被access就會GG

兩成是Java程序問題
(之前的程序活著沒死, 新的起不來, 或是port被咬了)

一成是pid問題~
會到這邊通常是因為其他問題生出來的孩子Orz...

還有一成~
我也不知道XD...

hadoop在run時~ 會啟用java的程序(datanode, tasktracker之類的)
要看程序是否活著
ps aux | grep datanode
ps aux | grep tasktracker

理論上當你stop後~ 這些程序就grep不到了~
不過因為hadoop在stop時~ 它會去找pid檔, pid檔裡面會寫它所屬的pid
 datanode一個pid檔, tasktracker一個, 好像master還有多secondary..bala忘了XD...


總之~hadoop在stop時~ 會依這些實體檔內寫的pid值去kill process
但是~ 這些實體檔的pid值並不一定真的等於現在存在的process...
hadoop在run時, 用ps aux去抓~ 看pid與實體檔的pid~ 應該就會很清楚的發現...

若有hadoop 指令kill失敗時~ 它還是會叫新的起來跑...順便更新pid實體檔...
就會發生...新的跑不起來(因為舊的沒死~咬住port/服務)
然後pid實體檔是寫新的pid...
之後再怎麼stop..都是stop不了的!!
(解法當然就是~~ps aux..然後kill -9...XD)

在叢集上又更囉嗦了點, startAll, stopAll也會對slave下指令...
但可能失敗是在slave..但是master並不知道~ 接著漸漸的你就會感覺很奇怪XD...
所以全部重起, 最好要乖乖的去每一台上check...

權限問題應該比較好理解~ 基本上就是萬一用了root或更大權限的user, 開檔寫檔後...
(hadoop很多暫存或是資料都是寫檔....)
之後權限小的user就寫不進去了~ 或無法讀取--> GG...
這個算手殘~ 不過後續要解其實有點痛苦~
因為暫存檔位置太多>_<~還不知道生去那裡了~ change owner後好像也不太正常(因為hadoop有些檔又卡access權限)
當時解法~ 就只好很害怕的砍檔~ 然後重新format...(還好他只是slave...)


最慘的大概是就玩到完全不知道花生什麼事了~ 解法就是一_一...ps aux把全部有hadoop的java 程序全找出來~, 全部全砍了...slave好像就兩個還三個, master會比較多~
然後照標準SOP一步一步重來, 再看看log吧|||Orz...
這招應該是有用的~ 玩過後有正常log, 正常運作~ 目前沒發現後遺症...
(至少不是重裝啦~ )

有想過reboot...但是還有其他服務在跑..reboot風險太高阿阿阿Orz..
很多機器是平常沒事~ 一關機就GG的~ 囧rz...

沒有留言: