我有一个hadoop 数据集被分成太多数据块的问题。
给定一个已经存在的 hadoop 数据集,有没有办法将它的块组合成更少但更大的块?
有没有办法给
pig
或hadoop-streaming.jar
(cloudera)他们将输出分成的块数上限?
我有一个hadoop 数据集被分成太多数据块的问题。
给定一个已经存在的 hadoop 数据集,有没有办法将它的块组合成更少但更大的块?
有没有办法给pig
或hadoop-streaming.jar
(cloudera)他们将输出分成的块数上限?
如果您想要更大的块大小,请仅在 pig 脚本上的相应作业上设置所需的块大小值
set dfs.block.size 134217728;
或者,您也可以增加最小拆分大小,因为拆分大小是根据公式计算的
max(minsplitsize, min(maxsplitsize, blocksize))
set mapred.min.split.size 67108864
minsplitsize
,maxsplitsize
和blocksize
参数控制。减少输出文件数量的另一个选择是进行随机分组。您可以查看以下示例 Pig 脚本(将original、original_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;
显然,从技术上讲,这是不必要的工作,但如果您的商店功能不提供另一种方法来做到这一点,它会起作用。另请注意,这不会生成 100 个文件,但合理选择的分组数量会大大减少数量,特别是如果您的原始数据被大量过滤并且有很多小文件。