通过oozie的sqoop作业

jobtbby3  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(440)

我创建了一个名为teammemsimportjob的sqoop作业,它基本上将数据从sqlserver拉入配置单元。通过运行以下命令,我可以通过unix命令行执行sqoop作业:

sqoop job –exec TeamMemsImportJob

如果我创建了一个oozie作业,其中包含实际的scoop import命令,那么它可以正常运行。但是,如果创建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

如何解决此问题?

nnsrf1az

nnsrf1az1#

你必须使用 --meta-connect 在创建作业时标记以创建自定义sqoop元存储数据库,以便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 指示作业存储的位置。

ep6jt1vc

ep6jt1vc2#

如果我们看到日志,我们可以看到它找不到存储的作业。
因为您使用的是本机hsql db。
要使sqoop作业在其他系统中可用,您应该配置其他数据库,例如mysql,它可以被所有系统访问。
来自文档
运行sqoop metastore将在当前计算机上启动一个共享的hsqldb数据库示例。客户端可以连接到此元存储并创建可以在用户之间共享以执行的作业
metastore文件在磁盘上的位置由conf/sqoop-site.xml中的sqoop.metastore.server.location属性控制。这应该指向本地文件系统上的一个目录。
元存储可通过tcp/ip访问。端口由sqoop.metastore.server.port配置参数控制,默认为16000。
客户端应该通过指定sqoop.metastore.client.autoconnect.url或--meta connect来连接到元存储jdbc:hsqldb:hsql://:/sqoop。例如,jdbc:hsqldb:hsql://metaserver.example.com:16000/平方英尺。
此元存储可能托管在hadoop集群内的计算机上,或者网络上的其他位置。
你能检查一下这个数据库是否可以从其他系统访问吗。

相关问题