測(cè)試環(huán)境
一共使用10臺(tái)現(xiàn)網(wǎng)機(jī)器,配置如下妹田,另外,NN鹃共、DN 的 JVM 參數(shù)也和現(xiàn)網(wǎng)保持一致鬼佣。
項(xiàng)目 |
數(shù)值 |
CPU |
96 核 AMD EPYC 7K62 |
內(nèi)存 |
256G |
磁盤(pán) |
3.6TB X 12塊 |
網(wǎng)卡 |
50Gb(由兩塊 25Gb 的物理網(wǎng)卡聚合而成) |
集群規(guī)模 |
1NN + 9DN |
NN handler count |
256 |
HDFS block Size |
128M |
HDFS 默認(rèn)副本數(shù) |
3 |
HDFS 最小副本數(shù) |
1 |
HDFS EC 策略 |
RS-6-3-1024k |
HDFS集群版本 |
hadoop-3.2.1 |
測(cè)試方法
設(shè)計(jì)多個(gè)場(chǎng)景,在每個(gè)場(chǎng)景下分別進(jìn)行讀寫(xiě)測(cè)試:
寫(xiě)測(cè)試霜浴,使用 TestDFSIO 連續(xù)串行寫(xiě)入100個(gè)大小為2GB的文件晶衷,統(tǒng)計(jì)結(jié)果,命令如下:
HADOOP_CLIENT_OPTS="-Xmx10G -Xms10G" bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5.jar TestDFSIO -write -nrFiles 100 -size 2GB
讀測(cè)試,使用 TestDFSIO 連續(xù)串行讀取100個(gè)大小為2GB的文件晌纫,統(tǒng)計(jì)結(jié)果税迷,命令如下:
HADOOP_CLIENT_OPTS="-Xmx10G -Xms10G" bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5.jar TestDFSIO -read -nrFiles 100 -size 2GB
注意:
- 每次執(zhí)行測(cè)試前,都需要執(zhí)行
sync && echo 3 > /proc/sys/vm/drop_caches
釋放文件系統(tǒng)緩存锹漱,保證多次測(cè)試的獨(dú)立性箭养。
- 針對(duì) EC 場(chǎng)景,需要分別統(tǒng)計(jì)使用 Java 編碼庫(kù)和 Intel ISA-L Native 編碼庫(kù)的性能表現(xiàn)哥牍。
- 下面測(cè)試結(jié)果中的 “耗時(shí)” 項(xiàng)指的是整個(gè) TestDFSIO 的執(zhí)行耗時(shí)(包括 MR 任務(wù)的提交毕泌、結(jié)果的分析等等),該耗時(shí)僅作參考嗅辣。真正的結(jié)果應(yīng)以 “平均 IO 速率” 這一項(xiàng)為準(zhǔn)撼泛。
使用 ISA-L Native 編碼庫(kù)的測(cè)試結(jié)果
正常寫(xiě)入場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
集群內(nèi)部3副本寫(xiě) |
部分本地寫(xiě) |
307.6 |
710.18 |
集群外部3副本寫(xiě) |
全部非本地寫(xiě) |
298.71 |
711 |
集群內(nèi)部EC寫(xiě) |
部分本地寫(xiě) |
283.63 |
735.47 |
集群外部EC寫(xiě) |
全部非本地寫(xiě) |
276.58 |
749.65 |
正常讀取場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
集群內(nèi)部3副本讀 |
構(gòu)造全部本地讀場(chǎng)景 |
1049.58 |
195.78 |
集群內(nèi)部3副本讀 |
構(gòu)造部分本地讀場(chǎng)景 |
1155.52 |
177.98 |
集群外部3副本讀 |
全部非本地讀 |
1188.55 |
172.94 |
集群內(nèi)部EC讀 |
部分本地讀,注意 EC 從原理上注定無(wú)法做到全部本地讀 |
253.48 |
819.19 |
集群外部EC讀 |
全部非本地讀 |
247.45 |
839.99 |
異常讀取場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
掛掉1個(gè) DN(但不 Dead)辩诞,集群外部3副本讀 |
全部非本地讀 |
1148.54 |
178.92 |
掛掉2個(gè) DN(但不 Dead),集群外部3副本讀 |
全部非本地讀 |
1171.56 |
175.81 |
掛掉1個(gè) DN(但不 Dead)纺涤,集群外部 EC 讀 |
全部非本地讀 |
242.47 |
857.24 |
掛掉2個(gè) DN(但不 Dead)译暂,集群外部 EC 讀 |
全部非本地讀 |
233.46 |
888.65 |
掛掉3個(gè) DN(但不 Dead),集群外部 EC 讀 |
全部非本地讀撩炊,掛掉3個(gè) DN 是 6+3 EC 所能容忍的極限情況 |
233.4 |
889.11 |
使用純 Java 編碼庫(kù)的測(cè)試結(jié)果
正常寫(xiě)入場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
集群內(nèi)部3副本寫(xiě) |
部分本地寫(xiě) |
307.6 |
710.18 |
集群外部3副本寫(xiě) |
全部非本地寫(xiě) |
298.71 |
711 |
集群內(nèi)部 EC 寫(xiě) |
部分本地寫(xiě) |
884.07 |
232.31 |
集群外部 EC 寫(xiě) |
全部非本地寫(xiě) |
898.12 |
228.77 |
正常讀取場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
集群內(nèi)部3副本讀 |
構(gòu)造全部本地讀場(chǎng)景 |
1049.58 |
195.78 |
集群內(nèi)部3副本讀 |
構(gòu)造部分本地讀場(chǎng)景 |
1155.52 |
177.98 |
集群外部3副本讀 |
全部非本地讀 |
1188.55 |
172.94 |
集群內(nèi)部 EC 讀 |
部分本地讀外永,注意 EC 從原理上注定無(wú)法做到全部本地讀 |
245.46 |
847.28 |
集群外部 EC 讀 |
全部非本地讀 |
238.48 |
871.69 |
異常讀取場(chǎng)景
場(chǎng)景 |
測(cè)試點(diǎn) |
耗時(shí)(s) |
平均IO速率(MB/s) |
掛掉1個(gè) DN(但不 Dead),集群外部3副本讀 |
全部非本地讀 |
1148.54 |
178.92 |
掛掉2個(gè) DN(但不 Dead)拧咳,集群外部3副本讀 |
全部非本地讀 |
1171.56 |
175.81 |
掛掉1個(gè) DN(但不 Dead)伯顶,集群外部 EC 讀 |
全部非本地讀 |
301.45 |
693.09 |
掛掉2個(gè) DN(但不 Dead),集群外部 EC 讀 |
全部非本地讀 |
439.48 |
481.91 |
掛掉3個(gè) DN(但不 Dead)骆膝,集群外部 EC 讀 |
全部非本地讀祭衩,掛掉3個(gè) DN 是 6+3 EC 所能容忍的極限情況 |
640.54 |
325.52 |
客戶端機(jī)器網(wǎng)絡(luò)帶寬使用率(僅測(cè)試使用 ISA-L 加速庫(kù)的情形)
場(chǎng)景 |
測(cè)試點(diǎn) |
客戶端網(wǎng)絡(luò)帶寬使用 |
集群外部3副本寫(xiě) |
全部非本地寫(xiě) |
5332.41 Mbps |
集群外部 EC 寫(xiě) |
全部非本地寫(xiě) |
9500.64 Mbps |
集群外部3副本讀 |
全部非本地讀 |
1431.67 Mbps |
集群外部 EC 讀 |
全部非本地讀 |
5565.13 Mbps |
客戶端進(jìn)程 CPU 使用率(僅測(cè)試使用 ISA-L 加速庫(kù)的情形)
注意:這里的 cpu 使用率使用 top -p $PID 統(tǒng)計(jì)得到,是所有 CPU 核的累加使用率阅签,對(duì)于一個(gè)96核的 CPU 來(lái)說(shuō)掐暮,該值最大可以到 9600%.
場(chǎng)景 |
測(cè)試點(diǎn) |
客戶端進(jìn)程 cpu 使用率 |
集群外部3副本寫(xiě) |
全部非本地寫(xiě) |
91.7% |
集群外部EC寫(xiě) |
全部非本地寫(xiě) |
227.5% |
集群外部3副本讀 |
全部非本地讀 |
14% |
集群外部EC讀 |
全部非本地讀 |
88% |
測(cè)試結(jié)論
- ISA-L Native 加速庫(kù)非常關(guān)鍵,如果沒(méi)有這個(gè)加速庫(kù)政钟,EC 寫(xiě)性能僅能達(dá)到副本寫(xiě)的 30% 左右路克。因此,下面所有的結(jié)論都針對(duì)使用 ISA-L 加速庫(kù)的情形养交。
- EC 會(huì)顯著增加客戶端機(jī)器的網(wǎng)絡(luò)帶寬和 CPU 消耗精算,以 6+3 為例,相比正常的3副本:
- 客戶端寫(xiě)入過(guò)程中碎连,理論上它的帶寬使用會(huì)增長(zhǎng)9倍灰羽,但受限于磁盤(pán)寫(xiě)入速度、交換機(jī)速度等因素,具體增長(zhǎng)程度可能較低谦趣,本次測(cè)試中增長(zhǎng)2倍疲吸。
- 客戶端讀取過(guò)程中,理論上它的帶寬使用會(huì)增長(zhǎng)6倍前鹅,同樣摘悴,受限于磁盤(pán)讀取速度、交換機(jī)速度等因素舰绘,具體增加程度可能較低蹂喻,本次測(cè)試中增長(zhǎng)4倍。
- 客戶端寫(xiě)入過(guò)程中捂寿,由于并發(fā)寫(xiě)入且需要計(jì)算 EC 校驗(yàn)值口四,其 CPU 使用率會(huì)顯著增長(zhǎng),本次測(cè)試中增長(zhǎng)7倍秦陋。
- 客戶端讀取過(guò)程中蔓彩,由于并發(fā)讀取,其 CPU 使用率也會(huì)顯著增長(zhǎng)驳概,本次測(cè)試中增長(zhǎng)6倍赤嚼。
- EC 并不會(huì)降低客戶端的 IO 速度,反而顺又,在其它關(guān)鍵要素都滿足的情況下(主要是 CPU 和 網(wǎng)絡(luò))更卒,EC 會(huì)提升 IO 速度,特別是顯著提升讀取速度稚照,以 6+3 為例:
- 客戶端寫(xiě)入過(guò)程中蹂空,雖然增加了計(jì)算校驗(yàn)值的步驟,但是在 ISA-L 的幫助下果录,這部分耗時(shí)并不多上枕,完全可以被之后的9倍并發(fā)寫(xiě)找補(bǔ)回來(lái),在本次測(cè)試中弱恒,客戶端 EC 寫(xiě)入速度比3副本提升了 5% 左右姿骏。
- 客戶端讀取過(guò)程中,EC 的6倍并發(fā)讀完全壓過(guò)了3副本的單線程讀斤彼,在本次測(cè)試中分瘦,EC 讀速度比3副本本地讀提升了300%,這其中的原因是:?jiǎn)尉€程讀完全受制于磁盤(pán)的極限讀取速度(190MB/s左右)琉苇,反觀6倍并發(fā)讀不受此限制嘲玫。
- EC 在正常讀取和修復(fù)讀取兩種情況下,速度差別不大并扇,以 6+3 為例:
- 無(wú)論是正常讀取還是修復(fù)讀取胯究,客戶端都是固定的6倍并發(fā)讀6 個(gè) DN拧抖,不會(huì)隨著掛掉的 DN 個(gè)數(shù)變化而變化洽瞬。
- 在 ISA-L 幫助下恋日,異常讀取時(shí)的修復(fù)時(shí)間(即計(jì)算出原始數(shù)據(jù)的時(shí)間)很短巫玻。
- 以上的結(jié)果都是在網(wǎng)絡(luò)和 CPU 完全足夠的情況下測(cè)得的,特別是網(wǎng)絡(luò),本次測(cè)試中所有機(jī)器都配置了一個(gè)50Gb 的 bond 網(wǎng)卡(由兩張 25Gb 的物理網(wǎng)卡聚合而成),完全夠用顷窒。但在真實(shí)場(chǎng)景下,CPU源哩、網(wǎng)絡(luò)可能達(dá)不到本次測(cè)試的理想條件鞋吉,因此結(jié)果也可能會(huì)有出入。