通过oozie进行Sqoop工作

时间:2014-06-25 05:24:39

标签: hadoop sqoop oozie hortonworks-data-platform

我创建了一个名为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

如何解决此问题?

2 个答案:

答案 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集群内的计算机上,   或网络上的其他地方。

您可以检查是否可以从其他系统访问该数据库。