Hiveで生成されたテーブルがあります(Amazon Elastic MapReduce JobFlow上)。データがにあることがわかりますhdfs:///mnt/hive_081/warehouse/[table name]
。
Sqoopを(何も変更せずに)jarにラップし、テストのためにマスターノードにアップロードしました。
私は自分のsqoopjarをそのように実行します:
/usr/lib/jvm/java-6-sun/bin/java -cp /home/hadoop/conf:/usr/lib/jvm/java-6-sun/lib/tools.jar:/home/hadoop:/home/hadoop/hadoop-tools-1.0.3.jar:/home/hadoop/hadoop-tools.jar:/home/hadoop/hadoop-core-1.0.3.jar:/home/hadoop/hadoop-core.jar:/home/hadoop/lib/*:/home/hadoop/lib/jetty-ext/* -Xmx1000m -Dhadoop.log.dir=/mnt/var/log/hadoop/steps/6 -Dhadoop.log.file=syslog -Dhadoop.home.dir=/home/hadoop -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,DRFA -Djava.io.tmpdir=/mnt/var/lib/hadoop/steps/6/tmp -Djava.library.path=/home/hadoop/native/Linux-i386-32 org.apache.hadoop.util.RunJar /home/hadoop/fsa/anet-dw-sqoop-0.0.1-SNAPSHOT.jar $ARGS
ここで、$ ARGSは(機密のmysqlフラグは省略されています):
--export-dir hdfs:///mnt/hive_081/warehouse/[table name] --input-null-non-string '\\\N' --direct --input-null-string '\\\N' --username root --input-fields-terminated-by '\0x009' --driver com.mysql.jdbc.Driver --table [table name]
私はこれをモックアップした10行のデータでテストしています。null値はありません。各行は、すべての列で同じ番号を繰り返すという点で一意です。コマンドを実行すると、多くの情報が得られます
java.lang.NumberFormatException: For input string: "231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 231 -25 231 -25 -25 231 231 -25"
毎回、同じ4行(10行のうち)に対してこのメッセージが表示されます(負の値は無視してください。これらは、数値に適合しなかったTINYINTの列です)。
行の最初の2つの値の間のスペースがはるかに少ないことがわかります。これは私の問題ですか?これは何が原因でしょうか?参考までに、データファイルをHDFSからローカルFSにコピーしてポイントすると、このメッセージは表示されませんが、データは宛先に到達しませんでした:/。とにかく、私はマルチステッププロセスを自動化しようとしているので、何もコピーせずにHDFSデータを直接操作できるようにしたいと思います。
どんなアドバイスも大歓迎です!
更新:これは、区切り文字としてコンマを使用した場合にも発生します。同じ4行で観察されます。Hiveテーブルを1行のみに制限すると(以前のテストのエラー行の1つではない)、同じエラーが発生します。