如何使用Sqoop从MySQL增量导入Hive?

时间:2012-12-27 20:31:51

标签: mysql hadoop hive sqoop

我可以使用Sqoop

成功地从MySQL到HDFS的增量导入
sqoop job -create JOBNAME ... --incremental append --check-column id --last-value LAST
sqoop job -exec JOBNAME

完成日志消息,如

INFO tool.ImportTool: Saving incremental import state to the metastore
INFO tool.ImportTool: Updated data for job: JOBNAME

检查作业显示incremental.last.value已正确更新。

如果我尝试相同的过程,但将“--hive-import”添加到我的作业定义中,它将成功执行,但不会更新incremental.last.value。

这是一个错误吗?预期的行为?有没有人有一个从MySQL逐步导入数据并通过Hive提供它的程序?

我基本上希望我的Hadoop集群成为我的MySQL数据库的读取从属,以便快速分析。如果还有一些其他的解决方案而不是Hive(Pig会很好),我也很乐意听到。

3 个答案:

答案 0 :(得分:0)

选项--hive import用于使用mapreduce job在HDFS上创建表的定义结构。另外,正在读取到Hive的数据是读取架构!!! 。这意味着除非执行查询,否则数据实际上不会导入到它。所以每次运行一个文件时,查询都会在Hive的表中新近(刚刚)执行该模式。因此它不存储最后一个增量值。

Hive模式上的每个查询都被视为独立的,因为它在执行时运行并且不存储旧结果。

答案 1 :(得分:0)

您也可以手动创建外部配置单元表,因为它们只是一次性活动,并且可以像您一样继续导入增量数据。

答案 2 :(得分:0)

我们可以使用下面的脚本获取最后一个值。

--check_colum colname=id -- incremental append or lastmodified --last_value $(HIVE_HOME /bin/hive -e'select max(id) from tablename')