我的环境为 CDH 6.2 sqoop1.4.7 出现这个错误
。我这里不考虑没有创建JOB的情况
。因为,我已经创建几次job。同时我执行运行job时,有时可以运行,有时不可以运行。
20/04/27 10:22:41 ERROR metastore.GenericJobStorage: Cannot restore job: acc_account_ply_base_job
20/04/27 10:22:41 ERROR metastore.GenericJobStorage: (No such job)
20/04/27 10:22:41 ERROR tool.JobTool: I/O error performing job operation: java.io.IOException: Cannot restore missing job acc_account_ply_base_job
at org.apache.sqoop.metastore.GenericJobStorage.read(GenericJobStorage.java:272)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:205)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:303)
at org.apache.sqoop.Sqoop.run(Sqoop.java:146)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:182)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:233)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:242)
at org.apache.sqoop.Sqoop.main(Sqoop.java:251)
1、原因定位
CDH中查看日志时发现,启动的服务器不一样,导致有些服务器没有job 有些有job 。庆幸的是我是开发环境,集群只有几台。通过下图可以判断是每台服务器的sqoop job库不一致导致的。(由于其他原因不便贴出脚本) 多次运行 sqoop job --list 更加验证了我的观点。切记在CDH中运行
2、解决
定位出问题解决:
1、设置统一的:meta-connect 在CDH sqoop配置中设置高级代码块。
sqoop-conf/sqoop-site.xml 的 Sqoop 1 Client 客户端高级配置代码段(安全阀)
<property>
<name>sqoop.metastore.server.location</name>
<value>/usr/local/sqoop/tmp/sqoop-metastore/shared.db</value>
</property>
<property>
<name>sqoop.metastore.server.port</name>
<value>16000</value></property>
<property>
<name>sqoop.metastore.client.autoconnect.url</name>
<value>jdbc:hsqldb:hsql://bigdata04:16000/sqoop</value>
</property>
2、启动 metastore
到我们的服务器上运行metastore 。注意:是我们配置metastore.client.autoconnect.url 的这台服务器。
$SQOOP_HOME/bin/sqoop metastore &
3、创建job
需要指定 --meta-connect
查看job list时候也需要指定。--meta-connect jdbc:hsqldb:hsql://bigdata04:16000/sqoop \
/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/bin/sqoop job --create acc_account_ply_base_job \
--meta-connect jdbc:hsqldb:hsql://bigdata04:16000/sqoop \ #重点
-- import \
--connect jdbc:oracle:thin:@192.168.25.1:1521:test \
--username acc \
--password-file /user/admin/sqoop/pwd/UAT/acc.pwd \
--target-dir /qhbdb/acc/accocunt_ply_base \
--table ACC.ACCOUNT_PLY_BASE \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--null-string '\\N' \
--null-non-string '\\N' \
--incremental append \
--check-column UPDATE_TIME \
--merge-key PK_ID\
--last-value "2006/01/01 00:00:00" \
--hive-drop-import-delims \
-m 1
4、网关设置
sqoop 的gatway CDH中每一台服务器都需要添加网关实例。
5、运行
当我们使用HUE 定时调用shell 执行sqoop脚本。就可以正常运行。