문제

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

제안해주세요.

도움이 되었습니까?

해결책

이건 전형적인거 같은데 Sqoop을 Hive로 가져오기 직업.따라서 Sqoop이 HDFS의 데이터를 성공적으로 가져왔지만 해당 데이터를 Hive로 로드하지 못한 것 같습니다.

무슨 일이 일어나고 있는지에 대한 배경은 다음과 같습니다.Oozie는 Sqoop 명령을 실행하기 위해 별도의 작업(hadoop 클러스터의 모든 노드에서 실행됨)을 시작합니다.Sqoop 명령은 HDFS에 데이터를 로드하기 위해 별도의 작업을 시작합니다.그런 다음 Sqoop 작업이 끝나면 sqoop은 Hive 스크립트를 실행하여 해당 데이터를 Hive에 로드합니다.

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

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

  1. Hive 메타스토어 서비스 실행되지 않습니다.원격 모드로 실행되어야 하며 별도의 서비스가 시작되어야 합니다.실행 중인지 확인하는 빠른 방법은 다음과 같습니다.

    서비스 하이브-메타스토어 상태

  2. hive-site.xml 포함되어 있지 않다 hive.metastore.uris.여기에 예가 있습니다 hive-site.xml ~와 함께 hive.metastore.uris 세트:

    <configuration>
    ...
      <property>
        <name>hive.metastore.uris</name>
        <value>thrift://sqoop2.example.com:9083</value>
      </property>
    ...
    </configuration>
    
  3. hive-site.xml Sqoop 작업(또는 해당 속성)에 포함되지 않습니다.hive-site.xml을 <file> Sqoop 액션의 요소입니다.다음은 workflow.xml의 예입니다. <file> 그 안에 :

    <workflow-app name="sqoop-to-hive" xmlns="uri:oozie:workflow:0.4">
        ...
        <action name="sqoop2hive">
            ...
            <sqoop xmlns="uri:oozie:sqoop-action:0.2">
                ...
                <file>/tmp/hive-site.xml#hive-site.xml</file>
            </sqoop>
            ...
        </action>
        ...
    </workflow-app>
    

다른 팁

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

@abeaamase - 솔루션을 사용하려고 시도하고 싶습니다.

아래 솔루션이 SQOOP + 하이브 가져 오기에 적합한 솔루션이 하나의 oozie 직업에서 수입을 잘 작동시키고 싶습니까?

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

CDH를 사용하는 경우 Hive Metastore JARE Dependency 충돌로 인한 문제가 발생할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top