0

hive-jdbc-0.7.1-cdh3u5.jar を使用しています。EMR でメモリを大量に消費するクエリを実行していて、失敗することがあります。ジョブ トラッカーを見ると、クエリが強制終了されていることがわかり、次のエラーが表示されます。

java.io.IOException: ゼロ以外のステータス 137 でタスク プロセスが終了しました

ただし、Hive JDBC ドライバーの execute() 呼び出しはこれを検出せず、ハングしたままになります。例外はキャッチされません。何か案は?ありがとう:

    ST stQuery = MY_QUERY;
    試す {
        ステートメント stmt = conn.createStatement();
        stmt.execute(stQuery.render()); // ジョブが強制終了されたことを知らずにここでハングします。例外は発生しません。
    }
    キャッチ(SQLException sqle){
        sqle.printStackTrace();
        log.error("クエリの実行に失敗しました");
        戻る;
    }

4

1 に答える 1

1

おそらく、応答が得られない場合、Hadoopが10分(600秒)後にタスクを強制終了するという事実が原因であり、パラメーターmapred.task.timeout=0を設定することで、10分を超えて実行されているタスクの強制終了を回避できます。

また、これらの場合、定期的に(10分ごとよりも頻繁に)進行状況を報告するような方法でマッパー/リデューサーを作成できます。これは、いくつかの方法で実現できます。

  • Reporterを呼び出しsetStatus()て、タスクの進行状況を人間が読める形式で説明します。
  • Reporterを呼び出しincrCounter()て、ユーザーカウンターをインクリメントします
  • Reporterを呼び出しprogress()て、タスクがまだそこにある(そして進行している)ことをHadoopに伝えます
于 2012-12-21T10:05:09.393 に答える