我有一个很大的数据集,分为许多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;
如果是这样的话,为什么?
我在文件中找不到任何提示。我现在也不能直接用我的数据来尝试。如果有人能在这里帮忙,那就太好了!
非常感谢!
我认为两者的性能相同。只有当您有存储或转储时,才会启动地图缩减作业。您可能应该了解PIG将其关系
如果过滤的数据很小,那么尽早应用过滤器不会提高性能。最好的做法之一是尽早并经常进行筛选。请参阅此处,通过应用过滤器FILTER EARLY和OFTEN 来增强性能
我认为第二个会更有效率。
在程序的逻辑构建过程中,PIG将检查所有语句。当它看到dump或store命令时,我将启动map reduce程序。现在在第二个场景中,您已经给出了2个filter语句。这意味着必须有2个减速器。因此,如果将映射器和减速器的数量设置为默认值,则效率会更高。
我对我的回答不太确定。如果你有新发现,请告诉我。