PIG:如何有效地加载和过滤大型数据集?

时间:2016-05-11 00:39:41

标签: hadoop mapreduce apache-pig cloudera

我有一个大型数据集,分成许多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;

如果是这样的话,为什么呢?

我在文档中找不到任何提示。我现在也无法直接使用我的数据。如果有人可以在这里帮忙那就太棒了!

非常感谢!

3 个答案:

答案 0 :(得分:1)

我会说两者都会表现相同。只有在拥有存储或转储时才会启动映射减少作业。您应该查看where exactly PIG stores its relations

答案 1 :(得分:1)

如果过滤的数据很小,那么提前应用过滤器不会提高性能。最佳做法之一是尽早过滤。请参阅此处,了解如何通过应用过滤器FILTER EARLY AND OFTEN

来提高性能

答案 2 :(得分:1)

我认为第二个会更有效率。

在程序的逻辑构建期间,PIG将检查所有语句。当它看到dump或store命令时,我将启动map-reduce程序。          现在在第二种情况中 - 您已经给出了2个过滤语句。这意味着必须有2个减速器。因此,如果将映射器和缩减器的数量设置为默认值,则效率会更高。

我不是很清楚我的答案。请告诉我,如果你发现了新的事情。