1

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 を使用して不正な入力データをどのように回避しているのかということです。

4

0 に答える 0