【发布时间】: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 的主键。它确实有效。