[HADOOP] OOZIE : global job-xml에서 참조 된 파일에 정의 된 속성이 workflow.xml에 표시되지 않습니다.
HADOOPOOZIE : global job-xml에서 참조 된 파일에 정의 된 속성이 workflow.xml에 표시되지 않습니다.
나는 hadoop을 처음 사용하기 때문에 이제는 단일 작업만으로 간단한 작업 흐름을 테스트하고있다. 전역 속성이 아닌 일반 값을 사용하면 작동합니다.
그러나 내 목표는 전역 섹션의 job-xml 태그에서 참조되는 파일에서 일부 전역 속성을 정의하는 것이 었습니다.
오랜 싸움과 많은 기사를 읽은 후에 나는 아직도 그것을 작동하게 만들 수 없습니다. 나는이 기능이 잘 작동한다고 제안하는 기사를 발견 한 이래로 몇 가지 간단한 일이 잘못되었다고 생각합니다.
바라기를, 너는 나에게 힌트를 줄 수있다.
간단히 말해서 :
세부 사항은 다음과 같습니다.
단일 노드에 설치된 Cloudera 5.7.1 배포판을 사용하고 있습니다.
environment.xml 파일이 / user / dm / conf 폴더에 hdfs로 업로드되었습니다. 내용은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>dbserver</name>
<value>someserver</value>
</property>
<property>
<name>dbuser</name>
<value>someuser</value>
</property>
<property>
<name>dbpassword</name>
<value>somepassword</value>
</property>
</configuration>
workflow.xml 파일이 / user / dm / jobs / sqoop-test-job에 업로드되었습니다. 내용은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.4" name="sqoop-test">
<global>
<job-xml>/user/dm/conf/env.xml</job-xml>
</global>
<start to="get-data"/>
<action name="get-data">
<sqoop xmlns="uri:oozie:sqoop-action:0.3">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${outputRootPath}"/>
</prepare>
<arg>import</arg>
<arg>--connect</arg>
<arg>jdbc:sqlserver://${dbserver};user=${dbuser};password=${dbpassword}</arg>
<arg>--query</arg>
<arg>select col1 from table where $CONDITIONS</arg>
<arg>--split-by</arg>
<arg>main_id</arg>
<arg>--target-dir</arg>
<arg>${outputRootPath}/table</arg>
<arg>-m</arg>
<arg>1</arg>
</sqoop>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Sqoop-test failed, error message[${wf:errorMessage()}]</message>
</kill>
<end name='end'/>
</workflow-app>
이제 명령 줄에서 oozie 워크 플로를 실행합니다.
sudo -u dm oozie job --oozie http://host:11000/oozie -config job-config.xml -run
내 job-config.xml은 다음과 같습니다 :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configuration>
<property>
<name>nameNode</name>
<value>namenode:8020</value>
</property>
<property>
<name>jobTracker</name>
<value>jobtracker:8021</value>
</property>
<property>
<name>oozie.wf.application.path</name>
<value>/user/dm/jobs/sqoop-test-job/workflow.xml</value>
</property>
<property>
<name>outputRootPath</name>
<value>/user/dm/data/sqoop-test</value>
</property>
</configuration>
해결법
-
==============================
1.OK, 두 가지 큰 실수를 저지르고 있습니다.
OK, 두 가지 큰 실수를 저지르고 있습니다.
1. Oozie 문서 (V4.2)의 일부분에 대한 간단한 주석으로 시작해 보겠습니다.
워크 플로 기능 사양
Sqoop 액션 익스텐션
다른 말로하면, Sqoop 액션은 Oozie 서버에 관한 한 플러그인입니다. Workflow 스키마 V0.4에서 소개 된
을 포함하여 "최신"기능을 100 % 지원하지 않습니다. 2. 당신은 속성과 매개 변수 사이의 구별을 이해하지 못합니다 - 그리고 나는 당신을 비난하지 않습니다. Oozie 문서는 혼란스럽고 혼란 스럽습니다.
매개 변수는 Oozie에서 속성, 명령 등에서 텍스트 대체를 실행하는 데 사용됩니다. -config 인수를 사용하여 제출 시간에 리터럴로 값을 정의하거나 워크 플로 수준의
요소에 값을 정의합니다. 그리고 "리터럴"은 다른 매개 변수의 매개 변수를 참조 할 수 없다는 의미입니다. 값은 변경 불가능한 텍스트이며 그대로 사용됩니다. 속성은 Oozie가 시작하는 작업에 전달되는 Java 속성입니다. -config 인수를 사용하여 제출 시간에 설정할 수 있습니다. 예, 엉망입니다. Oozie 파서는 어느 매개 변수가 잘 알려진 속성 이름을 갖고 어떤 매개 변수가 단지 매개 변수인지를 분류해야합니다. 또는
워크 플로우 요소 -하지만 어려운 방법을 발견했거나, Action 요소 또는 요소로 정의 된 XML 파일 내부에서 모든 "확장"에 전파되지는 않습니다. 전역 워크 플로우 레벨 또는 로컬 조치 레벨. 주목할 두 가지 사항 :
너에게 어떤 의미가 있니? 스크립트는 Oozie에게
을 통해 런타임에 Sqoop 작업을 실행하는 JVM에 "숨겨진"속성을 전달하도록합니다. 그러나 Oozie가 매개 변수 목록을 구문 분석하여 컴파일 타임에 일부 속성을 정의 할 때 사용할 수 있습니다. 그것은 일어나지 않을 것입니다.
from https://stackoverflow.com/questions/38337362/oozie-properties-defined-in-file-referenced-in-global-job-xml-not-visible-in-wo by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hive cluster 대 vs order by vs 정렬 기준 (0) | 2019.05.30 |
---|---|
[HADOOP] HBase와 Hadoop / HDFS의 차이점 (0) | 2019.05.30 |
[HADOOP] Sqoop - 데이터 분할 (0) | 2019.05.30 |
[HADOOP] 내 BroadcastHashJoin이 Spark의 ShuffledHashJoin보다 느린 이유 (0) | 2019.05.30 |
[HADOOP] Apache Spark에서 정확한 중간 값을 어떻게 계산합니까? (0) | 2019.05.30 |