我有一个Hive表,在HDFS上有1000个文件,每个文件约为128m(一个HDFS块为128m)。当我从此表中选择"计数(1)"时,它将总共运行1000个映射器,这是可以的。
让事情不好的是,这个蜂巢查询将尝试尽可能多地启动尽可能多的映射器,鉴于群集资源可用(当然最多只有1000个)。
这确实很糟糕和丑陋,因为它可能同时占据太多资源,留下其他应用程序没有资源可以使用并必须等待。
我的问题是如何控制同时运行的最大映射器?
也就是说,例如,对于1000个映射器,随时随地,最多有100个映射器同时运行,因此它不会同时占据太多资源(Spark具有--num-executors and --executor-cores
参数具有这样的控制)
在Hadoop 2.7.0起,MapReduce提供了两个配置选项来实现这一目标:
-
mapreduce.job.running.map.limit
(默认值:0,无限制) -
mapreduce.job.running.reduce.limit
(默认值:0,无限制)
MapReduce-5583:能够限制运行地图并减少任务