為什麼(hadoop基準測試中)HDFS寫入速度如此之慢?
搭建好hadoop之後,對hadoop做基準測試,使用hadoop-1.1.2的test包中的IO測試進行讀寫測試。測試結果讓我覺得非常詫異,只有2-3M/s的寫入速率。
在我的認識里,傳統硬碟的寫速度應該能夠到120M/s的樣子,網路傳輸速度也能夠達到10M/s至少,在使用千兆交換機的前提下,甚至能夠達到100M/s~想問一下HDFS之所以寫速度為如此慢的原因到底是什麼~~PS:附上測試的環境參數:機器配置如下:機器數量:7DataNode:6內存:32G硬碟:2T 7200轉 磁碟 + 128G SSD網路情況:百兆帶寬寫測試:往HDFS上寫10個1000M的文件: 使用命令 :$ hadoop jar $HADOOP_HOME/hadoop-test-1.1.2.jar TestDFSIO -write -nrFiles 10 -fileSize 1000
測試結果為:----- TestDFSIO ----- : writeDate time: Mon Sep 02 17:12:18 HKT 2013Number of files: 10Total MBytes processed: 10000Throughput mb/sec: 2.3901636162601876Average IO rate mb/sec: 2.5101423263549805IO rate std deviation: 0.615155808133847Test exec time sec: 503.373
總共寫10000M,耗時503s,得到集群平均每秒寫19.8M,然後統計數據Throughput=2.39M/S,所以平均下來有19.8/2.39=8.31個進程並發。因為是寫10個文件,由此推斷在集群大部分時間內應該是10個進程並發的。文件默認的副本數是3,所以實際上每寫一份文件,就會產生2份的網路傳輸(3個副本位於不同的datanode上),10個進程並發在6台datanode上,所以肯定會有一部分機器上至少起了兩個寫進程(會產生副本1到副本2的流量),再加上別的機器的pipeline(副本2到副本3的流量),所以會有大約2.39*(2+2)≈10M/s的流量,基本達到帶寬瓶頸了。換千兆網卡吧。。
1. TestDFSIO writeTest對應一個MapReduce job,每個文件對應一個map task,也就是說,TestDFSIO write文件個數(nrFile)就是map任務個數。
2. Throughput mb/sec 和 Average IO rate mb/sec 是兩個最重要的性能衡量指標。Throughput mb/sec衡量每個map task的平均吞吐量,Average IO rate mb/sec 衡量每個文件的平均IO速度。
舉個例子,你讓TestDFSIO創造1000個文件,但你的集群中只有200個 map slots。這意味著需要大約5波 MapReduce(1000/200 = 5)才能寫完全部的測試數據。所以集群的並發吞吐量為 {Throughput mb/sec} * 200, 並發IO速度則為{Average IO rate mb/sec}*200。
3. 集群中機器較少時,帶寬/disk io會成為瓶頸。舉個例子,對於千兆網路,四台機器總共只能提供128M x 4 = 512M帶寬,所以多個文件同時寫的時候,單個文件的寫速度會下降(平攤後)。寫文件的數量越接近map slots的數量,Average IO rate mb/sec就越接近飽和的IO使用率。
4. HDFS複製因子(HDFS replication factor)的作用也很明顯,複製因子的值越小,吞吐量和平均IO速度就會越高。
5. 最後一個關鍵點是標準差(IO rate std deviation)。高標準差表示數據散布在一個大的值域中,這可能意味著群集中某個節點存在性能相關的問題,這可能和硬體或軟體有關。
References:1. Benchmarking and Stress Testing an Hadoop Cluster with TeraSort, TestDFSIO Co.2. Running DFSIO mapreduce benchmark test額, hdfs我們用10gbps的網卡,跑到3gbps的讀取輸出, 還不穩定。
我們自己的存儲,一台機器12塊磁碟,跑到18gbps輸出沒有問題.
數據是8+4備份的方案.
hadoop集群面向於公司區域網,跟網路帶寬沒有關係呀,兩台阿里雲測試結果一個8核/內存16g,一個4核/內存8g
Date time: Mon Nov 27 15:58:26 CST 2017
Number of files: 100
Total MBytes processed: 10000.0
Throughput mb/sec: 12.550185052478598
Average IO rate mb/sec: 21.50667953491211
IO rate std deviation: 18.03019124739804
Test exec time sec: 140.708
一般hadoop集群的瓶頸都在網路方面。hadoop集群用百兆網卡你在逗我。。。另外交換機也得是千兆的。
推薦閱讀:
※hadoop web管理Hue,Ambari 和CM 的區別是什麼?
※未來想成為一名大數據架構師,可是不知如何在hadoop spark Storm中糾結?
※有什麼方案可以代替 Impala?
※在納斯達克Nasdaq做碼農是什麼樣的體驗?
TAG:Hadoop |