如何使用oozie触发sqoop操作

时间:2016-05-03 06:21:07

标签: hdfs oozie hortonworks-data-platform

我正在尝试从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工作。

我的worflow只是一个简单的列表命令:除此之外,我在oozie-site.xml中拥有所有默认配置。

我已检查并共享/ 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相关的依赖关系,但它无法正常工作。

2 个答案:

答案 0 :(得分:1)

以下可能是此ClassNotFoundException

的根本原因
  1. 在sharelib目录中没有Sqoop jar可用
  2. oozie.use.system.libpath未设为true。
  3. 在您的情况下,您已经设置了 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

答案 1 :(得分:1)

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