Apache的猪:有没有ORDER BY与并行确保一致性哈希/分配?

问题描述 投票:1回答:1

如果我打开一个数据集,责令其在具有parallel子句的特定键,然后存储它,我可以通过部分-R-00XXX提供多个文件,部分-R-00000,这取决于我在并行语句中指定。

如果我再装入一个新的数据集,说改天的价值的数据,具有一些新的钥匙和一些相同的钥匙,为了它,然后保存它,有没有什么办法,以保证从昨天的数据部分-R-00000将包含相同的密钥空间的一部分-R-00000,从今天的数据?

有没有连的方式,以保证所有的记录都将被包含在一个单一的零件文件,或者是有可能,一键可以得到在2个文件分割,给予足够的记录?

我想真正的问题是关于排序功能猪是如何工作 - 它使用一致的哈希算法国防部分发数据,或是否订购整套,然后把它吗?

这样做的目的还是希望是,如果密钥空间始终分区,这将是很容易的进行每部分文件滚动数据的合并。如果不是这样,我想的问题是,有没有写猪,使那种一致性哈希的一些运营商或方法吗?

不知道如果我的问题是很清楚的,但任何帮助,将不胜感激 - 遇到问题想出来的基础上的文档。提前致谢!

sql-order-by apache-pig
1个回答
5
投票

Alrighty,试图回答我的问题。

看来,猪没有保证结果的一致表示将分发文件的方式。这部分是基于文档,部分基于信息有关如何Hadoop的工作,以及部分基于观察。

当猪做了分区顺序,由(例如,使用并行子句,以获得一个以上的减速机),它似乎力之间的订单通过,并且排序本身之前,无论发生什么事的中间工作。从我可以告诉,猪着眼于数据(基于映射器的中间工作是在负载阶跃数的1-10%的数量)的1-10%,并让你的按键的抽样分布试图进行排序。

我的猜测/想法是,猪计算出密钥分发,然后使用从映射器到减速机的自定义分区。该分区映射一系列键每个减速机,所以它成为一个简单的词汇比较 - “是这个纪录比我分配end_key越线传递到下一个减速?”。

当然,也有两个因素需要考虑,基本上意味着,猪不会是一致的在不同的数据集,甚至对同一数据集的重新运行。其一,因为猪在中间工作采样数据,我想它可能获得不同的样本,因此不同的密钥分发。另外,还要考虑两个不同的数据集,具有大范围变化的关键分布的例子。猪必然会拿出不同的分布,因此如果键X是部分-R-00111有一天,它不一定会在那里结束的第二天。

希望这可以帮助其他人寻找到这一点。

编辑

我发现一对夫妇从奥赖利似乎备份我的假设资源。

一个是关于map reduce patterns。它主要描述为通过两回合方法,一个“分析”阶段和最终排序阶段是可解的标准总排序问题。

第二个是关于猪的order by明确。它说(在情况下,链接不会消亡):

正如上文中的“组”的讨论,在数据值的偏斜是很常见的。这会影响订单只是因为它组,导致一些减速带比其他显著更长的时间。为了解决这个问题,猪平衡整个减速机的输出。它通过第一采样顺序语句的输入来获取密钥分发的估计做到这一点。在此基础上的样品,它然后建立产生一个平衡的总订单一个分区...的猪分配记录,以减少歪斜的是,它打破了一个给定键的所有实例发送到MapReduce的约定方式产生重要的副作用同一个分区。如果您有依赖于本公约其他处理,不要用猪的命令语句对数据进行排序吧......还有,猪增加了额外的MapReduce工作,以您的管道做了采样。因为该采样是非常轻便(读取仅每块的第一个记录),一般需的总作业时小于5%。

© www.soinside.com 2019 - 2024. All rights reserved.