限制hadoop数据集中的文件(块)数量?

时间:2014-05-16 15:24:04

标签: hadoop apache-pig hadoop-streaming vowpalwabbit

我有a problem,其中hadoop数据集被拆分为太多数据块。

  1. 鉴于已经存在的hadoop数据集,有没有办法将其块组合成更少但更大的块?

  2. 有没有办法让pighadoop-streaming.jar(cloudera)将输出分成的块数上限?

2 个答案:

答案 0 :(得分:2)

  1. 如果您想要更高的块大小,请仅在pig脚本上的相应作业上设置所需的块大小值

    set dfs.block.size 134217728;

  2. 或者,您也可以增加最小分割尺寸,因为分割尺寸是根据公式

    计算的
    max(minsplitsize, min(maxsplitsize, blocksize))
    
    set mapred.min.split.size 67108864
    
    1. 限制创建的块数是不可能的,它只能由minsplitsizemaxsplitsizeblocksize参数控制。

答案 1 :(得分:0)

减少输出文件数量的另一种方法是进行随机分组。您可以查看以下示例Pig脚本(将 original original_fields 和任意选择的数字 100 替换为其实际的,合理的替换):< / p>

with_rnd = FOREACH original GENERATE *, (int)(RANDOM() * 100) AS rnd;

grouped = GROUP with_rnd BY rnd;

flattened = FOREACH grouped GENERATE FLATTEN(with_rnd);

output = FOREACH flattened GENERATE original_fields;

从技术上来说,显然,这是不必要的工作,但是,如果您的存储功能没有提供另一种方式可以执行此操作。还要注意,这不会生成100个文件,但是合理选择分组数量将大大减少数量,尤其是在原始数据被大量过滤且包含许多小文件的情况下。