MapReduce中决定Map个数的因素

本文介绍Hadoop MapReduce中文件切分的原理及影响因素,包括HDFS块大小、文件大小、文件个数及splitsize大小,并提供map作业个数计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

 在执行MapReduce作业时,在map阶段读取数据前,FileInputFormat会根据一定的规则将将输入文件split成数据块进行分布式读取。split的个数决定了map的个数。影响文件切分的因素主要包括以下几个:

二、影响文件切分的几个因素

1、HDFS块的大小

  Hdfs块的大小,也就是hadoop中dfs.block.size的大小。hadoop默认数据块的大小为128M;假如一个文件的大小是256M,则文件会被split为2个map。

2、文件大小

  当分块大小为128M时,如果输入文件是128M则会被split一个块;当文件大小为1024M时,则会被split划分为4个块,也就是4个map;

3、文件个数

  FileinputFormat按照文件进行split时,只会对大文件进行切分,如果一个文件没有达到默认切分块的大小,也会分配一个map进行处理;比如输入的文件目录中有300个10M的小文件,则会split出300个map作业。即超出默认数据块的大文件会被切分,小文件不进行切分,直接在一个map中进行处理。

4、splitsize的大小

    FileinputFormat文件分片规则是按照splitsize的大小进行分割的,splitsize在没有设置的情况下默认是和hadoop存储数据块的大小是一致的,即128M;我们在开发MapReduce应用程序时可以对splitsize进行调节。

三、Map作业个数的计算公式

  从hadoop源码中可以看到map的计算公式如下

  1、分片大小计算公式

  splitsize=max(minimumsize,min(maximumsize,blocksize))

 如果没有设置minimumsize和maximumsize,splitsize的大小默认等于blocksize;

 2、map个数计算公式

  参考hadoop源码中的FileInputSplit类中的getSplits方法,可以看到文件分割map的计算方式如下

total_split ;

for(file :输入目录中的每个文件)

{

file_split = 1;

if(file.size》splitsize)

{

file_split=file_size/splitsize;

}

total_split+=file_split;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值