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

时间:2014-06-05 09:46:14

标签: 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>

下面是我用来导入数据的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

请建议。

4 个答案:

答案 0 :(得分:8)

这似乎是一个典型的Sqoop import to Hive工作。所以看起来Sqoop已经成功地在HDFS中导入了数据,并且无法将这些数据加载到Hive中。

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

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

最常见的问题是因为Sqoop无法与正确的Metastore对话。主要原因通常是:

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

      

    服务hive-Metoreore状态

  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添加到Sqoop操作中的<file>元素。这是一个示例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>
    

答案 1 :(得分:0)

这似乎是Sqoop中的一个错误。我不确定JIRA#。 Hortonworks提到即使在HDP 2.2版本中问题仍未得到解决。

答案 2 :(得分:0)

@abeaamase - 我想尝试使用您的解决方案。

只想检查以下解决方案是否适用于单个oozie作业中的sqoop + Hive导入?

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

答案 3 :(得分:0)

如果您使用的是cdh,那么问题可能是由于hive Metatore jar依赖性冲突造成的。