数据切片机制
----首先说一下数据切片和数据块的区别:数据切片是在逻辑上对数据进行分片,并不改变数据的存储方式。一个mr任务的map阶段的并行度是由客户端提交job时的切片数决定的。一个切片一个maptask处理,而数据库是在物理上把数据分成一片一片的。
----再说一下他们的大小,数据块的大小是128MB,这个是由磁盘传输效率所控制的。而数据切片的数据大小一般和数据块的大小是一样的。这是因为有这么一个yarn优先原则:yarn会尽量在数据块的本地启动map task,若切片大小和数据块大小不一致,或许数据处理速度会提升,但是会产生网络传输,得不偿失。所以数据切片默认和数据库的大小一致。
----总结:
--------分块:指的是文件在HDFS上的存储,将要存储的数据分成一块又一块,然后放在HDFS上存储;
--------切片:指的是MapReduce阶段的FileInputFormat阶段对于数据块的切片,默认的切片大小是块大小。
切片源码解析
----FileInputFormat切片流程大概是这样的:首先找到你数据存储的目录,然后遍历这个目录下的所有文件,对文件做处理:先获取文件大小,再计算切片大小,然后按照切片大小对文件进行for循环切分(里面调用了makesplit 这么一个方法),每次切分时,都要判断切完