繁体   English   中英

蜂巢中的增量/增量负载

[英]Delta/Incremental Load in Hive

我有以下用例:

我的应用程序在RDBMS DB中有一个包含多年数据的表。 我们已使用sqoop将数据获取到HDFS中,并已加载到按年,月划分的hive表中。

现在,该应用程序将更新,并且每天也将新记录插入RDBMS Table表中。 这些更新的记录可以跨越整个历史月份。 更新的记录和新的插入记录可以通过更新的时间戳字段确定(它将具有当前日期时间戳)。

现在的问题是:如何使用这些更新的记录每天制作增量/增量负载配置单元表。

->我知道有一个sqoop功能,允许增量导入。 但是,仅新的增量导入对我们来说还不够。

因为-

->我不能直接在配置单元表中插入这些记录(使用insert into),因为它将导致重复的记录(更新的记录)。

->用同样的方法,我不能使用插入覆盖语句,因为它们只是更新和跨越多个月的插入记录。 插入覆盖将删除以前的记录。

当然,最简单的选择是每天使用sqoop获取完整数据,但由于数据量很大,我们不想这样做。

因此,基本上,我们只想完全加载我们已收到更新/插入记录的那些分区。

我们愿意在蜂巢或鱿鱼端探索选择。 你能告诉我们吗?

提前致谢。

对于任何基于Hive的系统,更新都是一个众所周知的难题。

一种典型的方法是两步过程

  1. 将所有已更改的数据插入到一个表中。 如您所说,更新行时将导致重复。
  2. 定期用第一张表中的“重复数据删除”数据覆盖第二张表。

第二步可能很痛苦,但实际上没有办法解决。 在某种程度上,您必须重写,因为Hive不会进行就地更新。 但是,根据您的数据,您也许可以对表进行足够巧妙的分区,以避免进行完全覆盖。 例如,如果第1步仅插入少数几个分区,则仅那些分区需要被覆盖到第二个表中。

同样,根据访问模式,将第二个“重复数据删除”表作为视图而不完全实现它可能是有意义的。 通常,这只会延迟查询时间。

我所看到的唯一的另一种方法是使用非常自定义的输入和输出格式。 您可以在这里阅读有关以下内容的详细信息: http : //pkghosh.wordpress.com/2012/07/08/making-hive-squawk-like-a-real-database/

Owen O'Malley还一直在努力将这种想法的版本添加到标准Hive中,但仍在开发中: https : //issues.apache.org/jira/browse/HIVE-5317

您可以使用直接的Map Reduce方法进行批量插入,更新和删除。 详细信息在这里。 它本质上是合并和紧凑的操作。 在记录或以HDFS文件名编码的时间戳或序列字段上执行二级排序。 来自reduce端联接的记录的最后版本作为输出发出。

https://pkghosh.wordpress.com/2015/04/26/bulk-insert-update-and-delete-in-hadoop-data-lake/

将批量数据插入数据湖时,我们也遇到了类似的问题。 由于我们无法控制数据,因此很难保持湖泊清洁,避免重复。 请注意,这与更新配置单元中的记录无关,而是避免再次重复同一记录。

我为此任务创建了一个猪脚本:

CODATA = COGROUP HISTORICAL_DATA BY (key_col_1, key_col_2, ...),
                 DAILY_DATA_DISTINCT BY (key_col_1, key_col_2, ...);
CODATA_FILTERED = FILTER CODATA BY IsEmpty(HISTORICAL_DATA);
SET_DIFFERENCE = FOREACH CODATA_FILTERED GENERATE FLATTEN($2);
DUMMY = FILTER DAILY_DATA_DISTINCT BY $0=='';
DAILY_NEW_DATA = UNION DUMMY, SET_DIFFERENCE;

它建立了设置差异。 Apache DataFu SetDifference可以执行相同的操作,但是我们无法在内部使用它。

我为增量加载提供了一个解决方案,其中包含一个shell脚本,您只需要安排作业,就可以将行逐步添加到配置单元数据库中。 对于完整的解决方案,您必须点击以下链接-

https://bigdata-analytix.blogspot.com/2018/10/hive-incrementaldelta-load.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM