[HADOOP] oazie Java 액션에서 HBase 자격 증명 전달
HADOOPoazie Java 액션에서 HBase 자격 증명 전달
보안 hbase와 상호 작용하는 oozie Java 작업을 예약해야하므로 hbase 자격 증명을 Java 작업에 제공해야합니다. 보안 hortonworks 2.2 환경을 사용 중이며, 워크 플로 XML은 다음과 같습니다.
<workflow-app xmlns="uri:oozie:workflow:0.4" name="solr-wf">
<credentials>
<credential name="hbase" type="hbase">
</credential>
</credentials>
<start to="java-node"/>
<action name="java-node" cred="hbase">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.test.hbase.TestHBaseSecure</main-class>
<arg>${arg1}</arg>
</java>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
또한 HbaseCredentials 클래스를 포함하도록 oozie 속성을 수정했습니다.
oozie.credentials.credentialclasses=hcat=org.apache.oozie.action.hadoop.HCatCredentials,hbase=org.apache.oozie.action.hadoop.HbaseCredentials
하지만 오류가 발생하는 작업을 실행할 수 없습니다, 아래 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)
다른 작업은 정상적으로 작동하지만 실패한 hbase 상호 작용이있는 작업 일뿐입니다. lib 디렉토리에 hbase jar를 모두 포함 시켰습니다. 문제를 파악할 수 없습니다.
업데이트 된 workflow.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>
<property>
<name>hbase.master.keytab.file</name>
<value>/etc/security/keytabs/hbase.service.keytab</value>
</property>
<property>
<name>hbase.regionserver.kerberos.principal</name>
<value>hbase/_HOST@ABC.COM</value>
</property>
<property>
<name>hbase.regionserver.keytab.file</name>
<value>/etc/security/keytabs/hbase.service.keytab</value>
</property>
<property>
<name>hbase.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>dev1-dn2,dev1-dn3,dev1-dn1</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase-secure</value>
</property>
</credential>
</credentials>
<start to="java-node" />
<action name="java-node" cred='hbase-cred'>
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.test.hbase.TestHBaseSecure</main-class>
</java>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />
</workflow-app>
해결법
-
==============================
1.이 솔루션은 HDP2.2.8에서 테스트되었습니다.
이 솔루션은 HDP2.2.8에서 테스트되었습니다.
-
==============================
2.이러한 "자격 증명"은 귀하의 업무가 아닌 Oozie 서비스에 의해 관리됩니다.
이러한 "자격 증명"은 귀하의 업무가 아닌 Oozie 서비스에 의해 관리됩니다.
그래서, HortonWorks가 그들의 배포판을 포장하기에 알맞은 일을했다면 ...
Prod 클러스터에 설치된 HDP2.2.4의 경우는 아닙니다. 아그. 저 빌어 먹을 릴리스에서 망가졌습니다. HBase에 실제로 연결하기 전에 HDFS에서 keytab
을 다운로드하고 TGT를 생성하여 Kerberos 티켓을 모두 관리해야합니다. 우린 거기에 있었어. 그것이 어떻게 행해질 수 있는지에 대한 통찰력을 얻기 위해 그 포스트를보십시오.
from https://stackoverflow.com/questions/33212535/passing-hbase-credentials-in-oozie-java-action by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 'yarn application -list'는 결과를 보여주지 못한다. (0) | 2019.07.24 |
---|---|
[HADOOP] R : 직렬화 된 개체에서 CSV 만들기 (0) | 2019.07.24 |
[HADOOP] HDFS의 블록 배치 전략 수정 (0) | 2019.07.24 |
[HADOOP] MapReduce는 여러 입력 파일을 어떻게 읽습니까? (0) | 2019.07.24 |
[HADOOP] 성공했을 때 PIG 작업 로그 파일을 유지하는 방법. (0) | 2019.07.24 |