關於Hadoop報Child Error錯誤的解決經驗

   錯誤的主要特徵代碼是這樣的:java

    java.lang.Throwable: Child Error at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271) Caused by: java.io.IOException: Task process exit with nonzero status of 1.

   注意返回的exitcode是1,網上還有返回其餘的,好比-1,好比255等等,這裏不涉及。apache

   第一次出現這個錯誤是在用pig執行其語句的時候(咱們知道pig的語句都是由框架自動生成了mapreduce程序來實現的)。另一次是使用sqoop向hive中導入數據時(也是基於mapreduce實現的)。當時就這個錯誤代碼「1」查了不少資料。國內的國外的,大部分都說是tasktracker的日誌文件夾太多,達到Linux操做的系統的ext3磁盤類型的上限了。可是不管我怎麼按照其建議清空磁盤,都沒有用,錯誤依舊。框架

   通過了查看出錯的源碼和文檔。後來終於發現,我這裏的這個錯誤的緣由,實際上是個很小很蠢的錯誤。原來是由於,咱們的Hadoop執行mapreduce時,實際上調用了jdk的命令。可是其比較特別的是,他調用的不是JAVA_HOME/bin中的命令。而是JAVA_HOME/jre/bin中的命令。ide

   去到目標文件夾下一看,果真,不出所料。這些命令所有沒有執行權限。分分鐘chmod 744 ./* 。。oop

   再使用那些基於mapreduce的組件和框架,完美運行。日誌

   總結:看日誌要學會深刻的看,只看Hadoop:50030頁面的簡單錯誤描述是比較坑爹的。另外就是看日誌要搞清楚哪些是重點,有些廢話,不少不一樣的錯誤都會出現相同的那麼一句。若是拿到網上去查,就繞彎路了。code

相關文章
相關標籤/搜索