我有一个Hive表,在HDFS上有1000个文件,每个文件大约128M(一个HDFS块是128M)。当我从这个表中运行select count(1)时,它总共会运行1000个映射器,这没关系。
让事情变得糟糕的是,如果群集资源可用(当然最多1000个),此Hive查询将尝试在同一时间启动尽可能多的映射器。
这非常糟糕和丑陋,因为它可能同时占用太多资源,让其他应用程序无需使用资源,必须等待。
我的问题是如何控制同时运行的最大映射器?
也就是说,例如,对于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: Ability to limit running map and reduce tasks