1

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つではない)、同じエラーが発生します。

4

1 に答える 1

2

sqoop-export への引数では、 --input-fields-terminated-by 値は引用符なしである必要があります。これはうまくいきました:

--input-fields-terminated-by \t

于 2012-12-13T18:42:01.470 に答える