0

sqoopを使用してパーティション化されたハイブテーブルからmysqlにエクスポートしようとしています。

最初はやってみました

$sqoop export --connect jdbc:mysql://<server addr>/<db name> --username <user name> -P --table source_edge_daily --export-dir /path/to/table/<table name> --input-fields-terminated-by '\t' --verbose

コマンドがエラーになり、

Open failed for file /path/to/table/<table name>/<partition name>, attempt to open a directory

パーティションディレクトリをポイントすると

$sqoop export --connect jdbc:mysql://<server addr>/<db name> --username <user name> -P --table source_edge_daily --export-dir /path/to/table/<table name>/<partition name> --input-fields-terminated-by '\t' --verbose 

コマンドは失敗します

at com.cloudera.sqoop.mapreduce.CombineShimRecordReader.getCurrentKey(CombineShimRecordReader.java:100)
at com.cloudera.sqoop.mapreduce.CombineShimRecordReader.getCurrentKey(CombineShimRecordReader.java:43)
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.getCurrentKey(CombineFileRecordReader.java:75)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getCurrentKey(MapTask.java:452)
at org.apache.hadoop.mapreduce.MapContext.getCurrentKey(MapContext.java:57)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at com.cloudera.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:189)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:668)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:334)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
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:1109)
at org.apache.hadoop.mapred.Child.main(Child.java:264)

また、パーティションキーなしでmysqlテーブルを再作成し、パーティション化されたmysqlテーブルを作成しようとしましたが、すべてが同じエラーメッセージで失敗します

4

1 に答える 1

4

Sqoopは現在、パーティションテーブルの読み込みをサポートしておらず、現在も作業中です。したがって、これが解決されるまで、最初のソリューションは機能しません。

パーティションディレクトリを直接指定する場合の問題は、パーティションに関する情報が失われることです。そのため、パーティション列を含まない一時的なMySQLテーブルを作成する必要があります。そうすれば、このテーブルにデータを簡単にロードできます。そして最後に、この一時テーブルから実際のテーブルに挿入する必要があります。

于 2013-01-21T18:50:02.137 に答える