一、hdfs block的理解
HDFS block是一个逻辑的概念,假如hdfs总的存储空间为1T,block大小为1G,每个文件大小为100M,副本因子为1,则每个文件独占了一个块,此时集群共有10000个block而不是1000个block,因为块是逻辑的概念,并不是物理存在,所以hdfs是支持修改块大小的,并且修改不会开销太大。
二、 hdfs块为什么一般会设计64M或者128M或者更大
1.减少寻道时间,对于hdfs来讲,寻道是一个逻辑的概念,因为真正的寻道发生在磁盘,这里的寻道时间指的就是定位到块的时间。hdfs是存储大数据的,如果块设计的很小,一个文件就会由很多块组成,而HDFS上文件读写的最小单位是块,这样,寻找块的时间就会大大增加,降低读写效率。
2.减少任务数,一个map或者一个reduce都是以一个块为单位处理,如果块很小的话,mapreduce任务数就会非常多,任务之间的切换开销变大,效率降低,同样,如果块很大的话,单个任务就会很慢。
3.减少元数据,在hdfs中,文件块的信息都是元数据,集群运行过程中元数据会都加载进namenode的内存中,如果块很小的情况下,元数据信息就会很多,namenode压力就会很大。实际上当集群规模超过4000台的时候,namenode内存再大都已经没有什么用,因为此时文件数已经太多了。
4.和1很相似,如果数据块很小,一个文件要分成很多块,而每个文件都有副本,当文件删除或者拷贝时,就会导致大量块移动,寻道开销和网络开销都会很大。
5.当集群规模增大的时候,可以适当增加块的大小,比如集群规模大到一定程度可以将块增大到256M,降低相应开销。
6、如何修改hdfs块大小
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>