
# 多CPU内核下的MapReduce调优配置
#### 操作场景
当CPU内核数很多时，如CPU内核为磁盘数的3倍时的调优配置。
#### 操作步骤
以下参数有如下两个配置入口：
- 服务器端配置 进入Yarn服务参数"全部配置"界面，在搜索框中输入参数名称。具体操作请参考[修改集群服务配置参数](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2125.html)章节。
  
- 客户端配置
  直接在客户端中修改相应的配置文件。
  ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
  - HDFS客户端配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/hdfs-site.xml。
  
  
  
  - Yarn客户端配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/yarn-site.xml。
  
  
  
  - MapReduce客户端配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。
    
表1多CPU内核设置 
| **配置**   | **参数**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 配置描述                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| 节点容器槽位数  | yarn.nodemanager.resource.memory-mb - 参数解释：节点上YARN可使用的物理内存总量。单位：M。  - 默认值： MRS 3.x之前版本： 8192 MRS 3.x及之后版本： 16384   - 参数入口： MRS 3.x之前版本：需要在MRS控制台上进行配置。 MRS 3.x及之后版本：需要在FusionInsight Manager系统进行配置。    | - 参数配置组合决定了每节点任务(map、reduce)的并发数。  - 如果所有的任务（map/reduce）需要读写数据至磁盘，多个进程将会同时访问一个磁盘。这将会导致磁盘的IO性能非常低下。为了改善磁盘的性能，请确保客户端并发访问磁盘的数不大于3。  - 最大并发的container数量应该为\[2.5 \* Hadoop中磁盘配置数 \]。   |
| 节点容器槽位数  | mapreduce.map.memory.mb - 参数解释：map任务的内存限制。单位：MB。  - 默认值：4096  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。                                                                                                                                                                                                                                                                              | - 参数配置组合决定了每节点任务(map、reduce)的并发数。  - 如果所有的任务（map/reduce）需要读写数据至磁盘，多个进程将会同时访问一个磁盘。这将会导致磁盘的IO性能非常低下。为了改善磁盘的性能，请确保客户端并发访问磁盘的数不大于3。  - 最大并发的container数量应该为\[2.5 \* Hadoop中磁盘配置数 \]。   |
| 节点容器槽位数  | mapreduce.reduce.memory.mb - 参数解释：Reduce任务的内存限制。单位：MB。  - 默认值：4096  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。                                                                                                                                                                                                                                                                         | - 参数配置组合决定了每节点任务(map、reduce)的并发数。  - 如果所有的任务（map/reduce）需要读写数据至磁盘，多个进程将会同时访问一个磁盘。这将会导致磁盘的IO性能非常低下。为了改善磁盘的性能，请确保客户端并发访问磁盘的数不大于3。  - 最大并发的container数量应该为\[2.5 \* Hadoop中磁盘配置数 \]。   |
| Map输出与压缩 | mapreduce.map.output.compress - 参数解释：指定了Map任务输出结果可以在网络传输前被压缩。这是一个per-job的配置。  - 默认值：true  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。                                                                                                                                                                                                                                                  | - Map任务所产生的输出可以在写入磁盘之前被压缩，这样可以节约磁盘空间并得到更快的写盘速度，同时可以减少至Reducer的数据传输量。需要在客户端进行配置。  - 在这种情况下，磁盘的IO是主要瓶颈。所以可以选择一种压缩率非常高的压缩算法。  - 编解码器可配置为Snappy，Benchmark测试结果显示Snappy是非常平衡以及高效的编码器。              |
| Map输出与压缩 | mapreduce.map.output.compress.codec - 参数解释：指定用于压缩的编解码器。  - 默认值：org.apache.hadoop.io.compress.Lz4Codec  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。                                                                                                                                                                                                                                        | - Map任务所产生的输出可以在写入磁盘之前被压缩，这样可以节约磁盘空间并得到更快的写盘速度，同时可以减少至Reducer的数据传输量。需要在客户端进行配置。  - 在这种情况下，磁盘的IO是主要瓶颈。所以可以选择一种压缩率非常高的压缩算法。  - 编解码器可配置为Snappy，Benchmark测试结果显示Snappy是非常平衡以及高效的编码器。              |
| Spills   | mapreduce.map.sort.spill.percent - 参数解释：序列化缓冲区中的软限制。一旦达到该限制，线程将在后台开始将内容溢出到磁盘。  - 默认值：0.8  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/mapred-site.xml。                                                                                                                                                                                                                                                  | 磁盘IO是主要瓶颈，合理配置"mapreduce.task.io.sort.mb"可以使溢出至磁盘的内容最小化。                                                                                                                                                                                                                                                                                                                                                        |
| 数据包大小    | dfs.client-write-packet-size - 参数解释：配置项可以指定该数据包的大小。可以通过每个job进行指定。  - 默认值：262144  - 参数入口：需要在客户端进行配置，配置文件路径：*客户端安装目录*/HDFS/hadoop/etc/hadoop/hdfs-site.xml。                                                                                                                                                                                                                                                         | - 当HDFS客户端写数据至数据节点时，数据会被累积，直到形成一个包。这个数据包会通过网络传输。  - 数据节点从HDFS客户端接收数据包，然后将数据包里的数据单线程写入磁盘。当磁盘处于并发写入状态时，增加数据包的大小可以减少磁盘寻道时间，从而提升IO性能。  - dfs.client-write-packet-size = 262144         |
   
