1. 程式人生 > >hadoop job執行出錯 org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodErro

hadoop job執行出錯 org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodErro

job 在執行的時候在reduce的時候出現了3次 FAILED 狀態,然後在其他幾點上重試能正常跑完。
錯誤內容如下:
2014-12-04 15:38:38,564 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: org.apache.commons.collections.CollectionUtils.isEmpty(Ljava/util/Collection;)Z


發現裡面呼叫了  CollectionUtils 類的isEmpty()方法,但是這個方法是3.2以後版本新增的方法,如果想到應該是jar衝突造成,而且只在一臺幾點上出現了問題
找到hadoop 目錄下的lib包,發現確實有兩個 commons-collections-*jar  一個3.1的一個3.2.1的。


所以把3.1的刪除,重啟叢集,把job提交在跑一次發現問題解決。

後來把發現所有的datanode上都有兩個版本的jar包,但是為什麼其他節點上沒有問題呢?

個人推測應該是不同機器載入jar的方式不同造成的吧。