【问题标题】:Sqoop Merge failed when selected time stamp as column in incremental update在增量更新中选择时间戳作为列时,Sqoop 合并失败
【发布时间】:2017-01-01 11:45:25
【问题描述】:

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

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

然后做了 sqoop merge ,但它失败了,出现以下错误。我认为早期导入和最新导入的数据集之间存在一些不匹配,但无法理解问题所在。那是因为用 --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: map 13% reduce 0% 24 年 8 月 16 日 22:49:42 信息 mapreduce.Job:任务 ID:尝试_1471947772048_0032_m_000003_2,状态:失败 错误:java.io.IOException:无法连接空键上的值。您是否指定了一个存在的键列? 在 org.apache.sqoop.mapreduce.MergeMapperBase.processRecord(MergeMapperBase.java:79) 在 org.apache.sqoop.mapreduce.MergeTextMapper.map(MergeTextMapper.java:58) 在 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) 在 java.security.AccessController.doPrivileged(本机方法) 在 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)

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

【问题讨论】:

  • department_id 是你的主键吗?
  • 感谢开发者,我发现主键是这里的问题。我已更改为“id”,因为那是 table 的主键。它确实有效。

标签: hadoop sqoop


【解决方案1】:

您的表有 id 主键字段。

在您的命令中使用--merge-key id

根据您的错误日志,

无法在空键上连接值。您是否指定了一个存在的键列?

看来department_id 不是您表中的字段。

【讨论】:

  • 是的,开发者,你是对的,已解决。状态已关闭,谢谢
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2021-02-05
  • 1970-01-01
  • 2018-01-17
相关资源
最近更新 更多