Support Questions

Find answers, ask questions, and share your expertise

what is xmlns in oozie workflows?

avatar
Expert Contributor
What exactly is xmls attribute in oozie workflows? 

I am trying to run a sqoop command but I keep getting

ava.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SqoopMain not found

Now, I have tried everything suggested. Set the permissions right. Have /share/lib in /user/oozie.

Running oozie jobs from oozie user only.

Just wondering if xmlns could be the problem? I am using ambari.

This is what I get when I check my versions:

sqoop version
Warning: /usr/hdp/2.4.0.0-169/hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /usr/hdp/2.4.0.0-169/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
16/05/04 12:54:07 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.4.0.0-169
Sqoop 1.4.6.2.4.0.0-169
git commit id c327581e17e308322d77a2ae245d0287c0e488d4
Compiled by jenkins on Wed Feb 10 08:35:28 UTC 2016
[oozie@warehouse root]$ oozie version
Oozie client build version: 4.2.0.2.4.0.0-169

My workflow has;

<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 --connect jdbc:mysql://FQDN/erp --username hive --password hive
                    </command>
                   <archive>/lib/mysql-connector-java-5.1.38-bin.jarz#mysql-connector-java-5.1.38-bin.jar</archive>
                </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>

job.props:

nameNode=hdfs://FQDN:8020
jobTracker=FQDN:8050
queueName=default
oozie.libpath=/user/oozie/share/lib/, /user/oozie/share/lib/lib_20160427195409
oozie.use.system.libpath=true
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
1 ACCEPTED SOLUTION

avatar
Master Guru

xmlns stands for XML Name Space, you can find general introduction here. In Oozie workflows there are 2 xmlns specified, the one on top:

<workflow-appname="once-a-day"xmlns="uri:oozie:workflow:0.1">

defines XML tags for Oozie workflow files in general. The other one:

<sqoop xmlns="uri:oozie:sqoop-action:0.2">

defines XML tags specific to Sqoop action, you can find its definition here. In your case xmlns is not a problem. If it were Oozie would reject your workflow xml file as incorrect, for example, because of using non-existent tags, or existent ones in a wrong way.

View solution in original post

1 REPLY 1

avatar
Master Guru

xmlns stands for XML Name Space, you can find general introduction here. In Oozie workflows there are 2 xmlns specified, the one on top:

<workflow-appname="once-a-day"xmlns="uri:oozie:workflow:0.1">

defines XML tags for Oozie workflow files in general. The other one:

<sqoop xmlns="uri:oozie:sqoop-action:0.2">

defines XML tags specific to Sqoop action, you can find its definition here. In your case xmlns is not a problem. If it were Oozie would reject your workflow xml file as incorrect, for example, because of using non-existent tags, or existent ones in a wrong way.