2016年11月29日火曜日

SqoopをJDBでデバッグ

下記の例では、JDBでisOraOopEnabledが何を返すのか確認しようとしています。

​1)
vim /usr/hdp/current/hadoop-client/bin/hadoop.distro

2) 下記のラインを探します:
    exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"

3) このように変更します:
    if [ -n "$HADOOP_JDB" ]; then
      echo "export CLASSPATH=$CLASSPATH"
      echo "${JAVA_HOME}/bin/jdb" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
    else
      exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
    fi


execではなくechoを使っているのはexecではうまくいかなかったからです…

4) 実行します
[sqoop@node4 ~]$ HADOOP_JDB="Y" sqoop import > jdb_sqoop_import.sh

5) "jdb_sqoop_import.sh"を開いて要らないラインを削除します。 ("Warning: /usr/hdp/..." and "Please set $ACCUMLO_HOME .." etc.)
また、最後のラインの最後に、"$@"を追加します。

6) 実行します。

bash ./jdb_sqoop_import.sh --direct --verbose --connect jdbc:oracle:thin:@192.168.8.22:1521/XE --username ambari --password bigdata --query 'SELECT * FROM ambari.hosts WHERE $CONDITIONS' --num-mappers 2 --split-by 'ORA_HASH(ROWID)' --target-dir ambari.hosts

7) JDBが起動するはずですので、"help”などを実行

8) ブレークポイントを isOraOopEnabled に指定して、run

> stop in org.apache.sqoop.manager.oracle.OraOopManagerFactory.isOraOopEnabled
> run


> stop at org.apache.sqoop.manager.oracle.OraOopManagerFactory:101
> run # or cont
> step
> eval OraOopUtilities.getMinNumberOfImportMappersAcceptedByOraOop(sqoopOptions.getConf())


9) isOraOopEnabledで止まるはずです。
その後は、step, next, locals, where, print, evalを駆使します。JDB usage

0 件のコメント:

コメントを投稿