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を返すべきである.

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