mapreduce 之中map的数目:
mapreduce 会将输入的数据进行切片,切片的数目,就是决定了map的数目。
InputFormat 的格式 使用 TextInputFormat 为例:
1:文件本身的大小 小于 hadoop 的block 的配置大小,那么对应一个文件 启动一个map
(如果小文件过多的话,那么导致map的数目过多。)
2: 文件本身的大小大于 hadoop 的 block 的配置大小,按照文件切片算法进行切片,
有几个切片,就会启动几个Map
TextInputFormat 切片数目计算的算法:
使三个数值之中取中值的算法。
主要的三个参数是:
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize
还有就是 hadoop 集群配置的 block 的大小。
进行切片的时候,按照这三个参数之中的 第二大的数值,来作为一个文件切片的大小标准。
然后 输入的数据的大小 / 文件切片的大小 就是可以得到 文件切片的数目。
一个简单的demo
设置的数值的默认的单位是字节。
mapreduce 之中 reduce数目:
setNumReduceTasks() 可以用来设置 reduce的个数。
简单的小问题:
map的数目 是越多越好吗? 答案是不是。
因为map数目太多的话,就是可能会造成map任务的启动所需要的时间 占据了
整个程序运行的大部分的时间,这样的话,反而得不偿失了。
reduce的数目 也不是越多越好。