2013-01-21 66 views
0

我想使用sqoop從分區配置表導出到mysql。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表,一切失敗,出現相同的錯誤消息

+0

sqoop出口--connect JDBC:MySQL的:// / --username -P --table source_edge_daily --export-DIR /路徑/到/表/

/<分區名稱> --input場 - 終止 - '\ t' - 動詞。你是否按原樣運行這個命令? – shazin

回答

4

Sqoop目前不支持裝載分區表,仍然是work in progress。所以你的第一個解決方案在解決之前不會起作用。

直接指定分區目錄的問題是,您將失去有關分區的信息,因此您需要創建一個不包含分區列的臨時MySQL表,然後才能將數據加載到此表中容易。最後你只需要從這個臨時表中插入到真正的表中。