从hadoop框架与MapReduce模式中谈海量数据处理
废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数据:从HDFS读取数据 1、问题:读取数据产生多少个Mapper?? Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟机的,过多的Mapper创建和初始化及关闭虚拟机都会消耗大量的硬件资源; Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源; 2 、 Mapper 数量由什么决定?? ( 1 ) 输入文件数目 ( 2 ) 输入文件的大小 ( 3 ) 配置参数 这三个因素决定的。 涉及参数: mapreduce.input.fileinputformat.split.minsize //启动map最小的split size大小,默认0 mapreduce.input.fileinputformat.split.maxsize //启动map最大的split size大小,默认256M dfs.block.size//block块大小,默认64M 计算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize)); 例如 默认情况下:例如一个文件800M,Block大小是128M,那么Mapper数目就是7个。6个Mapper处理的数据是128M,1个Mapper处理的数据是32M