2014-06-05 4 views
3

oozie sqoop 작업을 실행하는 동안 문제가 발생했습니다. 로그에서 sqoop은 데이터를 임시 디렉토리로 가져올 수 있고 sqoop은 하이브 스크립트를 생성하여 데이터를 가져 오는 것을 볼 수 있습니다.oozie 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 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 

좋습니다.

+0

/user/hive/warehouse에 쓰기 권한이 없습니다. – selle

+0

주어진 이름은 무엇입니까? 네 이름을 확인할 수 있니? hdfs : // <> –

+0

이 hdfs에 데이터를로드하는 위치에 하이브 테이블을 가리키고 있다고 언급했는지 확인하십시오. – user3837299

답변

7

이것은 일반적인 Sqoop import to Hive 일입니다. 그래서 Sqoop은 HDFS에서 데이터를 성공적으로 가져 왔고 그 데이터를 Hive에로드하지 못했습니다.

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

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

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

  1. Hive metastore service이 실행되지 않습니다. 원격 모드에서 실행 중이어야하며 별도의 서비스를 시작해야합니다. 다음은 그 실행 여부를 확인하는 빠른 방법 : hive.metastore.uris을 포함하지 않는

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

  2. hive-site.xml. 여기 hive.metastore.uris 세트 예 hive-site.xml입니다 :

    <configuration> 
    ... 
        <property> 
        <name>hive.metastore.uris</name> 
        <value>thrift://sqoop2.example.com:9083</value> 
        </property> 
    ... 
    </configuration> 
    
  3. hive-site.xml은 당신의 Sqoop을 행동 (또는 속성)에 포함되지 않습니다. Sqoop 액션의 <file> 요소에 hive-site.xml을 추가하십시오. 여기에 <file>와 예 workflow.xml는 다음과 같습니다

    <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> 
    
0

이 Sqoop을에서 버그가 수 있도록 보인다. JIRA #에 대한 확신이 없습니다. Hortonworks는 HDP 2에서도 문제가 해결되지 않는다고 언급했습니다.2 버전.

+1

위의 호를 위해 hortonworks 링크를 공유해주십시오. 나는 같은 문제에 직면하고있다. –

0

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

아래 솔루션이 sqoop + single hozie 작업으로 하이브 임포트에 잘 작동하는지 확인하고 싶습니다. /tmp/hive-site.xml#hive-site.xml

... ... ... ... ...

0

당신이 만약 cdh를 사용하면 하이브 메타 스토어 jar 종속성 충돌로 인한 문제 일 수 있습니다.

관련 문제