Cloudera Hadoopの WordCount の例をデバッグしようとしていますが、できません。マッパーとリデューサー クラスをログに記録しましたが、コンソールにログが表示されません。
画像を添付します。最初の画像では、Java ログ。
2 番目のイメージでは、結果がログに記録されます。最初のものは表示されません:( http://i56.tinypic.com/2eztkli.png
知ってる人いますか??どうもありがとう!!
Cloudera Hadoopの WordCount の例をデバッグしようとしていますが、できません。マッパーとリデューサー クラスをログに記録しましたが、コンソールにログが表示されません。
画像を添付します。最初の画像では、Java ログ。
2 番目のイメージでは、結果がログに記録されます。最初のものは表示されません:( http://i56.tinypic.com/2eztkli.png
知ってる人いますか??どうもありがとう!!
「hadoop jar ...」を実行しているため、実際の Hadoop クラスター (おそらく単一ノード) を使用してジョブを開始しています。
これは、すべてのロギングがコンソールではなくクラスターによって行われることを意味します。コンソールに表示されるのは、基本的には進行状況インジケーターのみです。
ジョブは、1 つ以上の map タスクと 1 つ以上の reduce タスクに分割されます。これらのタスクはそれぞれ個別の Java プロセスであり、個別のログ (複数のファイルで構成される) があります。
これらのログファイルは $HADOOP_LOG_DIR/userlogs にあります。
多くのことが並行して行われるため、これらのログファイルが「1 つの」巨大なログファイルになることは望ましくありません。それは無駄な混乱になるでしょう。
Hadoop アプリケーションの学習と開発には、より簡単な方法があります。通常の Java アプリとして起動するだけで、アプリケーションをローカル モードで実行するだけです: java -jar ...
ああ、それは簡単な修正です。System.out.println() を使用してから、jobtracker の HTML インターフェイスを調べます。Map または Reduce を実行したタスク (println を含む) に移動し、そのタスクのログ レポートに進むと、出力がそこに出力されていることがわかります。
コンソールに情報を表示したい場合は、System.out.println("blah"); を実行します。Java ジョブでは、特に引数を渡したり (たとえば、引数が間違っている場合の使用法)、jar で複数の単一のジョブを実行したりする場合などにうまく機能します。Hadoop ログをふるいにかけるのは退屈で、本当の仕事をしている。