Archives of Support Questions (Read Only)

This is an archived board for historical reference. Information and links may no longer be available or relevant
Announcements
This board is archived and read-only for historical reference. To ask a new question, please post a new topic on the appropriate active board.

Oozie Java Action - Hbase : Error

avatar

I'm running a test hbase java program via oozie java action. The following error is encountered :

Error, 
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
	at org.apache.oozie.action.hadoop.HbaseCredentials.copyHbaseConfToJobConf(HbaseCredentials.java:67)
	at org.apache.oozie.action.hadoop.HbaseCredentials.addtoJobConf(HbaseCredentials.java:55)
	at org.apache.oozie.action.hadoop.JavaActionExecutor.setCredentialTokens(JavaActionExecutor.java:1287)
	at org.apache.oozie.action.hadoop.JavaActionExecutor.submitLauncher(JavaActionExecutor.java:1124)
	at org.apache.oozie.action.hadoop.JavaActionExecutor.start(JavaActionExecutor.java:1373)
	at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:232)
	at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:63)
	at org.apache.oozie.command.XCommand.call(XCommand.java:287)
	at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:331)
	at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:260)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:178)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)




	at java.lang.Thread.run(Thread.java:745)

The program runs correctly from command line :

java -cp `hbase classpath` personal_project.HBaseConnector

Is there a way I can pass output of 'hbase classpath' to the oozie java action. I have copied below hbase jars to workflow's lib directory as well.

  • hbase-common-$HBASE_VERSION.jar
  • hbase-client-$HBASE_VERSION.jar
  • hbase-server-$HBASE_VERSION.jar
  • hbase-protocol-$HBASE_VERSION.jar
  • hbase-hadoop2-compat-$HBASE_VERSION.jar
  • htrace-core-*.jar
  • hive-hbase-handler-$HBASE_VERSION.jar

Following is the java action from workflow.xml :

<workflow-app xmlns="uri:oozie:workflow:0.5" name="hbase_connect">
	<global>
		<job-tracker>${job_tracker}</job-tracker>
		<name-node>${name_node}</name-node>
	</global>
	<credentials>
		<credential name="hbase-cred" type="hbase">
			<property>
				<name>hadoop.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.master.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.regionserver.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.zookeeper.quorum</name>
				<value>${zookeeper_quorum}</value>
			</property>
			<property>
				<name>hadoop.rpc.protection</name>
				<value>authentication</value>
			</property>
			<property>
				<name>hbase.rpc.protection</name>
				<value>authentication</value>
			</property>
		</credential>
	</credentials>
	
	<start to="hbase_connect_java" />
	<action name="hbase_connect_java" cred="hbase-cred">
		<java>
                        <job-xml>${runconfig_dir}/hbase-site.xml</job-xml>
			<main-class>personal_project.HBaseConnector</main-class>
			<java-opts>-Dsun.security.krb5.debug=true</java-opts>
			<arg>${name_node}</arg>
			<arg>${kerberos_principal}</arg>
			<arg>${kerberos_keytab_file}</arg>
			<arg>a:xxx,b:yyy,c:zzz,d:yyy</arg>
			<arg>2016-02-22-123456</arg>
			<file>${path_hdfs_common}/lib/hbase_connect.jar#hbase_connect.jar</file>
			<file>${runconfig_dir}/jaas.conf#jaas.conf</file>
			<file>${runconfig_dir}/krb5.conf#krb5.conf</file>
                        <file>${runconfig_dir}/hbase-site.xml#hbase-site.xml</file>
		</java>
		<ok to="end"/>
		<error to="fail"/>
	</action>
	<kill name="fail">
		<message>${wf:name()}  workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
	</kill>
	<end name="end"/>
</workflow-app>
1 ACCEPTED SOLUTION

avatar

Adding the below Credential properties fixed my issue.

<credentials>
		<credential name="hbase-cred" type="hbase">
			<property>
				<name>hadoop.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.master.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.regionserver.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.zookeeper.quorum</name>
				<value>${zookeeper_quorum}</value>
			</property>
			<property>
				<name>hadoop.rpc.protection</name>
				<value>authentication</value>
			</property>
			<property>
				<name>hbase.rpc.protection</name>
				<value>authentication</value>
			</property>
			<property>
				<name>hbase.master.keytab.file</name>
				<value>/etc/hadoop/hbase.keytab</value>
			</property>
			<property>
				<name>hbase.regionserver.keytab.file</name>
				<value>/etc/hadoop/hbase.keytab</value>
			</property>
		</credential>
	</credentials>

View solution in original post

3 REPLIES 3

avatar
Expert Contributor

@Padmanabhan Vijendran Check if ozzie shared lib is configured properly and has right hbase dependencies. If not properly configured you can recreate shared lib using below commands:

/usr/hdp/current/oozie/bin/oozie-setup.sh sharelib create -locallib /usr/hdp/<version>/oozie/oozie-sharelib.tar.gz -fs hdfs://<namenode-host>:8020
oozie admin -oozie http://<oozie-host>:11000/oozie -sharelibupdate

avatar

@Ajay I am not an admin to do this. I believe sharelib is properly set. Hive Actions are running fine.

avatar

Adding the below Credential properties fixed my issue.

<credentials>
		<credential name="hbase-cred" type="hbase">
			<property>
				<name>hadoop.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.security.authentication</name>
				<value>kerberos</value>
			</property>
			<property>
				<name>hbase.master.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.regionserver.kerberos.principal</name>
				<value>hbase/_HOST@XX.XX.COM</value>
			</property>
			<property>
				<name>hbase.zookeeper.quorum</name>
				<value>${zookeeper_quorum}</value>
			</property>
			<property>
				<name>hadoop.rpc.protection</name>
				<value>authentication</value>
			</property>
			<property>
				<name>hbase.rpc.protection</name>
				<value>authentication</value>
			</property>
			<property>
				<name>hbase.master.keytab.file</name>
				<value>/etc/hadoop/hbase.keytab</value>
			</property>
			<property>
				<name>hbase.regionserver.keytab.file</name>
				<value>/etc/hadoop/hbase.keytab</value>
			</property>
		</credential>
	</credentials>