一、測試目的
主要是測試hadoop叢集分散式運算的速率跟資料大小和計算節點數量的關係。
二、環境
硬體:浪潮NF5220。
系統:CentOS 6.1
Master節點在母機CentOS上,分配4CPU,13G記憶體。
其餘三個slave節點在母機的KVM虛擬機器上,系統一樣是CentOS6.1。硬體設定:記憶體1G,4 CPU,每個100G容量大小的硬碟。
三、步驟及測試結果
首先將未經處理資料大小為260M的txt檔案放入hdfs。並配置了Hive環境做資料查詢測試。由於未經處理資料太小,要做GB以上的檔案測試。所以並且分別拷貝10、50、100、200、300、400、500份未經處理資料做成對應的大資料檔案。(即:例如複製100份的資料集形成一份大資料,其中有個欄位是id,分別為1——100,對應未經處理資料的100份)
分別對這些資料使用hiveQL查詢相同的資料,然後記錄不同大小的資料查詢的結果。做成一個圖表。然後再添加一個slave計算節點,負載平衡後再使用相同的hiveQL語言查詢相同的資料集,記錄對應的結果。做出:
其中,紅色是4個計算節點的趨勢線,黑色是三個節點。X軸是任務完成時間,Y軸是對應的資料大小,即拷貝未經處理資料的副本數。映像表明,1、隨著資料集的容量增大,mapreduce效率會提高,但是當過了一直值,效率會再次下降。2、4個計算節點時隨著資料量的增大mapreduce效率增加的更明顯,但是也有一個峰值。3、對應相同大小的資料,4個計算節點的效率要高於3個計算節點的。
當然,這些資料存在著較大的誤差,由於條件有限,最後加入的節點與之前三個配置不一樣。例如,最後加入的節點硬碟容量比較大,並且本人格式化的hdfs空間也相對大點。這就意味著這個節點會有更多的block,當執行mapreduce時也就會產生更多的mapper。但是CPU和其他硬體沒有提高,會拖帶本節點的效能,所以這個節點的增加不對應線性速率增加。但是總會比三節點的要好。
另外,通過分析mapreduce節點工作情況,也驗證了task的mapper的數量與效能的關係。
在hadoop中,一個tast作為一個調度時間片。任何時候,只要有閒置CPU CORE,而且有待調度的Task,那麼Task就可以被分配到閒置CPU CORE上。將一個節點劃分為N個Slots,N等於該節點的CPU CORE個數,也就是一個節點最多可以運行與CPU CORE個數相等的Task。
Slots有點像資源集區,每個任務必須要獲得一個slots才可以運行。Slots可以理解為能並發執行多少個任務。Slots分為mapper slots和 reduce slots,分別對應最大可並存執行的mapper數和reducer數。
Mapper總數不會變,因為查詢同樣的資料,對應相同數量的spilts。當開始我將mapper slots設定為4時,對應19個task。當mapper slots設定為8時,對應10個task。
19個Task
10個Task
對應19個task。前18個的mapper slots都是滿的4個。第十九個就不滿。所以mapper slots改為8的時候,需要10個task,第十個還是不滿。通過也可以看出,雖然task數量少了,但是每個task啟動並執行時間多了,因為對於每個task,所有mapper不可能同時獲得CPU資源做到並行計算,需要等待調度,總效率還是沒有提高。所以要想提高效率還是要多增加計算節點,降低每個task的最大並行mapper數量(這個數量應該等於CPU核的數量,做到並行調度),從而增加task的數量,使task被均勻分配到每個節點,讓所有mapper都並行計算。提高效率。