oozie呼び出しsqoopインポートhiveテーブルエラー処理
1549 ワード
この問題はまる3日間やった.
娘の悪口を言いたくなった.
ニマoozieがmapreduceを呼び出してsqoopを呼び出してhiveを呼び出すため、関係は複雑です.
だから間違った位置づけをして長い間やっていました.
症状の説明:
oozieでsqoopを呼び出し、mysqlからhiveにデータテーブルを直接インポートするプロセスです.
すべてのプロセスが実行され、データも読み込まれます.
しかし、そのoozieのjobの結果はkilledであることを示している.もちろん、そのactionノードの結果もfailedであることを示します.
問題の位置付け:
最後に問題が見つかりました.sqoopのバグのはずです.
sqoopのorg.apache.sqoop.hive.HiveImportクラスでは、
comを引用しました.cloudera.sqoop.util.ExitSecurityExceptionというクラスです.
そして...JAvaの305行:Throwable cause=ite.getCause();
causeはorgを返す.apache.sqoop.util.ExitSecurityExceptionというクラスです.
したがって、306行ifはfalseを返すと判断し、実際にはtrueを返すべきである.
解決方法:
見つけたJAvaのimport部分は、
元の:com.cloudera.sqoop.util.ExitSecurityException
換言:import org.apache.sqoop.util.ExitSecurityException
できます.
また、この修正後のsqoopのjarパッケージは、workflow実行時に指定したhdfsのlibに入れるべきです.
使用するバージョン:
hadoop:1.0.3
oozie:3.1.3
sqoop:1.4.1
hive:0.8.1
娘の悪口を言いたくなった.
ニマoozieがmapreduceを呼び出してsqoopを呼び出してhiveを呼び出すため、関係は複雑です.
だから間違った位置づけをして長い間やっていました.
症状の説明:
oozieでsqoopを呼び出し、mysqlからhiveにデータテーブルを直接インポートするプロセスです.
すべてのプロセスが実行され、データも読み込まれます.
しかし、そのoozieのjobの結果はkilledであることを示している.もちろん、そのactionノードの結果もfailedであることを示します.
問題の位置付け:
最後に問題が見つかりました.sqoopのバグのはずです.
sqoopのorg.apache.sqoop.hive.HiveImportクラスでは、
comを引用しました.cloudera.sqoop.util.ExitSecurityExceptionというクラスです.
そして...JAvaの305行:Throwable cause=ite.getCause();
causeはorgを返す.apache.sqoop.util.ExitSecurityExceptionというクラスです.
したがって、306行ifはfalseを返すと判断し、実際にはtrueを返すべきである.
305 Throwable cause = ite.getCause();
306 if (cause instanceof ExitSecurityException) {
307 ExitSecurityException ese = (ExitSecurityException) cause;
308 int status = ese.getExitStatus();
309 if (status != 0) {
310 throw new IOException("Hive CliDriver exited with status=" + status);
311 }
312 } else {
313 throw new IOException("Exception thrown in Hive", ite);
314 }
解決方法:
見つけたJAvaのimport部分は、
元の:com.cloudera.sqoop.util.ExitSecurityException
換言:import org.apache.sqoop.util.ExitSecurityException
できます.
また、この修正後のsqoopのjarパッケージは、workflow実行時に指定したhdfsのlibに入れるべきです.
使用するバージョン:
hadoop:1.0.3
oozie:3.1.3
sqoop:1.4.1
hive:0.8.1