我在执行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
请建议。
答案 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对话。主要原因通常是:
Hive metastore service未运行。它应该在远程模式下运行,并且应该启动单独的服务。这是检查其运行的快速方法:
服务hive-Metoreore状态
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>
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依赖性冲突造成的。