关于MapReduce中的切片机制

MapReduce的每一个Spilt都回提交给一个Job 最后都有一个Client
关于Spilt
将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分成逻辑上的多个split),然后每一个split分配一个mapTask并行实例处理
这段逻辑及形成的切片规划描述文件,由FileInputFormat实现类的getSplits()方法完成,切片定义在InputFormat类中的getSplit()方法
在这个方法里面 会获得很多参数(我们的文件参数)形成一个job.xml文件。
自己观察跟踪源码后的理解 能力有限
1.在这里有一个需要提一下的关于如何切片的:
比如文件大小是260M
如果一个切片的大小的块是128M,按照我们之前学的是先将260M 分出一个128M,也就是还剩下132M。此时 剩下的132M 里面会在去分128M 和最后一个4M 作为一个独立的Spilt。也就是分了三个块,第一个是128M,第二个是128M,第三个4M
2.但是通过跟踪源码 却不是这样的:
第一次获得块的大小128M,通过一个While(文件的大小/128>1.1)?为真就切一个块为128M的。如果不为真就将剩下的放在一起,作为一个独立的Spilt。
比如文件大小260M,每一个块大小分为128M。过程:(260/128=2.03>1.1?) 此时切128M 剩下132M(132/128=1.03>1.1?)此时不大于 所以 将132M 放在一个切片。也就是实际是将260M 分成了两个Spilt 一个是128M 一个是132M

你可能感兴趣的:(大数据,hadoop,mapreduce)