首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delta/增量负荷

Delta/增量负荷
EN

Stack Overflow用户
提问于 2014-06-12 15:41:55
回答 4查看 28.9K关注 0票数 8

我有下面的用例:

我的应用程序有一个表,其中包含多年数据RDBMS DB中。我们使用sqoop将数据输入到HDFS中,并加载到按年份、月份划分的hive表中。

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

现在这里的问题是:如何使用这些更新的记录每天执行增量加载单元表。

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

因为-

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

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

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

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

我们开放在蜂箱或sqoop末端探索选项。你能告诉我们吗?

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2014-06-12 18:48:39

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

一个典型的方法是一个两步的过程。

  1. 将已更改的任何数据插入到一个表中。正如您所说的,在更新行时,这将导致重复。
  2. 定期用第一个表中的“去重复”数据覆盖第二个表。

第二步是潜在的痛苦,但实际上是无法避免的。在某种程度上,您必须覆盖,因为Hive不进行就地更新。但是,根据您的数据,您可能能够巧妙地对表进行分区,以避免执行完全覆盖。例如,如果步骤1只插入少数几个分区,那么只需要将这些分区覆盖到第二个表中。

另外,根据访问模式的不同,让第二个“去复制”表成为视图而根本不实现它是有意义的。不过,通常情况下,这只是延迟查询时间的痛苦。

我看到的唯一相反的方法是使用非常定制的输入和输出格式。与其解释这一切,不如在这里阅读:http://pkghosh.wordpress.com/2012/07/08/making-hive-squawk-like-a-real-database/

欧文·奥马利( Owen‘’Malley)也一直致力于在标准蜂巢中添加这个想法的一个版本,但它仍在开发中:https://issues.apache.org/jira/browse/HIVE-5317

票数 2
EN

Stack Overflow用户

发布于 2015-04-29 17:02:01

对于批量嵌入、更新和删除,您可以使用直接映射减少方法。细节在这里。它本质上是一个合并和紧凑的操作。二级排序在时间戳或序列字段上执行,或者在记录中执行,或者在HDFS文件名中编码。还原器端连接记录的最后一个版本作为输出发出。

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

票数 1
EN

Stack Overflow用户

发布于 2017-02-01 09:51:56

我们在将大量数据插入到数据包中时也遇到了类似的问题。由于我们没有控制数据,所以我们很难保持湖面不被复制。请注意,这并不是要更新蜂巢中的记录,而是要避免再次重复同一记录。

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

代码语言:javascript
复制
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也这样做,但我们无法在内部使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24188544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档