<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.8.5">
</HEAD>
<BODY>
Hi Lu, folks,<BR>
<BR>
I've been investigating how to run Java actions in Sahara EDP that depend on <BR>
HBase libraries (see snippet from the original question by Lu below).<BR>
<BR>
In a nutshell, we need to use Oozie sharelibs for this. I am working on a spec now, thinking <BR>
about the best way to support this in Sahara, but here is a semi-manual intermediate solution<BR>
that will work if you would like to run such a job from Sahara.<BR>
<BR>
1) Create your own Oozie sharelib that contains the HBase jars.<BR>
<BR>
This ultimately is just an HDFS dir holding the jars.  On any node in your cluster with <BR>
HBase installed, run the attached script or something like it (I like Python better than bash :) )<BR>
It simply separates the classpath and uploads all the jars to the specified HDFS dir.<BR>
<BR>
$ parsePath.py /user/myhbaselib<BR>
<BR>
2) Run your Java action from EDP, but use the oozie.libpath configuration value when you<BR>
launch the job.  For example, on the job configure tab set oozie.libpath like this:<BR>
<BR>
Name                    Value<BR>
<BR>
oozie.libpath        hdfs://namenode:8020/user/myhbaselib<BR>
<BR>
(note, support for this was added in <A HREF="https://review.openstack.org/#/c/154214/">https://review.openstack.org/#/c/154214/</A>)<BR>
<BR>
That's it! In general, you can add any jars that you want to a sharelib and then set the<BR>
oozie.libpath for the job to access them.<BR>
<BR>
Here is a good blog entry about sharelibs and extra jars in Oozie jobs:<BR>
<BR>
<A HREF="http://blog.cloudera.com/blog/2014/05/how-to-use-the-sharelib-in-apache-oozie-cdh-5/">http://blog.cloudera.com/blog/2014/05/how-to-use-the-sharelib-in-apache-oozie-cdh-5/</A><BR>
<BR>
Best,<BR>
<BR>
Trevor<BR>
<BR>
--- original question<BR>
(1)     EDP job in Java action<BR>
<BR>
   The background is that we want write integration test case for newly added services like HBase, zookeeper just like the way the edp-examples does( sample code under sahara/etc/edp-examples/). So I thought I can wrote an example via edp job by Java action to test HBase Service, then I wrote the HBaseTest.java and packaged as a jar file, and run this jar manually with the command "java -cp `hbase classpath` HBaseTest.jar HBaseTest", it works well in the vm(provisioned by sahara with cdh plugin). <BR>
“/usr/lib/jvm/java-7-oracle-cloudera/bin/java -cp "HBaseTest.jar:`hbase classpath`" HBaseTest”<BR>
So I want run this job via horizon in sahara job execution page, but found no place to pass the `hbase classpath` parameter.(I have tried java_opt and configuration and args, all failed). When I pass the “-cp `hbase classpath`” to java_opts in horizon job execution page. Oozie raise this error as below<BR>
<BR>
<BR>
</BODY>
</HTML>