1.概述
hadoop集群中文件的存儲都是以塊的形式存儲在hdfs中。
2.默認值
從2.7.3版本開始block size的默認大小為128M,之前版本的默認值是64M.
3.如何修改block塊的大小?
可以通過修改hdfs-site.xml文件中的dfs.blocksize對應的值。
注意:在修改HDFS的數據塊大小時,首先停掉集群hadoop的運行進程,修改完畢后重新啟動。
4.block塊大小設置規則
在實際應用中,hdfs block塊的大小設置為多少合適呢?為什么有的是64M,有的是128M、256M、512呢?
首先我們先來了解幾個概念:
1)尋址時間:HDFS中找到目標文件block塊所花費的時間。
2)原理:文件塊越大,尋址時間越短,但磁盤傳輸時間越長;文件塊越小,尋址時間越長,但磁盤傳輸時間越短。
5.block不能設置過大,也不要能設置過小
1)如果塊設置過大,一方面從磁盤傳輸數據的時間會明顯大於尋址時間,導致程序在處理這塊數據時,變得非常慢;另一方面,MapReduce中的map任務通常一次只處理一個塊中的數據,如果塊過大運行速度也會很慢。
2)如果設置過小,一方面存放大量小文件會占用NameNode中大量內存來存儲元數據,而NameNode的內存是有限的,不可取;另一方面塊過小,尋址時間增長,導致程序一直在找block的開始位置。因此,塊適當設置大一些,減少尋址時間,那么傳輸一個有多個塊組成的文件的時間主要取決於磁盤的傳輸速度。
6.多大合適呢?
1)HDFS中平均尋址時間大概為10ms;
2)經過前任的大量測試發現,尋址時間為傳輸時間的1%時,為最佳狀態,所以最佳傳輸時間為:
10ms/0.01=1000s=1s
3)目前磁盤的傳輸速度普遍為100MB/s,最佳block大小計算:
100MB/s*1s=100MB
所以我們設置block大小為128MB.
4)實際中,磁盤傳輸速率為200MB/s時,一般設定block大小為256MB;磁盤傳輸速率為400MB/s時,一般設定block大小為512MB.