diff --git a/hadoop-hdds/docs/content/feature/Topology.zh.md b/hadoop-hdds/docs/content/feature/Topology.zh.md new file mode 100644 index 000000000000..a366e3a2473c --- /dev/null +++ b/hadoop-hdds/docs/content/feature/Topology.zh.md @@ -0,0 +1,108 @@ +--- +title: "拓扑感知能力" +weight: 2 +menu: + main: + parent: 特性 +summary: 机架感知配置可以提高读/写性能 +--- + + +Ozone可以使用拓扑相关信息(例如机架位置)来优化读写管道。要获得完全的机架感知集群,Ozone需要三种不同的配置。 + + 1. 拓扑信息应由 Ozone 配置。 + 2. 当Ozone为特定管道/容器选择3个不同的数据节点时,拓扑相关信息就会被使用.(写入) + 3. 当Ozone读取一个Key时,它应该优先从最近的节点读取。 + + + +## 拓扑层次结构 + +拓扑层次结构可使用 net.topology.node.switch.mapping.impl 配置键进行配置。此配置应定义 org.apache.hadoop.net.CachedDNSToSwitchMapping 的实现。由于这是一个 Hadoop 类,因此该配置与 Hadoop 配置完全相同。 + +### 静态列表 + +静态列表可借助 ```TableMapping``` 进行配置:: + +```XML + + net.topology.node.switch.mapping.impl + org.apache.hadoop.net.TableMapping + + + net.topology.table.file.name + /opt/hadoop/compose/ozone-topology/network-config + +``` + +第二个配置选项应指向一个文本文件。文件格式为两列文本文件,各列之间用空格隔开。第一列是 IP 地址,第二列指定地址映射的机架。如果找不到与集群中主机相对应的条目,则会使用 /default-rack。 + +### 动态列表 + +机架信息可借助外部脚本识别: + + +```XML + + net.topology.node.switch.mapping.impl + org.apache.hadoop.net.ScriptBasedMapping + + + net.topology.script.file.name + /usr/local/bin/rack.sh + +``` + +如果使用外部脚本,则需要在配置文件中使用 net.topology.script.file.name 参数来指定。与 java 类不同,外部拓扑脚本不包含在 Ozone 发行版中,而是由管理员提供。Fork 拓扑脚本时,Ozone 会向 ARGV 发送多个 IP 地址。发送给拓扑脚本的 IP 地址数量由 net.topology.script.number.args 控制,默认为 100。如果将 net.topology.script.number.args 改为 1,则每个提交的 IP 地址都会Fork一个拓扑脚本。 + +## 写入路径 + +CLOSED容器放置可以通过 `ozone.scm.container.placement.impl` 配置键进行配置。 可用的容器放置策略可在 `org.apache.hdds.scm.container.placement` 包中找到。[包](https://github.com/apache/ozone/tree/master/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/algorithms). + +默认情况下, CLOSED容器使用 `SCMContainerPlacementRandom` 放置策略,该策略不支持拓扑感知。为了启用拓扑感知,可配置 `SCMContainerPlacementRackAware` 作为CLOSED容器放置策略: + +```XML + + ozone.scm.container.placement.impl + org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementRackAware + +``` + +这种放置策略符合 HDFS 中使用的算法。在默认的 3 个副本中,两个副本位于同一个机架上,第三个副本位于不同的机架上。 + +这种实现方式适用于"/机架/节点 "这样的网络拓扑结构。如果网络拓扑结构的层数较多,则不建议使用此方法。 + +## 读取路径 + +最后,读取路径也应配置为从最近的 pipeline 读取数据。 + +```XML + + ozone.network.topology.aware.read + true + +``` + +## 参考文献 + + * 关于 `net.topology.node.switch.mapping.impl` 的 Hadoop 文档: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/RackAwareness.html + * [设计文档]({{< ref path="design/topology.md" lang="en">}}) \ No newline at end of file