转载需注明出处:https://www.codelast.com/

如果一个Pig job是map-only的job,并且其输入文件数很多的话,那么输出的文件数也会同样多,此时,如果每个文件大小又比较小的话,长久下去就会对Haodoop NameNode造成很大压力。我们可以通过给Pig job添加一个reduce过程来减少输出文件数。

话不多说,直接上代码:

  1. D = LOAD '/user/abc/xxx' AS (col1: long, col2: chararray);  
  2. E = FOREACH (GROUP D BY RANDOM() PARALLEL 100) GENERATE FLATTEN(D); 

文章来源:https://www.codelast.com/
其中:
加载到D里的数据就是文件数量巨大,并且每个文件大小都比较小的一份数据。
PARALLEL后的100可以视情况更改,设置为100则输出文件数为100。
这里的实现逻辑是:添加一个reduce过程,其shuffle key是由Pig的 RANDOM() 函数生成的一个随机数,因此不会出现让大量数据聚集在同一个reducer里的情况,这就使得输出数据均匀地分布在100个输出文件里。

[原创] 如何减少map-only的Pig job的输出文件数
Tagged on:         

发表评论

电子邮件地址不会被公开。 必填项已用*标注