gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:25:37 26 4
gpt4 key购买 nike

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

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

在日志中我没有收到任何异常。

下面是我正在使用的 sqoop Action 。

<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

请提出建议。

最佳答案

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

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

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

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

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

    service hive-metastore status

  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 操作中的元素。这是一个带有 <file> 的示例 workflow.xml其中:

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

关于hadoop - oozie Sqoop 操作无法将数据导入配置单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com