在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