首页 > 解决方案 > 如何控制一个 Hive 查询同时启动的最大容器数

问题描述

我有一个 Hive 表,在 HDFS 上有 1000 个文件,每个文件大约 128M(一个 HDFS 块是 128M)。当我从这个表中运行 select count(1) 时,它将总共运行 1000 个映射器,这没关系。

糟糕的是,考虑到集群资源可用(当然最多 1000 个),此 Hive 查询将尝试同时启动尽可能多的映射器。

这真的很糟糕很丑陋,因为它可能同时占用太多资源,让其他应用程序没有资源可以使用,不得不等待。

我的问题是如何控制同时运行的最大映射器?

也就是比如1000个mapper,任何时候最多有100个mapper同时运行,这样就不会同时占用太多资源(Spark就是有--num-executors and --executor-cores参数控制的)

标签: hadoophivehadoop-yarn

解决方案


从 Hadoop 2.7.0 开始,MapReduce 提供了两个配置选项来实现这一点:

  • mapreduce.job.running.map.limit(默认值:0,无限制)
  • mapreduce.job.running.reduce.limit(默认值:0,无限制)

MAPREDUCE-5583:能够限制运行 map 和 reduce 任务


推荐阅读