hadoop-在oozie Java操作中传递HBase凭据


0

我需要安排一个ooziejava操作,该操作与安全的hbase交互,因此我需要向Java操作提供hbase凭据。我使用的是一个安全的hortonworks2.2环境,我的 job 流程XML如下

<workflow-app xmlns="uri:oozie:workflow:0.4" name="solr-wf">
    <credentials>
         <credential name="hbase" type="hbase">
         </credential>
      </credentials>

&lt;start to="java-node"/&gt;
&lt;action name="java-node" cred="hbase"&gt;
    &lt;java&gt;  
         &lt;job-tracker&gt;${jobTracker}&lt;/job-tracker&gt;
         &lt;name-node&gt;${nameNode}&lt;/name-node&gt;
         &lt;main-class&gt;com.test.hbase.TestHBaseSecure&lt;/main-class&gt;
        &lt;arg&gt;${arg1}&lt;/arg&gt;
    &lt;/java&gt;
    &lt;ok to="end"/&gt;
    &lt;error to="fail"/&gt;
&lt;/action&gt;
&lt;kill name="fail"&gt;
    &lt;message&gt;Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]&lt;/message&gt;
&lt;/kill&gt;
&lt;end name="end"/&gt;

</workflow-app>

我还修改了oozie属性以包含HbaseCredentials类

oozie.credentials.credentialclasses=hcat=org.apache.oozie.action.hadoop.HCatCredentials,hbase=org.apache.oozie.action.hadoop.HbaseCredentials

但我无法运行的 job,它抛出了一个错误,下面是stacktrace

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
    at org.apache.oozie.action.hadoop.HbaseCredentials.copyHbaseConfToJobConf(HbaseCredentials.java:60)
    at org.apache.oozie.action.hadoop.HbaseCredentials.addtoJobConf(HbaseCredentials.java:49)
    at org.apache.oozie.action.hadoop.JavaActionExecutor.setCredentialTokens(JavaActionExecutor.java:1054)
    at org.apache.oozie.action.hadoop.JavaActionExecutor.submitLauncher(JavaActionExecutor.java:913)
    at org.apache.oozie.action.hadoop.JavaActionExecutor.start(JavaActionExecutor.java:1135)
    at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:228)
    at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:63)
    at org.apache.oozie.command.XCommand.call(XCommand.java:281)
    at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:323)
    at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:252)
    at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:174)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

其他 job运行良好,只有hbase交互的 job失败。我已经在lib目录中包含了所有的hbase jar,我无法找出问题所在。

更新 job 流.xml:

<workflow-app xmlns="uri:oozie:workflow:0.4" name="${appName}">
<credentials>
        <credential name="hbase-cred" type="hbase">
            <property>
                <name>hbase.master.kerberos.principal</name>
                <value>hbase/_HOST@ABC.COM</value>
            </property>

        &lt;property&gt;
            &lt;name&gt;hbase.master.keytab.file&lt;/name&gt;
            &lt;value&gt;/etc/security/keytabs/hbase.service.keytab&lt;/value&gt;
        &lt;/property&gt;

        &lt;property&gt;
            &lt;name&gt;hbase.regionserver.kerberos.principal&lt;/name&gt;
            &lt;value&gt;hbase/_HOST@ABC.COM&lt;/value&gt;
        &lt;/property&gt;

        &lt;property&gt;
            &lt;name&gt;hbase.regionserver.keytab.file&lt;/name&gt;
            &lt;value&gt;/etc/security/keytabs/hbase.service.keytab&lt;/value&gt;
        &lt;/property&gt;

        &lt;property&gt;
            &lt;name&gt;hbase.security.authentication&lt;/name&gt;
            &lt;value&gt;kerberos&lt;/value&gt;
        &lt;/property&gt;

        &lt;property&gt;
            &lt;name&gt;hbase.zookeeper.quorum&lt;/name&gt;
            &lt;value&gt;dev1-dn2,dev1-dn3,dev1-dn1&lt;/value&gt;
        &lt;/property&gt;

        &lt;property&gt;
            &lt;name&gt;zookeeper.znode.parent&lt;/name&gt;
            &lt;value&gt;/hbase-secure&lt;/value&gt;
        &lt;/property&gt;
    &lt;/credential&gt;


&lt;/credentials&gt;
&lt;start to="java-node" /&gt;
&lt;action name="java-node" cred='hbase-cred'&gt;
    &lt;java&gt;
        &lt;job-tracker&gt;${jobTracker}&lt;/job-tracker&gt;
        &lt;name-node&gt;${nameNode}&lt;/name-node&gt;
        &lt;main-class&gt;com.test.hbase.TestHBaseSecure&lt;/main-class&gt;
    &lt;/java&gt;
    &lt;ok to="end" /&gt;
    &lt;error to="fail" /&gt;
&lt;/action&gt;
&lt;kill name="fail"&gt;
    &lt;message&gt;Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]&lt;/message&gt;
&lt;/kill&gt;
&lt;end name="end" /&gt;

</workflow-app>

2 答案


0

该溶液在HDP2.2.8上 test:

    将以下jar复制到/usr/hdp/current/oozie-server/oozie-server/webapps/oozie/WEB-INF/lib:

0

这些“凭证”由Oozie服务管理,而不是由您的 job管理。

所以,如果HortonWorks在包装发行版方面做得不错的话。。。

    hbase common-*-hadoop2.jar将部署在

对于安装在Prod集群上的HDP2.2.4,情况并非如此。啊。那该死的东西在那该死的释放器里坏了。您必须自己管理Kerberos票据,从 HDFSS下载keytab并在实际 join到HBase之前创建TGT。我们去过那里。

看看那篇文章,了解一下如何做到这一点。


我来回答

写文章

提问题

面试题