HDFS异步EditLog性能测试
2021-09-04 本文已影响0人
xudong1991
测试环境
一共使用3台现网机器搭建 HA 环境,配置如下,另外,NN、JN 的 JVM 参数也和现网保持一致。
项目 | 数值 |
---|---|
CPU | 96 核 AMD EPYC 7K62 |
内存 | 256G |
磁盘 | 3.6TB X 12块 |
网卡 | 50Gb(由两块 25Gb 的物理网卡聚合而成) |
NN handler count | 256 |
NN Reader count | 4 |
NN EditLog 目录、JN EditLog 目录 | 务必配置在不同的磁盘,减少互相影响 |
Hadoop 版本 | hadoop-2.8.5-tq-0.1.0.tar.gz |
开启/关闭 EditLog Async Write 特性
在 NN 侧,使用如下配置开启或关闭 NN 异步 EditLog 特性(目前该特性默认开启):
<property>
<name>dfs.namenode.edits.asynclogging</name>
<value>true</value>
</property>
测试1:单线程写,串行 create+close 创建30W个文件
场景 | 总耗时(s) | 单次 create + close 平均耗时(ms) |
---|---|---|
EditLog 同步写 | 318.339 | 1.06 |
EditLog 异步写 | 294.353 | 0.98 |
异步写相比于同步写性能 | +7% | +7% |
测试2:多线程写, 200线程并发 create+close 创建 3000W 个文件
场景 | 总耗时(min) | 单次 create + close 平均耗时(ms) |
---|---|---|
EditLog 同步写 | 50.42 | 0.101 |
EditLog 异步写 | 46.51 | 0.093 |
异步写相比于同步写 | +7% | +7% |
测试3:混合读写, 50线程并发 create+close 创建1500W 个文件+100线程并发 open+close 读取6000W 次文件
这个测试模拟了一个极高负载的现网集群典型的一小时 NN RPC 吞吐量,即:
- 总 RPC 处理量:7500W 左右。
- 读写比例 8:2 左右。
场景 | 总耗时(min) |
---|---|
EditLog 同步写 | 44.14 |
EditLog 异步写 | 41.63 |
异步写相比于同步写 | +5.7% |
测试结论
- 该特性可将 NameNode 的处理能力提升 6%-7% 左右。
- 该特性值得合入低版本 Hadoop,相关的 patch 主要有:
- HADOOP-10300. Allowed deferred sending of call responses.
- HADOOP-12483. Maintain wrapped SASL ordering for postponed IPC responses.
- HDFS-7964. Add support for async edit logging.
- HDFS-10183. Prevent race condition during class initialization.
- HDFS-10722. Fix race condition in TestEditLog#testBatchedSyncWithClosedLogs.
- HDFS-12603. Enable async edit logging by default.
- HDFS-13051. Fix dead lock during async editlog rolling if edit queue is full.
- HDFS-15175. Multiple CloseOp shared block instance causes the standby namenode to crash when rolling editlog.