【问题标题】:oozie Sqoop action fails to import data to hiveoozie Sqoop 操作无法将数据导入配置单元
【发布时间】:2014-07-26 06:00:09
【问题描述】:

我在执行 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 Job。

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

请提出建议。

【问题讨论】:

  • 在 /user/hive/warehouse 中缺少写访问权限?
  • 给出的namenode是什么?你能验证你的 namenode 吗?确保你提到了 hdfs://
  • 将您的配置单元表指向您将数据加载到 hdfs 的位置就可以了!!!

标签: hadoop hive bigdata sqoop oozie


【解决方案1】:

这似乎是一个典型的Sqoop import to Hive 工作。因此,Sqoop 似乎已成功将数据导入 HDFS,但未能将该数据加载到 Hive。

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

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

最常见的问题是因为 Sqoop 无法与正确的元存储通信。造成这种情况的主要原因通常是:

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

    服务配置单元元存储状态

  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 添加到 Sqoop 操作中的 &lt;file&gt; 元素。这是一个示例 workflow.xml,其中包含 &lt;file&gt;

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你能分享上述问题的hortonworks链接吗?我面临同样的问题
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多