我有一个hadoop数据集被分割成太多数据块的问题。给定一个已经存在的hadoop数据集,有没有办法将它的块组合成更小但更大的块?有什么方法可以给予吗 pig 或者 hadoop-streaming.jar (cloudera)他们将输出分成的块数的上限?
pig
hadoop-streaming.jar
qni6mghb1#
如果想要更高的块大小,请仅在pig脚本的相应作业上设置所需的块大小值 set dfs.block.size 134217728; 或者,也可以增加最小拆分大小,因为拆分大小是根据公式计算的
set dfs.block.size 134217728;
max(minsplitsize, min(maxsplitsize, blocksize)) set mapred.min.split.size 67108864
限制创建的块的数量是不可能的,它必须由 minsplitsize , maxsplitsize 以及 blocksize 仅参数。
minsplitsize
maxsplitsize
blocksize
whlutmcx2#
减少输出文件数量的另一个选择是进行随机分组。您可以查看以下示例pig脚本(用实际的、合理的替换来替换原始的、原始的\u字段和任意选择的数字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;
显然,从技术上讲,这是不必要的工作,但是如果您的存储功能不提供另一种方法来实现这一点,它将起作用。还要注意的是,这不会生成100个文件,但是为分组选择一个合理的数字会大大减少数量,特别是如果原始数据被大量过滤并且有许多小文件的话。
2条答案
按热度按时间qni6mghb1#
如果想要更高的块大小,请仅在pig脚本的相应作业上设置所需的块大小值
set dfs.block.size 134217728;
或者,也可以增加最小拆分大小,因为拆分大小是根据公式计算的限制创建的块的数量是不可能的,它必须由
minsplitsize
,maxsplitsize
以及blocksize
仅参数。whlutmcx2#
减少输出文件数量的另一个选择是进行随机分组。您可以查看以下示例pig脚本(用实际的、合理的替换来替换原始的、原始的\u字段和任意选择的数字100):
显然,从技术上讲,这是不必要的工作,但是如果您的存储功能不提供另一种方法来实现这一点,它将起作用。还要注意的是,这不会生成100个文件,但是为分组选择一个合理的数字会大大减少数量,特别是如果原始数据被大量过滤并且有许多小文件的话。