Sqoop を使用して MySQL から一部のデータをエクスポートし、Apache Pig を介して処理を行ってから、そのデータを HDFS から MySQL データベースにエクスポートしようとしています。ただし、データをエクスポートするときに、次の問題が発生します。
java.io.IOException: Can't export data, please check task tracker logs
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.NumberFormatException: For input string: ".proseries.com"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.valueOf(Integer.java:554)
at mdm_urls.__loadFromFields(mdm_urls.java:419)
HDFS データは次のようになります (タブ区切り):
id:int url:text tld:text port:int
どういうわけか、いくつかの行の列tld
にフィールドがインポートされています。~2 億 5000 万行のうち、これは 10 未満の場合にのみ当てはまります。私の最初の仮定は、url フィールドにはタブが必要であるというものでした。ただし、Pig スクリプトではすべてのタブを削除しました。port
REGISTER target/mystuff.jar;
legacy_urls = LOAD 'url' USING PigStorage(',') AS (id, sha1, url_text);
legacy_urls_norm = FOREACH legacy_urls GENERATE id AS id, sha1 AS sha1, REPLACE(REPLACE(url_text, '\n', ''), '\t', '') AS url_text;
urls = FOREACH legacy_urls_norm GENERATE id, url_text, mystuff.RootDomain(url_text), mystuff.Protocol(url_text), mystuff.Host(url_text), mystuff.Path(url_text), mystuff.EffectiveTld(url_text), mystuff.Port(url_text), sha1;
STORE urls INTO 'mdm_urls';
これが私のsqoop exportコマンドです:
sqoop export --connect jdbc:mysql://hostnmae/db_name --input-fields-terminated-by "\t" --table test --export-dir my_urls
これをデバッグするのに苦労しています。これは、sqoop エラーがどの行で作業していたかを示していないためです (タブ文字がまだ存在するかどうかなどを確認できます)。私の最初の質問は、どうすればこの問題のトラブルシューティングを改善できるでしょうか? 2 つ目の質問は、PIG を使用して不正な入力データをどのように回避しているのかということです。