我有一个大型数据集,分成许多200GB的块。
目前我正在努力与Pig一起处理数据。 实际上,我的集群很小(4个节点)。我认为一个可能的瓶颈是我加载数据时,因为我只需要2TB数据的一小部分。
特别是我想知道是否
加载整个数据集,然后过滤
A = load ‘data_part*’ as (x, y);
A = FILTER A by x>0
效率低于
加载每个块,过滤每个块并将所有内容附加到一起
A1 = load ‘data_part1’ as (x, y);
A1 = FILTER A1 by x>0
A2 = load ‘data_part2’ as (x, y);
A2 = FILTER A2 by x>0
A = UNION A1, A2;
如果是这样的话,为什么呢?
我在文档中找不到任何提示。我现在也无法直接使用我的数据。如果有人可以在这里帮忙那就太棒了!
非常感谢!
答案 0 :(得分:1)
我会说两者都会表现相同。只有在拥有存储或转储时才会启动映射减少作业。您应该查看where exactly PIG stores its relations
答案 1 :(得分:1)
如果过滤的数据很小,那么提前应用过滤器不会提高性能。最佳做法之一是尽早过滤。请参阅此处,了解如何通过应用过滤器FILTER EARLY AND OFTEN
来提高性能答案 2 :(得分:1)
我认为第二个会更有效率。
在程序的逻辑构建期间,PIG将检查所有语句。当它看到dump或store命令时,我将启动map-reduce程序。 现在在第二种情况中 - 您已经给出了2个过滤语句。这意味着必须有2个减速器。因此,如果将映射器和缩减器的数量设置为默认值,则效率会更高。
我不是很清楚我的答案。请告诉我,如果你发现了新的事情。