版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/fadf674d7856
HDFS block数据块
block数据块是HDFS文件系统的基本存储单位,默认大小64M(Hadoop2.0版本以下),很多情况下HDFS使用128MB的块设置,比磁盘的块大很多(差不多4K大小),其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块起始位置所需要的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
eg:
如果寻址时间约为10ms,而传输速率为100MB/s,为使寻址时间仅占传输时间的1%,要将块大小设置约为100MB。随着新一代磁盘驱动器传输速率的提升,块的大小将被设置的更大。
由于一个MR的map任务通常一次只处理一个块的数据,因此如果块太大,map数太少(少于集群中节点数量),并发性能就会下降。因此也不宜设置太大。
block数据块设置较大原因归结三点:
1)减少文件寻址时间
2)减少管理块的数据开销,每个块都需要在NameNode上有相应记录
3)对数据块进行读写,减少建立网络的连接成本
【小文件block的占用】
如果HDFS上的一个文件(file size)太小,比如2.5MB,小于块大小(block size),那么这个小文件实际上占用linux file system的大小是实际的文件大小即2.5MB。
HDFS中文件块目录结构具体格式如下:
${dfs.datanode.data.dir}/
├── current
│ ├── BP-526805057-127.0.0.1-1411980876842
│ │ └── current
│ │ ├── VERSION
│ │ ├── finalized
│ │ │ ├── blk_1073741825
│ │ │ ├── blk_1073741825_1001.meta
│ │ │ ├── blk_1073741826
│ │ │ └── blk_1073741826_1002.meta
│ │ └── rbw
│ └── VERSION
└── in_use.lock
in_use.lock表示DataNode正在对文件夹进行操作
rbw是“replica being written”的意思,该目录用于存储用户当前正在写入的数据。
Block元数据文件(*.meta)由一个包含版本、类型信息的头文件和一系列校验值组成。校验和也正是存在其中。
网友评论