下記の例では、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 件のコメント:
コメントを投稿