
# 配置HDFS多路读
该章节仅适用于MRS 3.3.1及之后版本。
#### 操作场景
在传统的HDFS中，当客户端请求读取数据时，它会与NameNode交互以确定数据块所在的DataNodes，并选择其中一个进行连接和数据传输。如果所选DataNode的响应速度较慢或者发生故障，客户端必须等待一段时间后才会尝试从其他副本中获取数据，将会导致读取延迟。开启多路读能够提高HDFS在高延迟网络环境中的可靠性，主要体现在以下方面：
- 降低读取延迟：通过同时从多个数据节点读取相同的数据块来降低总体读取时间。
- 适应网络变化：在网络条件不稳定或部分节点出现性能问题时，提高客户端的读取效率。
 
#### 对系统的影响
- 多路读会增加网络流量和CPU使用率，由于需要处理更多的连接和请求，需要根据现网硬件及作业情况实际调整。例如：默认三副本的情况下启用多路读，组件内存至少需要设置为已有的三倍。
- 磁盘IO负载高的情况下（业务高峰期磁盘整体IO使用率大于50%以上），开启多路读可能导致磁盘处理能力不足而性能劣化。
 
#### 操作步骤
1. 登录FusionInsight Manager页面。
2. 选择"集群 \> 服务 \> HDFS \> 配置 \> 全部配置"进入HDFS全部配置页面。
3. 搜索"hdfs.hdfs-site.customized.configs"参数，增加如下自定义参数，参数值根据实际需求进行配置。 
   
   | 参数名称                                    | 参数说明                                | 取值范围  |
   |:---|:---|:---|
   | dfs.client.hedged.read.threshold.millis | 客户端在决定是否启动对冲读取之前等待第一个数据块的第一个字节的毫秒数。 | 大于等于0 |
   | dfs.client.hedged.read.threadpool.size  | 多路读取线程池的大小。设置等于0时不启用多路读功能。          | 大于等于0 |
      
   
   
4. 参数修改后保存配置。
5. 在HDFS"实例"界面，勾选所有DataNode实例，选择"更多 \> 滚动重启实例"，等待滚动重启完成生效。
 
