如何使用 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
的根本原因:
- Sqoop jar 在 sharelib 目录中不可用
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
解决了。
class apache.oozie.action.hadoop.SqoopMain 是 mysql-connector-java-*.jar 的一部分。您需要下载它并添加到 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
的根本原因:
- Sqoop jar 在 sharelib 目录中不可用
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
解决了。
class apache.oozie.action.hadoop.SqoopMain 是 mysql-connector-java-*.jar 的一部分。您需要下载它并添加到 Oozie 库。