Frage

Beim Ausführen der Oozie-Sqoop-Aktion tritt ein Problem auf.In den Protokollen kann ich sehen, dass sqoop Daten in das temporäre Verzeichnis importieren kann. Anschließend erstellt sqoop Hive-Skripte zum Importieren von Daten.

Beim Importieren temporärer Daten in Hive schlägt es fehl.

In den Protokollen erhalte ich keine Ausnahme.

Unten ist eine Sqoop-Aktion, die ich verwende.

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

Unten ist ein Sqoop-Job, den ich zum Importieren von Daten verwende.

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;

In zugeordneten Protokollen erhalte ich die folgende Ausnahme.

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

Bitte vorschlagen.

War es hilfreich?

Lösung

Das scheint typisch zu sein Sqoop-Import in Hive Arbeit.Es sieht also so aus, als ob Sqoop erfolgreich Daten in HDFS importiert hat und diese Daten nicht in Hive laden kann.

Hier einige Hintergrundinformationen zu dem, was passiert ...Oozie startet einen separaten Job (der auf jedem Knoten in Ihrem Hadoop-Cluster ausgeführt wird), um den Sqoop-Befehl auszuführen.Der Sqoop-Befehl startet einen separaten Job zum Laden von Daten in HDFS.Am Ende des Sqoop-Jobs führt sqoop dann ein Hive-Skript aus, um diese Daten in Hive zu laden.

Da dies theoretisch von jedem Knoten in Ihrem Hadoop-Cluster aus ausgeführt wird, muss die Hive-CLI auf jedem Knoten verfügbar sein und mit demselben Metastore kommunizieren.Der Hive-Metastore muss im Remote-Modus ausgeführt werden.

Das normalste Problem besteht darin, dass Sqoop nicht mit dem richtigen Metastore kommunizieren kann.Die Hauptgründe hierfür sind normalerweise:

  1. Hive-Metastore-Dienst Läuft nicht.Es sollte im Remote-Modus ausgeführt werden und ein separater Dienst sollte gestartet werden.So können Sie schnell überprüfen, ob es läuft:

    Service-Hive-Metastore-Status

  2. hive-site.xml beinhaltet nicht hive.metastore.uris.Hier ist ein Beispiel hive-site.xml mit hive.metastore.uris Satz:

    <configuration>
    ...
      <property>
        <name>hive.metastore.uris</name>
        <value>thrift://sqoop2.example.com:9083</value>
      </property>
    ...
    </configuration>
    
  3. hive-site.xml ist nicht in Ihrer Sqoop-Aktion (oder ihren Eigenschaften) enthalten.Versuchen Sie, Ihre hive-site.xml zu a hinzuzufügen <file> Element in Ihrer Sqoop-Aktion.Hier ist eine Beispiel-Workflow.xml mit <file> drin:

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

Andere Tipps

Dies scheint ein Fehler in SQOOP zu sein.Ich bin mir nicht sicher über die Jira #.HortonWorks erwähnt, dass das Problem auch in der HDP 2.2-Version noch nicht aufgelöst ist.

@abeaamase - ich möchte versuchen, Ihre Lösung zu verwenden.

Möchten Sie nur überprüfen, ob die unterhalb der Lösung gut funktioniert für SQOOP + HIVE-Import in einem einzigen Oozie-Job?

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

Wenn Sie CDH verwenden, kann das Problem auf Hive-Metastore-Jar-Abhängigkeitskonflikte zurückzuführen sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top