Hive 如何减少查询中的容器数

Hive 如何减少查询中的容器数,hive,mapreduce,ambari,apache-tez,Hive,Mapreduce,Ambari,Apache Tez,我有一个查询,使用了太多的容器和太多的内存。(所用内存的97%)。 有没有办法设置查询中使用的容器数量并限制最大内存? 查询正在Tez上运行 提前感谢您控制地图绘制者的数量: 映射器的数量取决于各种因素,例如数据在节点之间的分布方式、输入格式、执行引擎和配置参数。另见 MR使用CombineInputFormat,而Tez使用分组拆分 泰兹: 增加这些数字以减少正在运行的映射程序的数量 此外,映射器在数据所在的数据节点上运行,这就是为什么手动控制映射器的数量不是一项容易的任务,也不总是能够组合输

我有一个查询,使用了太多的容器和太多的内存。(所用内存的97%)。 有没有办法设置查询中使用的容器数量并限制最大内存? 查询正在Tez上运行


提前感谢您控制地图绘制者的数量:

映射器的数量取决于各种因素,例如数据在节点之间的分布方式、输入格式、执行引擎和配置参数。另见

MR使用CombineInputFormat,而Tez使用分组拆分

泰兹:

增加这些数字以减少正在运行的映射程序的数量

此外,映射器在数据所在的数据节点上运行,这就是为什么手动控制映射器的数量不是一项容易的任务,也不总是能够组合输入


控制减速器的数量:

减速器的数量根据

mapreduce.job.reduces
  • 每个作业的默认减少任务数。通常设置为接近可用主机数量的基本值。当
    mapred.job.tracker
    为“本地”时忽略。Hadoop默认设置为1,而Hive使用-1作为默认值。通过将此属性设置为-1,Hive将自动计算出缩减器的数量
hive.exec.reducers.bytes.per.reducer
-hive 0.14.0及更早版本中的默认值为1 GB

另外
hive.exec.reducers.max
-将使用的最大还原器数量。如果
mapreduce.job.reduces
为负值,则在自动确定还原器数量时,Hive将使用该值作为最大还原器数量

只需设置
hive.exec.reducers.max=
即可限制正在运行的还原程序的数量

如果要增加reducers并行性,请增加hive.exec.reducers.max并减少hive.exec.reducers.bytes.per.reducer

默认设置意味着实际的
Tez
任务将使用映射器的内存设置:

hive.tez.container.size = mapreduce.map.memory.mb
hive.tez.java.opts = mapreduce.map.java.opts
有关更多详细信息,请阅读以下内容:

我建议首先优化查询。如果可能的话,使用映射联接,使用矢量化执行,添加
按分区键分发
,如果您正在编写分区表,以减少减速机上的内存消耗,当然也可以编写好的sql

set tez.am.resource.memory.mb=8192;
set tez.am.java.opts=-Xmx6144m;
set tez.reduce.memory.mb=6144;
set hive.tez.container.size=9216;
set hive.tez.java.opts=-Xmx6144m;
hive.tez.container.size = mapreduce.map.memory.mb
hive.tez.java.opts = mapreduce.map.java.opts