복붙노트

[HADOOP] oozie Sqoop 작업이 하이브로 데이터를 가져 오지 못함

HADOOP

oozie Sqoop 작업이 하이브로 데이터를 가져 오지 못함

oozie sqoop 동작을 실행하는 동안 문제가 발생했습니다. 로그에서 sqoop이 임시 디렉토리로 데이터를 가져올 수 있고 sqoop이 데이터를 가져 오기 위해 하이브 스크립트를 만듭니다.

하이브로 임시 데이터를 가져 오는 동안 실패합니다.

로그에서 예외가 발생하지 않습니다.

아래는 내가 사용하는 sqoop 작업입니다.

<workflow-app name="testSqoopLoadWorkflow" xmlns="uri:oozie:workflow:0.4">
<credentials>
    <credential name='hive_credentials' type='hcat'>
        <property>
            <name>hcat.metastore.uri</name>
            <value>${HIVE_THRIFT_URL}</value>
        </property>
        <property>
            <name>hcat.metastore.principal</name>
            <value>${KERBEROS_PRINCIPAL}</value>
        </property>
    </credential>
</credentials>
<start to="loadSqoopDataAction"/>
<action name="loadSqoopDataAction" cred="hive_credentials">
    <sqoop xmlns="uri:oozie:sqoop-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
             <job-xml>/tmp/hive-oozie-site.xml</job-xml>
        <configuration>
            <property>
                <name>oozie.hive.defaults</name>
                <value>/tmp/hive-oozie-site.xml</value>
            </property>
                  </configuration>
        <command>job --meta-connect ${SQOOP_METASTORE_URL} --exec TEST_SQOOP_LOAD_JOB</command>
    </sqoop>
    <ok to="end"/>
    <error to="kill"/>
</action>

아래는 데이터를 가져 오는 데 사용하는 sqoop 작업입니다.

sqoop job --meta-connect ${SQOOP_METASTORE_URL} --create TEST_SQOOP_LOAD_JOB -- import --connect '${JDBC_URL}' --table testTable -m 1 --append --check-column pkId --incremental append --hive-import --hive-table testHiveTable;

매핑 된 로그에서 다음과 같은 예외가 발생합니다.

72285 [main] INFO  org.apache.sqoop.hive.HiveImport  - Loading uploaded data into Hive
Intercepting System.exit(1)

<<< Invocation of Main class completed <<<

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]

Oozie Launcher failed, finishing Hadoop job gracefully


Oozie Launcher ends

제안 해주세요.

해결법

  1. ==============================

    1.이것은 전형적인 Sqoop을 Hive로 가져 오기 작업처럼 보입니다. 따라서 Sqoop이 HDFS에서 데이터를 성공적으로 가져 왔으며 해당 데이터를 Hive로로드하지 못하는 것 같습니다.

    이것은 전형적인 Sqoop을 Hive로 가져 오기 작업처럼 보입니다. 따라서 Sqoop이 HDFS에서 데이터를 성공적으로 가져 왔으며 해당 데이터를 Hive로로드하지 못하는 것 같습니다.

    Oozie는 Sqoop 명령을 실행하기 위해 별도의 작업 (hadoop 클러스터의 모든 노드에서 실행 됨)을 시작합니다. Sqoop 명령은 별도의 작업을 시작하여 HDFS로 데이터를로드합니다. 그런 다음 Sqoop 작업이 끝나면 sqoop은 Hive 스크립트를 실행하여 해당 데이터를 Hive에로드합니다.

    이것은 이론적으로 Hadoop 클러스터의 모든 노드에서 실행되므로 하이브 CLI는 각 노드에서 사용 가능해야하며 동일한 메타 스토어와 통신해야합니다. Hive Metastore는 원격 모드에서 실행해야합니다.

    가장 일반적인 문제는 Sqoop이 올바른 메타 스토어와 통신 할 수 없기 때문입니다. 이것의 주요 이유는 일반적으로 다음과 같습니다.

  2. ==============================

    2.이것은 Sqoop의 버그 인 것 같습니다. JIRA #에 대해 확실하지 않습니다. Hortonworks는 HDP 2.2 버전에서도 문제가 여전히 해결되지 않았다고 언급했습니다.

    이것은 Sqoop의 버그 인 것 같습니다. JIRA #에 대해 확실하지 않습니다. Hortonworks는 HDP 2.2 버전에서도 문제가 여전히 해결되지 않았다고 언급했습니다.

  3. ==============================

    3.@abeaamase-귀하의 솔루션을 사용하려고합니다.

    @abeaamase-귀하의 솔루션을 사용하려고합니다.

    아래의 솔루션이 하나의 단일 oozie 작업에서 sqoop + Hive 가져 오기에 적합한 지 확인하고 싶습니까?

    ... ... ... /tmp/hive-site.xml#hive-site.xml ... ...

  4. ==============================

    4.cdh를 사용하는 경우 문제는 hive metastore jar 종속성 충돌로 인한 것일 수 있습니다.

    cdh를 사용하는 경우 문제는 hive metastore jar 종속성 충돌로 인한 것일 수 있습니다.

  5. from https://stackoverflow.com/questions/24056863/oozie-sqoop-action-fails-to-import-data-to-hive by cc-by-sa and MIT license