hadoop块的概念

今天突然发现集群存储节点有几个小文件,不到20M,这类小文件会影响集群的健康度,到底是如何影响的呢?hdfs为小文件分配一个块,到底是逻辑块还是实际的存储呢?本文将快速解析

datanode负责存储数据,namenode负责管理元数据,管理元数据通过fsimage(磁盘中元数据的镜像文件)和edits文件(操作日志)

HDFS的block默认为128M,块设置的这么大,是为了最小化寻址的开销,如果块设置的足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间,因而,传输一个由多个块组成的文件的时间取决于磁盘的传输速率。但是这个数也不会设置的过大,mapreduce中的map任务通常一次只处理一个块中的数据,因此如果任务数太少(少于集群中节点的数量),运行速度会很慢

使用抽象块的好处,第一个就是一个文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块不需要存储在同一个磁盘上;第二个就是使用固定的抽象块,方便集群元数据的管理,块的大小是固定的,因此计算单个磁盘能存储多少个块就相对容易,hdfs为一个block记录一条元数据信息,所以尽量让他的每一个块都很饱满,这样,就不会因为过多的元数据信息给namenode带来负担

大量的小文件会导致元数据过多,namenode负载高;执行计算任务时,一个块分配一个map,影响计算效率,hdfs为小文件分配一个块,但是文件实际存储是不会占满一个块的大小的,hdfs的块是逻辑块

hadoop fsck /share/external_table/ssa/DPI_MBL -blocks

你可能感兴趣的:(hadoop)