---
title: 组件参数配置
description: "如果需要修改参数，Ambari通常可以通过集群网页进行操作。以Yarn组件为例，只需单击右侧需修改参数的Yarn组件，然后进入其“CONFIGS”页签，在“CONFIGS”页签中找到“SETTING”和“ADVANCED”，即可找到所需参数并进行修改，如图1所示。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/HBase/topic_0226837059.html
sourcePath: /source/zh/kunpengbds/ecosystemEnable/HBase/topic_0226837059.html
indexId: 3fa8cccdc234172f22fbeff37e626e0e0a5928df7318ef619a955f6fb5eae48265
---
# 组件参数配置

#### Web配置

如果需要修改参数，Ambari通常可以通过集群网页进行操作。以Yarn组件为例，只需单击右侧需修改参数的Yarn组件，然后进入其“CONFIGS”页签，在“CONFIGS”页签中找到“SETTING”和“ADVANCED”，即可找到所需参数并进行修改，如图1所示。

图1 Yarn组件的CONFIGS页签

当要修改具体的参数的时候，主要分两种情况，第一种对于参数原本就在网页设置了初始值的，只需要在“CONFIGS”页面的搜索栏直接搜索、修改即可，例如修改Yarn中的yarn.nodemanager.resource.cpu-vcores，只需要在搜索框搜索yarn.nodemanager.resource.cpu-vcores，单击修改按钮，并设置对应的参数即可。

图2 设置了初始值的参数修改

第二种对于原本页面上没有设置初始值的参数，例如yarn.nodemanager.numa-awareness.enabled这一参数，就需要在对应组件的Custom yarn-site中手动添加（其余组件需要手动添加的也是在对应的Custom ***-site文件中）。

图3 没有设置初始值的参数修改

具体的各个组件的参数设置如表1所示。


**表1 各组件的参数名称、含义和修改建议**

| 组件 | 参数名 | 推荐值 | 修改原因 |
| --- | --- | --- | --- |
| Yarn \->NodeManager Yarn \->ResourceManager | ResourceManager Java heap size | 1024 | 修改JVM内存大小，保证内存水平较高，减少GC的频率。 说明： 非固定值，需要根据GC的释放情况来调大或调小Xms及Xmx的值。 |
| Yarn \->NodeManager Yarn \->ResourceManager | NodeManager Java heap size | 1024 | 修改JVM内存大小，保证内存水平较高，减少GC的频率。 说明： 非固定值，需要根据GC的释放情况来调大或调小Xms及Xmx的值。 |
| Yarn \->NodeManager | yarn.nodemanager.resource.cpu\-vcores | 鲲鹏计算平台48核环境推荐值48。 | 可分配给Container的CPU核数。 |
| Yarn \->NodeManager | yarn.nodemanager.resource.memory\-mb | 与实际数据节点物理内存总量相等。 | 可分配给Container的内存。 |
| Yarn \->NodeManager | yarn.nodemanager.numa\-awareness.enabled | True | NodeManager启动Container时的NUMA感知。 |
| Yarn \->NodeManager | yarn.nodemanager.numa\-awareness.read\-topology | True | NodeManager的NUMA拓扑自动感知。 |
| MapReduce2 | mapreduce.map.memory.mb | 7168 | 一个Map Task可使用的内存上限。 |
| MapReduce2 | mapreduce.reduce.memory.mb | 14336 | 一个Reduce Task可使用的资源上限。 |
| MapReduce2 | mapreduce.job.reduce.slowstart.completedmaps | 0.35 | 当Map完成的比例达到该值后才会为Reduce申请资源。 |
| HDFS \->NameNode | NameNode Java heap size | 3072 | 修改JVM内存大小，保证内存水平较高，减少GC的频率。 说明： 非固定值，需要根据GC的释放情况来调大或调小Xms及Xmx的值。 |
| HDFS \->NameNode | NameNode new generation size | 384 | 修改JVM内存大小，保证内存水平较高，减少GC的频率。 说明： 非固定值，需要根据GC的释放情况来调大或调小Xms及Xmx的值。 |
| HDFS \->NameNode | NameNode maximum new generation size | 384 | 修改JVM内存大小，保证内存水平较高，减少GC的频率。 说明： 非固定值，需要根据GC的释放情况来调大或调小Xms及Xmx的值。 |
| HDFS \->DataNode | dfs.datanode.handler.count | 512 | DataNode服务线程数，可适量增加。 |
| HDFS \->NameNode | dfs.namenode.service.handler.count | 32 | NameNode RPC服务端监测DataNode和其他请求的线程数，可适量增加。 |
| HDFS \->NameNode | dfs.namenode.handler.count | 1200 | NameNode RPC服务端监测客户端请求的线程数，可适量增加。 |
| TEZ | tez.am.resource.memory.mb | 7168 | 等同于yarn.scheduler.minimum\-allocation\-mb，默认7168。 |
| TEZ | tez.runtime.io.sort.mb | 1892MB | 设置为40%\*hive.tez.container.size，一般不超过2G。 |
| TEZ | tez.am.container.reuse.enabled | true | Container重用开关。 |
| TEZ | tez.runtime.unordered.output.buffer.size\-mb | 537 | 10%\* hive.tez.container.size。 |
| TEZ | tez.am.resource.cpu.vcores | 10 | 使用的虚拟CPU数量，默认1，需要手动添加。 |
| TEZ | tez.container.max.java.heap.fraction | 0.85 | 基于Yarn提供的内存，分配给Java进程的百分比，默认是0.8，需要手动添加。 |


