(转) 通过input分片的大小来设置map的个数
2015-11-02 22:02
302 查看
摘要 通过input分片的大小来设置map的个数
map inputsplit hadoop
前言:在具体执行Hadoop程序的时候,我们要根据不同的情况来设置Map的个数。除了设置固定的每个节点上可运行的最大map个数外,我们还需要控制真正执行Map操作的任务个数。
1.如何控制实际运行的map任务个数
我们知道,文件在上传到Hdfs文件系统的时候,被切分成不同的Block块(默认大小为64MB)。但是每个Map处理的分块有时候并不是系统的物理Block块大小。实际处理的输入分块的大小是根据InputSplit来设定的,那么InputSplit是怎么得到的呢?
?
我们通过改变InputFormat中分片的多少来控制实际使用的Map数量,而控制InputFormat中的分片多少就需要控制每个InputSplit分片的大小
2.如何控制每个split分片的大小
Hadoop默认的输入格式是TextInputFormat,他里边定义了文件读取的方式和分片的方式。我们打开他的源文件(org.apache.hadoop.mapreduce.lib.input包中):
?
通过源代码,我们发现TextInputFormat继承了FileInputFormat,而在TextInputFormat中,我们并没有发现具体的进行文件切分的部分,TextInputFormat应该是采用了FileInputFormat默认的InputSplit方法。因此,我们打开FileInputFormat的源代码,在其中发现:
?
如上我们可以看到,Hadoop在这里实现了对mapred.min.split.size和mapred.max.split.size的定义,且默认值分别为1和Long的最大。因此,我们在程序只需重新赋值给这两个值就可以控制InputSplit分片的大小了。
3.假如我们想要设置的分片大小为10MB
则我们可以在MapReduce程序的驱动部分添加如下代码:
?
map inputsplit hadoop
前言:在具体执行Hadoop程序的时候,我们要根据不同的情况来设置Map的个数。除了设置固定的每个节点上可运行的最大map个数外,我们还需要控制真正执行Map操作的任务个数。
1.如何控制实际运行的map任务个数
我们知道,文件在上传到Hdfs文件系统的时候,被切分成不同的Block块(默认大小为64MB)。但是每个Map处理的分块有时候并不是系统的物理Block块大小。实际处理的输入分块的大小是根据InputSplit来设定的,那么InputSplit是怎么得到的呢?
?
2.如何控制每个split分片的大小
Hadoop默认的输入格式是TextInputFormat,他里边定义了文件读取的方式和分片的方式。我们打开他的源文件(org.apache.hadoop.mapreduce.lib.input包中):
?
?
3.假如我们想要设置的分片大小为10MB
则我们可以在MapReduce程序的驱动部分添加如下代码:
?
相关文章推荐
- iOS开发音频播放基础——AVAudioPlayer的应用
- LeetCode Delete Node in a Linked List 链表
- 【剑指offer】-从尾到头打印链表
- 阿里投资Magic Leap 是美酒还是毒药?
- hdu 1175 连连看问题
- win7忘记密码不用工具进入
- 楼道声光控工作原理
- 关于jquery 如何判断checkbox 是否选中
- hdu 4353
- Freescale KL02 freedom board KL02 FRDM quick start快速上手
- Codeforces Round #327 (Div. 1) D. Top Secret Task
- 记录——《C Primer Plus (第五版)》第十章编程练习第二题
- Android问题集锦之四十五:undefined reference to 'srand'
- IIS部署错误-拒绝访问 CS0016
- 导弹拦截<DP><贪心><C++>
- ASP.NET中防止页面多次加载的IsPostBack属性
- HDOJ Secrete Master Plan (求矩阵翻转是否和给定矩阵相同)
- 实验三 二叉树的基本操作(建立)及遍历
- 实验三 二叉树的基本操作(建立)及遍历
- hadoop1.2.1 MultipleOutputs将结果输出到多个文件或文件夹