我创建了一个名为TeamMemsImportJob的sqoop作业,它基本上将数据从sql server拉入hive。 我可以通过运行以下命令,通过unix命令行执行sqoop作业:
sqoop job –exec TeamMemsImportJob
如果我使用实际的scoop import命令创建一个oozie作业,它会运行良好。 但是,如果我创建了oozie作业并通过它运行sqoop作业,则会出现以下错误:
oozie job -config TeamMemsImportJob.properties -run
>>> Invoking Sqoop command line now >>>
4273 [main] WARN org.apache.sqoop.tool.SqoopTool – $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
4329 [main] INFO org.apache.sqoop.Sqoop – Running Sqoop version: 1.4.4.2.1.1.0-385
5172 [main] ERROR org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage – Cannot restore job: TeamMemsImportJob
5172 [main] ERROR org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage – (No such job)
5172 [main] ERROR org.apache.sqoop.tool.JobTool – I/O error performing job operation: java.io.IOException: Cannot restore missing job TeamMemsImportJob
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.read(HsqldbJobStorage.java:256)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:198)
看起来好像找不到工作。但是我可以看到下面的工作
[root@sandbox ~]# sqoop job –list
Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
14/06/25 08:12:08 INFO sqoop.Sqoop: Running Sqoop version: 1.4.4.2.1.1.0-385
Available jobs:
TeamMemsImportJob
如何解决此问题?
答案 0 :(得分:1)
创建作业时必须使用--meta-connect
标志来创建自定义Sqoop Metastore数据库,以便Oozie可以访问。
sqoop \
job \
--meta-connect \
"jdbc:hsqldb:file:/on/server/not/hdfs/sqoop-metastore/sqoop-meta.db;shutdown=true" \
--create \
jobName \
-- \
import \
--connect jdbc:oracle:thin:@server:port:sid \
--username username \
--password-file /path/on/hdfs/server.password \
--table TABLE \
--incremental append \
--check-column ID \
--last-value "0" \
--target-dir /path/on/hdfs/TABLE
当您需要执行作业时,您可以通过常规方式从Oozie执行此操作,但请确保包含--meta-connect
以指示作业的存储位置。
答案 1 :(得分:0)
如果我们看到日志,我们就会发现它无法找到存储的作业。
因为您使用的是本机hsql db。
要使Sqoop作业可用于其他系统,您应该配置其他数据库,例如mysql,可以被所有系统访问。
来自文档
运行sqoop-metastore启动共享的HSQLDB数据库实例 当前的机器。客户端可以连接到此Metastore并创建 可以在用户之间共享以执行的作业
磁盘上的Metastore文件的位置由 conf / sqoop-site.xml中的sqoop.metastore.server.location属性。这个 应该指向本地文件系统上的目录。
Metastore可通过TCP / IP获得。该端口由 sqoop.metastore.server.port配置参数,默认为 16000
客户端应通过指定连接到Metastore sqoop.metastore.client.autoconnect.url或--meta-connect with value jdbc:hsqldb:hsql://:/ sqoop。例如, JDBC:HSQLDB:HSQL://metaserver.example.com:16000 / sqoop
此Metastore可以托管在Hadoop集群内的计算机上, 或网络上的其他地方。
您可以检查是否可以从其他系统访问该数据库。