【问题标题】:Sqoop job through oozie通过 oozie 进行 Sqoop 工作
【发布时间】:2014-08-15 13:12:05
【问题描述】:

我创建了一个名为 TeamMemsImportJob 的 sqoop 作业,它基本上将数据从 sql server 拉入 hive。 我可以通过 unix 命令行运行以下命令来执行 sqoop 作业:

sqoop job –exec TeamMemsImportJob

如果我使用实际的 scoop 导入命令创建一个 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

我该如何解决这个问题?

【问题讨论】:

  • 嗨@Colman,这个问题解决了吗?

标签: hadoop sqoop oozie hortonworks-data-platform


【解决方案1】:

如果我们看到日志,我们可以看到它找不到存储的作业。

由于您使用的是本机 hsql db。

要使 Sqoop 作业在其他系统中可用,您应该配置其他数据库,例如所有系统都可以访问的 mysql。

来自文档

运行 sqoop-metastore 会启动一个共享的 HSQLDB 数据库实例 当前机器。客户端可以连接到这个元存储并创建 可以在用户之间共享执行的作业

元存储文件在磁盘上的位置由 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/sqoop.

此元存储可能托管在 Hadoop 集群内的机器上, 或网络上的其他地方。

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

【讨论】:

    【解决方案2】:

    您必须在创建作业时使用 --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 以指示作业的存储位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多