在Oozie的workflow上面调用jar包,可以有两种方式,
一种是使用shell来调用:
<action name="user_action_info_q_node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobtracker_address}</job-tracker>
<name-node>${namenode_address}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${mapred_job_queue_name}</value>
</property>
</configuration>
<exec>hadoop</exec>
<argument>jar</argument>
<argument>${mongo_sync_jar_name}</argument>
<argument>com.hive.syncJob.HiveMongoSync</argument>
<argument>-mongo-ip</argument>
<argument>${mongo_ip}</argument>
<argument>-mongo-port</argument>
<argument>${mongo_port}</argument>
</shell>
<ok to="info_mongo_shell_node"/>
<error to="fail"/>
</action>
一种是使用Java来调用
<action name="test1">
<java>
<job-tracker>${jobtracker_address}</job-tracker>
<name-node>${namenode_address}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${mapred_job_queue_name}</value>
</property>
</configuration>
<main-class>test.java.main.HiveJDBCTEST</main-class>
<capture-output/>
</java>
<ok to="end"/>
<error to="fail"/>
</action>
如果依赖外部包, 需要在项目文件下创建一个lib包,和项目文件一起put到HDFS上面去。
否则会出现ClassNotFoundException。
Oozie有个配置文件,会将job中的所有java文件引导到一个libpath下面:
##oozie config
#use system library
oozie.use.system.libpath=true
#use custom library
oozie.libpath=${namenode_address}/user/hadoop/share/lib/hive