如何使用 oozie 触发 sqoop 动作

how to trigger sqoop actions using oozie

我正在尝试从 oozie 启动 sqoop 操作,我自己尝试过并在论坛上提问。我不断收到同样的错误。

job.properties:

nameNode=hdfs://FQDN:8020
jobTracker=FQDN:8050
queueName=default
user.name=oozie
oozie.use.system.libpath=true
oozie.action.sharelib.for.sqoop=hive,hcatalog,sqoop
oozie.action.sharelib.for.hive = hive,hcatalog,sqoop
oozie.wf.application.path=${nameNode}/user/${user.name}/scheduledimport
start=2016-04-26T00:00Z
end=2016-12-31T00:00Z
workflowAppUri=${nameNode}/user/${user.name}/scheduledimport

我仅从 oozie 用户启动 oozie 作业。

我的工作流程只是一个简单的列表 table command:Apart 从这里我拥有 oozie-site.xml.

中的所有默认配置

我已经检查 share/lib/lib_timestamp 文件夹存在于 /user/oozie

<workflow-app name="once-a-day" xmlns="uri:oozie:workflow:0.1">
        <start to="sqoopAction"/>
        <action name="sqoopAction">
                <sqoop xmlns="uri:oozie:sqoop-action:0.2">
                        <job-tracker>${jobTracker}</job-tracker>
                        <name-node>${nameNode}</name-node>
                    <command>list-tables --driver com.mysql.jdbc.Driver
 --connect jdbc:mysql://FQDN/erp --username hive --password hive
                    </command>
                </sqoop>
                <ok to="end"/>
                <error to="killJob"/>
        </action>
        <kill name="killJob">
            <message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message>
        </kill>
        <end name="end" />
</workflow-app>

oozie admin -oozie http://FQDN:11000/oozie/ -shareliblist 输出:

[Available ShareLib] 
hive 
mapreduce-streaming
oozie 
sqoop
pig

我也试过在 workflow.xml

中添加内联配置

另外,检查过我的 oozie-site.xml 有

<property>
      <name>oozie.service.WorkflowAppService.system.libpath</name>
      <value>/user/oozie/share/lib</value>
    </property>

这是我的依赖项。

哪个jar文件有org.apache.oozie.action.hadoop.SqoopMain? 但我不断收到此错误:

java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SqoopMain not found

我已确保包含 jar 文件的文件夹具有所需的一组权限和用户访问权限。已尝试更新 share/lib 文件夹。确保该文件夹具有 sqoop 相关的依赖项,但它不起作用。

以下可能是此 ClassNotFoundException 的根本原因:

  1. Sqoop jar 在 sharelib 目录中不可用
  2. oozie.use.system.libpath 未设置为真。

在你的例子中,你已经设置了 oozie.use.system.libpath=true

确保sharelib目录有sqoop依赖。

并且下面的属性应该在oozie-site.xml中设置(如果不使用默认的sharelib路径):

   <property>
    <name>oozie.service.WorkflowAppService.system.libpath</name>
    <value>/user/oozie/share/lib</value>
  </property>

并在提交工作流程时,使用正确的 job.properties。

$ oozie job -oozie http://localhost:11000/oozie -config job.properties -run

我也遇到了类似的问题,不过设置oozie.use.system.libpath=true解决了。

这是Oozie sharelib documentation

class apache.oozie.action.hadoop.SqoopMain 是 mysql-connector-java-*.jar 的一部分。您需要下载它并添加到 Oozie 库。