选中时间戳作为增量更新中的列时,Sqoop合并失败

时间:2016-08-25 06:54:40

标签: hadoop sqoop

我想练习sqoop merge命令。 我所做的是我从MySQL DB导入数据到HDFS,然后用1更新和1插入更新源表,我的表有id作为主键,time作为TIMESTAMP。

接下来,我再次使用--incremental=lastmodified --check-column="time"选项进行导入。

然后sqoop合并了,但失败了以下错误。我认为早期导入和最新导入的数据集之间存在一些不匹配,但无法理解错误。那是因为导入--check-column=time吗?如果我使用--where子句进行更新,则可以使用。

我用过: -

--Initial load
sqoop import \
  --connect "jdbc:mysql://quickstart.cloudera:3306/testdb" \
  --username=root \
  --password=cloudera \
  --table Customers \
  --as-textfile \
  --target-dir=/user/cloudera/sqoop_import/sqoop_merge/Customers

sqoop import \
  --connect "jdbc:mysql://quickstart.cloudera:3306/testdb" \
  --username=root \
  --password=cloudera \
  --table Customers \
  --as-textfile \
  --target-dir=/user/cloudera/sqoop_import/sqoop_merge/Customers_delta \
  --incremental lastmodified \
  --check-column "time" \
  --last-value '2016-08-24 22:04:56.0'

sqoop merge --merge-key department_id \
  --new-data /user/cloudera/sqoop_import/sqoop_merge/Customers_delta \
  --onto /user/cloudera/sqoop_import/sqoop_merge/Customers \
  --target-dir /user/cloudera/sqoop_import/sqoop_merge/Customers_merge \
  --class-name Customers \
  --jar-file /tmp/sqoop-cloudera/compile/d73387fb05f4fcb0d38725806fe52b30/Customers.jar

错误是: -

  

16/08/24 22:49:41 INFO mapreduce.Job:地图13%减少0%       16/08/24 22:49:42 INFO mapreduce.Job:任务ID:attempt_1471947772048_0032_m_000003_2,状态:未通过       错误:java.io.IOException:无法在null键上连接值。您是否指定了存在的键列?           at org.apache.sqoop.mapreduce.MergeMapperBase.processRecord(MergeMapperBase.java:79)           at org.apache.sqoop.mapreduce.MergeTextMapper.map(MergeTextMapper.java:58)           at org.apache.sqoop.mapreduce.MergeTextMapper.map(MergeTextMapper.java:34)           在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)           在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)           在org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)           在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:167)           at java.security.AccessController.doPrivileged(Native Method)           在javax.security.auth.Subject.doAs(Subject.java:415)           在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554)           在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

找出原因的任何线索都会非常有帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您的表具有$(document).ready(function () { if (localStorage.getItem('click') == true) { window.setTimeout(function() { $('body').scrollTop($("#dealProductAnchor").offset().top); }); localStorage.removeItem('click'); } }); 主键字段。

在命令中使用id

根据您的错误日志,

  

无法在null键上加入值。您是否指定了存在的键列?

似乎--merge-key id不是您表格中的字段。