如何使用 Sqoop 从 MySQL 增量导入到 Hive?
Posted
技术标签:
【中文标题】如何使用 Sqoop 从 MySQL 增量导入到 Hive?【英文标题】:How to incremental import from MySQL to Hive using Sqoop? 【发布时间】:2012-12-27 20:31:51 【问题描述】:我可以使用 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
检查作业发现增量.last.value 已正确更新。
如果我尝试相同的过程,但在我的作业定义中添加“--hive-import”,它将成功执行,但不会更新incremental.last.value。
这是一个错误吗?预期行为?有没有人有从 MySQL 增量导入数据并通过 Hive 提供数据的程序?
我基本上希望我的 Hadoop 集群成为我的 MySQL 数据库的读取从属,以便快速分析。如果除了 Hive 之外还有其他解决方案(Pig 会很好),我也很想听听。
【问题讨论】:
我只是在学习 hive,还没有真正开始设置它。我真的很想知道这个问题的答案。 【参考方案1】:选项 --hive import 用于使用 mapreduce 作业在 HDFS 上创建表的定义结构。此外,正在读取到 Hive 的数据是 Read Schema!!! 。这意味着除非执行查询,否则数据实际上不会导入到其中。因此,每次运行文件时,都会在 Hive 表上新(新鲜)的模式上执行查询。因此它不会存储最后一个增量值。
Hive 架构上的每个查询都被视为独立的,因为它在执行时运行并且不存储旧结果。
【讨论】:
【参考方案2】:您也可以手动创建外部配置单元表,因为这些只是一次活动,并继续导入增量数据。
【讨论】:
【参考方案3】:我们可以使用下面的脚本获取最后一个值。
--check_colum colname=id -- incremental append or lastmodified --last_value $(HIVE_HOME /bin/hive -e'select max(id) from tablename')
【讨论】:
以上是关于如何使用 Sqoop 从 MySQL 增量导入到 Hive?的主要内容,如果未能解决你的问题,请参考以下文章
通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value