복붙노트

[HADOOP] OOZIE : global job-xml에서 참조 된 파일에 정의 된 속성이 workflow.xml에 표시되지 않습니다.

HADOOP

OOZIE : 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. ==============================

    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가 매개 변수 목록을 구문 분석하여 컴파일 타임에 일부 속성을 정의 할 때 사용할 수 있습니다. 그것은 일어나지 않을 것입니다.

  2. 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