質問

oozie 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;

Mapred ログで次の例外が発生します。

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

提案してください。

役に立ちましたか?

解決

これは典型的なようです Hive への Sqoop インポート 仕事。したがって、Sqoop は HDFS にデータを正常にインポートしましたが、そのデータを Hive にロードすることに失敗しているようです。

何が起こっているのかについての背景をいくつかご紹介します...Oozie は、Sqoop コマンドを実行するための別のジョブ (Hadoop クラスター内の任意のノードで実行されます) を起動します。Sqoop コマンドは、データを HDFS にロードするための別のジョブを開始します。次に、Sqoop ジョブの最後に、sqoop はハイブ スクリプトを実行して、そのデータを Hive にロードします。

これは理論的には Hadoop クラスター内の任意のノードから実行されるため、Hive CLI が各ノードで利用可能であり、同じメタストアと通信する必要があります。Hive メタストアはリモート モードで実行する必要があります。

最も一般的な問題は、Sqoop が正しいメタストアと通信できないことです。通常、この主な理由は次のとおりです。

  1. Hive メタストア サービス は実行されていません。リモート モードで実行し、別のサービスを開始する必要があります。実行中かどうかを確認する簡単な方法は次のとおりです。

    サービスハイブメタストアのステータス

  2. hive-site.xml 含まれていない hive.metastore.uris. 。ここに例があります hive-site.xmlhive.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バージョンでも問題はまだ解決されていないと述べました。

@abeaumase - 私はあなたの解決策を使いようとします。

以下の解決策をチェックしたいのであれば、1つのOozie JobでSQOOP + Hiveインポートに適していますか?

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

CDHを使用している場合、問題が隠れているメタストアJAR依存関係の競合が原因である可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top