测试环境
一共使用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.
网友评论