1

スタンドアロンモードでhadoopを実行している場合、Eclipseのリモートデバッグに問題はありません。ただし、疑似分散モードでHadoopを実行している場合は機能しません。疑似分散モードでhadoopを使用してEclipseリモートデバッグを試みる方法は次のとおりです。

次のように、Hadoopスクリプトに行を追加します。

#added this line to enable remote debugging
HADOOP_OPTS="$HADOOP_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000"

# run it
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"

次に、次のようなリモートデバッグ構成を作成します。

リモートデバッグ構成の作成

コマンドラインからジョブを実行すると、次のように表示されます。

Listening for transport dt_socket at address: 5000

次に、eclipseに戻り、デバッグ構成を実行します。それは私のmain()関数にステップインします:

ここに画像の説明を入力してください

ただし、マッパーまたはレデューサーで設定したブレークポイントにはヒットしません。

ここでの問題は何ですか?スタンドアロンモードでhadoopを使用したが、疑似分散モードでは機能しなかったのはなぜですか?疑似分散モードでhadoopを使用してリモートデバッグを実行することは可能ですか?そうでない場合、Eclipseでmapreduceコードをデバッグするための「正しい」方法は何ですか?

4

2 に答える 2

2

上記のローランドのコメントを参照してください。リモート デバッグは、スタンドアロン モードでのみ機能します。

于 2012-09-05T05:12:25.947 に答える
2

以下を指定できます。

<property>
  <name>mapred.map.child.java.opts</name>
  <value>-Xdebug -Xrunjdwp:transport=dt_socket,address=5001,server=y,suspend=y</value>
</property>

これにより、map-task がデバッグ モードで起動されます。Eclipse を使用した複数の Hadoop JVM のデバッグも参照してください。

于 2013-07-18T08:35:47.917 に答える