我正在创建一个简单的MapReduce作业,我想准确理解我所拥有的分割数量。我在本地运行它。
文件夹中有9个文件。当没有参数时,我得到了很多分裂(172)我猜因为主机文件系统块大小所以我明确设置
jobConf.set("mapreduce.input.fileinputformat.split.minsize", "134217728");
对于我的9个文件,我得到了46个分组,但我期待47个。
所以我隔离了“有问题”的文件,其大小是(根据ls -al):672067796
根据我的计算(总文件大小)/(最小分割大小)我的孤立文件= 672067796/134217728 = 5.007(这意味着超过5)所以我应该有6个分裂,但我只有5
2016-08-12 16:02:34,391 INFO [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(198)) - number of splits:5
有人可以解释原因吗?这是否与主机文件系统块大小有关?
此致
答案 0 :(得分:0)
我假设您使用的是Hadoop 2,因为您指定的块大小为128MB / 134217728.在这种情况下,如果您的文件大小为672067796,则表示应该有6个块。每个大小为128MB的5个块,其中最后一个块将包含大小为~7.47KB的数据。
说明:块根据您在配置中指定的大小进行划分,否则将采用默认值64MB或128MB(基于hadoop版本)。
134217728/1024 / 1024~ = 640.933MB
640.933 / 128~ = 5.00729块
这不是5或小于5 所以对于剩余的~0.00729MB数据大小,将创建一个新块。
如果使用hadoop 0.x或1.x,如果未在配置文件中指定块大小,则可以使用64MB进行上述计算。