【问题标题】:sqoop export mysql partitionsqoop 导出mysql分区
【发布时间】:2013-01-22 02:50:02
【问题描述】:

我正在尝试使用 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 表,一切都失败并显示相同的错误消息

【问题讨论】:

  • sqoop export --connect jdbc:mysql:/// --username -P --table source_edge_daily --export-dir /path/to /table// --input-fields-terminated-by '\t' --verbose.您是否按原样运行此命令?

标签: mysql hadoop hive sqoop


【解决方案1】:

Sqoop 目前不支持加载分区表,仍然是work in progress。因此,在解决此问题之前,您的第一个解决方案将不起作用。

直接指定分区目录的问题是你会丢失分区的信息,所以你需要创建一个不包含分区列的临时 MySQL 表,然后你可以轻松地将数据加载到这个表中.最后,您只需要从这个临时表中插入到您的真实表中。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2017-07-12
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多