oozie Sqoop操作无法将数据导入配置单元

Che*_*rke 3 hadoop hive bigdata sqoop oozie

我在执行oozie sqoop动作时遇到问题.在日志中我可以看到sqoop能够将数据导入临时目录,然后sqoop创建hive脚本来导入数据.

将临时数据导入配置单元时失败.

在日志中我没有任何异常.

下面是我正在使用的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>
Run Code Online (Sandbox Code Playgroud)

下面是我用来导入数据的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;
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

请建议.

小智 7

这似乎是对Hive工作的典型Sqoop导入.因此,似乎Sqoop已经成功地在HDFS中导入了数据,并且无法将这些数据加载到Hive中.

这里有一些关于正在发生的事情的背景...... Oozie启动一个单独的工作(将在你的hadoop集群中的任何节点上执行)来运行Sqoop命令.Sqoop命令启动单独的作业以将数据加载到HDFS.然后,在Sqoop作业结束时,sqoop运行一个配置单元脚本以将该数据加载到Hive中.

由于理论上这是从Hadoop集群中的任何节点运行的,因此需要在每个节点上提供hive CLI并与同一个Metastore进行通信.Hive Metastore需要以远程模式运行.

最正常的问题是因为Sqoop无法与正确的Metastore交谈.主要原因通常是:

  1. Hive Metastore服务未运行.它应该在远程模式下运行,并且应该启动单独的服务.以下是检查其运行情况的快速方法:

    服务hive-Metoreore状态

  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>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)