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



我有一个hadoop数据集被分割成太多的数据块的问题。

  1. 给定一个已经存在的hadoop数据集,是否有一种方法将其块组合成更少但更大的块?

  2. 是否有一种方法可以让pighadoop-streaming.jar (cloudera)对他们将输出分割成的块数量设置上限?

  1. 如果你想要一个更大的块大小,只在pig脚本的相应作业上设置所需的块大小值

    set dfs.block.size 134217728;

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

计算的
max(minsplitsize, min(maxsplitsize, blocksize))
set mapred.min.split.size 67108864
  • 限制创建的块的数量是不可能的,它必须由minsplitsize, maxsplitsizeblocksize参数控制。
  • 减少输出文件数量的另一个选择是进行随机分组。您可以查看以下示例Pig脚本(将originaloriginal_fields和任意选择的数字100替换为实际的、合理的替换):

    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;
    

    显然,从技术上讲,这是不必要的工作,但如果您的store函数没有提供另一种方法来完成此工作,它将工作。还要注意,这不会生成100个文件,但是为分组选择一个合理的数字将大大减少数量,特别是在原始数据经过大量过滤并且有许多小文件的情况下。

    最新更新