#### 客户端配置

以下是针对TPC-DS的99条SQL查询的Hive通用参数调优建议，仅列出需要修改的调优参数，调优建议如表2所示。


**表2 TPC-DS的99条SQL查询的调优参数建议**

| 参数名称 | 参数含义 | 建议取值 |
| --- | --- | --- |
| hive.execution.engine | 指定Hive的查询执行引擎为Tez。若不配置，Hive默认使用MapReduce，适合简单任务，但复杂任务性能较差。 | tez |
| hive.cbo.enable | 启用成本优化器。CBO会根据表的统计信息（如数据量、字段基数和数据分布）计算“最优执行计划”（如选择Join顺序、Join类型），而非依赖固定规则。 | TRUE |
| hive.exec.compress.intermediate | 启用中间数据压缩。减少中间数据的磁盘占用和网络传输量，提升任务速度。 | TRUE |
| hive.exec.reducers.max | 指定Hive任务的最大Reduce数量。Reduce数量决定了聚合/Join任务的并发度：数量过少会导致单个Reduce处理数据量过大（任务慢、OOM）；数量过多会导致小文件过多、资源碎片化； | 500 |
| hive.map.aggr | 启用Map端聚合，对聚合类查询（如GROUP BY），在Map端先对局部数据做聚合（如先统计每个Map内的“用户数”），再将聚合结果发送到Reduce端，减少Reduce端的数据量，降低网络IO；适合数据重复率高的场景。 | TRUE |
| hive.vectorized.execution.enabled | 启用向量执行，从逐行处理数据改为批量处理数据，减少CPU的指令开销，提升计算效率。仅支持ORC文件格式和部分算子（如过滤、聚合、Join），非ORC表无法享受该优化。 | TRUE |
| hive.auto.convert.join | 启用自动转换Join类型。Hive会根据表的大小自动选择最优Join策略： 小表 + 大表：自动转为MapJoin（小表加载到Map端内存，避免Reduce端Join，减少网络IO）。 大表 + 大表：保留Reduce端Join。 | TRUE |
| hive.auto.convert.join.noconditionaltask | 启用 无条件任务的Join合并。当多个MapJoin（如3个小表 + 1个大表）可以合并为一个任务执行时，Hive会自动合并，避免创建多个独立的MapJoin任务。 | TRUE |
| hive.cli.tez.session.async | 禁用Hive CLI的Tez会话异步模式。当Hive CLI提交Tez任务时，异步模式”会让CLI立即返回（任务在后台执行），同步模式会让CLI等待任务结束，实时显示任务日志。 | FALSE |
| hive.tez.container.size | 指定Tez任务的容器内存大小（单位：MB）。 | 7168 |
| tez.am.resource.memory.mb | 指定Tez的AM内存大小（单位：MB）。 | 7168 |
| tez.task.resource.memory.mb | 指定Tez的单个Task（任务）内存大小（单位：MB）。 | 7168 |
| tez.am.container.reuse.enabled | 启用Tez AM容器复用。默认情况下，每个Tez任务会创建一个新的AM容器，任务结束后销毁；启用复用后，同一个用户的多个Tez任务可复用同一个AM容器； | TRUE |


修改$HIVE_HOME/conf/hive-site.xml，或在hive命令行中设置，或在查询语句前添加以下参数。

- 方式一：修改$HIVE_HOME/conf/hive-site.xml配置文件。
这种方式配置的参数需要重启Hive才能生效。


  1. 在hive-site.xml配置文件中配置目标参数的值。示例：配置“hive.execution.engine”的参数值为“tez”。

```
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
```


  2. 重启Hive。
- 方式二：在hive命令行中设置。
这种方式配置的参数退出会话后失效。再次进入会话需重新设置。


  1. 登录hive命令行。

```
hive
```


  2. 逐条执行set命令。示例：配置“hive.execution.engine”的参数值为“tez”。

```
set hive.execution.engine=tez;
set hive.cbo.enable=true;
```


- 方式三：在查询语句前添加。
  这种方式仅针对您输入的查询语句生效。

  通过hive命令提交查询时，将参数作为命令行参数传入。示例：对SELECT * FROM your_table LIMIT 10语句配置“hive.execution.engine”的参数值为“tez”。

```
hive \
--hiveconf hive.execution.engine=tez \
--hiveconf hive.cbo.enable=true \
-e "SELECT * FROM your_table LIMIT 10;"
```
