我在执行 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
请建议。
这似乎是一个典型的Sqoop 导入到 Hive http://ingest.tips/2014/11/27/how-to-oozie-sqoop-hive/工作。因此,Sqoop 似乎已成功将数据导入 HDFS,但无法将该数据加载到 Hive 中。
以下是所发生情况的一些背景信息... Oozie 启动一个单独的作业(它将在 hadoop 集群中的任何节点上执行)来运行 Sqoop 命令。 Sqoop 命令启动一个单独的作业将数据加载到 HDFS 中。然后,在 Sqoop 作业结束时,sqoop 运行 Hive 脚本以将该数据加载到 Hive 中。
由于理论上它是从 Hadoop 集群中的任何节点运行的,因此 hive CLI 需要在每个节点上可用并与同一个元存储进行通信。 Hive Metastore 将需要在远程模式下运行。
最常见的问题是 Sqoop 无法与正确的元存储对话。造成这种情况的主要原因通常有:
-
Hive 元存储服务 http://www.cloudera.com/content/cloudera/en/documentation/cdh5/v5-0-0/CDH5-Installation-Guide/cdh5ig_hive_metastore_configure.html没有运行。它应该以远程模式运行,并且应该启动单独的服务。这是检查其是否正在运行的快速方法:
服务配置单元元存储状态
-
hive-site.xml
不含hive.metastore.uris
。这是一个例子hive-site.xml
with hive.metastore.uris
set:
<configuration>
...
<property>
<name>hive.metastore.uris</name>
<value>thrift://sqoop2.example.com:9083</value>
</property>
...
</configuration>
-
hive-site.xml
不包含在您的 Sqoop 操作(或其属性)中。尝试将您的 hive-site.xml 添加到<file>
Sqoop 操作中的元素。这是一个示例工作流程.xml<file>
in it:
<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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)