数据切片和MapTask并行度决定机制
数据块:Block是HDFS物理上把数据分成一块一块。
数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。
所以数据块和数据切片是两种程度上的概念。
数据切片的数量 = MapTask的数量(也就是说,一个数据切片就产生一个MapTask)
然而,如果数据切片和数据块大小不一致的话,MapTask在并行计算时,就可能要调用不同的DataNode来获取一个完整的MapTask,这是由于数据切片和数据块的大小不一致导致的。所以为了方便提高I/O流以及内存使用效率,默认情况下数据切片大小=数据块的大小。
切片时不考虑数据整体,而是逐个针对每一个文件进行切片。
同时,一个Job的Map阶段的并行度,是由客户端在提交Job时的切片数决定的。