我想练习sqoop合并命令。我所做的是从mysql数据库导入数据到hdfs,然后用1个update和1个insert更新源表,我的表 id
作为主键和 time
作为时间戳。
接下来我再次用 --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:Map13%reduce 0%16/08/24 22:49:42 info mapreduce.job:任务id:尝试\u 1471947772048 \u 0032 \u m \u000003 \u 2,状态:失败错误:java.io.ioexception:无法连接null键上的值。是否指定了存在的键列?在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)位于javax.security.auth.subject.doas(subject)的java.security.accesscontroller.doprivileged(本机方法)。java:415)在org.apache.hadoop.security.usergroupinformation.doas(用户组信息。java:1554)在org.apache.hadoop.mapred.yarnchild.main(yarnchild。java:162)
任何找出原因的线索都会很有帮助。谢谢。
1条答案
按热度按时间k97glaaz1#
你的table有
id
主键字段。使用
--merge-key id
听你指挥。根据你的错误记录,
无法联接null键上的值。是否指定了存在的键列?
看来
department_id
不是表中的字段。