我在执行ooziesqoop操作时遇到问题。在日志中,我可以看到sqoop能够将数据导入temp目录,然后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;
在Map日志中,我得到以下异常。
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条答案
按热度按时间bwntbbo31#
@阿贝马斯-我想尝试使用你的解决方案。
只想检查一下下面的解决方案是否适合在一个oozie作业中导入sqoop+hive?
... ... ... /tmp/hive-site.xml#hive-site.xml。。。
1wnzp6jl2#
若您使用的是cdh,那个么问题可能是由于配置单元元存储jar依赖冲突造成的。
bzzcjhmw3#
这似乎是sqoop中的一个bug。我不确定吉拉的事。hortonworks提到,即使在HDP2.2版本中,这个问题仍然没有得到解决。
raogr8fs4#
这看起来像是典型的sqoop导入到配置单元作业。所以看起来sqoop已经成功地在hdfs中导入了数据,并且无法将数据加载到hive中。
这里有一些关于发生了什么的背景。。。oozie启动一个单独的作业(将在hadoop集群中的任何节点上执行)来运行sqoop命令。sqoop命令启动一个单独的作业,将数据加载到hdfs中。然后,在sqoop作业结束时,sqoop运行一个配置单元脚本,将数据加载到配置单元中。
由于这在理论上是从hadoop集群中的任何节点上运行的,因此hivecli需要在每个节点上都可用,并与同一个metastore通信。配置单元元存储将需要在远程模式下运行。
最常见的问题是因为sqoop无法与正确的元存储对话。其主要原因通常是:
配置单元元存储服务未运行。它应该在远程模式下运行,并且应该启动一个单独的服务。下面是一个快速检查其是否正在运行的方法:
服务配置单元元存储状态
hive-site.xml
不包含hive.metastore.uris
. 下面是一个例子hive-site.xml
与hive.metastore.uris
设置: