一、DataNode功能及特性

(1)提供真实文件数据的存储服务。

(2)文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。

(3)HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block. 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间,   (这样设置可以减轻namenode压力,因为namonode维护着文件与数据块列表的对应大小)

(4)Replication。多复本。默认是三个。(hdfs-site.xml的dfs.replication属性)

注意区别:一个文件可以产生多个快,多个文件是不可能成为一个块信息的,处于减轻namenode的压力,最好的方式就是一个文件一个块

二、DataNode 存储目录的文件结构以及特点

DataNode数据保存在如下目录:

$HADOOP_HOME/tmp/dfs/data

[root@hadoop-server01 data]# ll

total 8

drwxr-xr-x. 3 root root 4096 Jun 15 00:51 current

-rw-r--r--. 1 root root   20 Jul 15 22:21 in_use.lock

[root@hadoop-server01 data]# cd current/

[root@hadoop-server01 current]# ll

total 8

drwx------. 4 root root 4096 Jul 15 22:21 BP-1300855425-192.168.1.201-1529048649163

-rw-r--r--. 1 root root  229 Jul 15 22:21 VERSION

/usr/local/apps/hadoop-2.4.1/tmp/dfs/data/current/BP-1300855425-192.168.1.201-1529048649163/current/finalized

[root@hadoop-server01 finalized]# ll blk_107374*

-rw-r--r--. 1 root root 134217728 Jun 18 18:46 blk_1073741825

-rw-r--r--. 1 root root   1048583 Jun 18 18:46 blk_1073741825_1001.meta

-rw-r--r--. 1 root root   4439028 Jun 18 18:46 blk_1073741826

-rw-r--r--. 1 root root     34687 Jun 18 18:46 blk_1073741826_1002.meta

-rw-r--r--. 1 root root        11 Jul  4 23:38 blk_1073742895_2071.meta

drwxr-xr-x. 2 root root      4096 Jun 22 08:21 subdir0

drwxr-xr-x. 2 root root      4096 Jun 22 08:21 subdir1

drwxr-xr-x. 2 root root      4096 Jun 22 08:21 subdir10

drwxr-xr-x. 2 root root      4096 Jun 22 08:21 subdir11

drwxr-xr-x. 2 root root      4096 Jun 22 08:21 subdir12

blocksBeingWritten:保存了客户端发起的,当前正在写的数据块;

detach:用于配合数据节点升级,==数据块分离==操作时的临时文件夹;

tmp:保存了用于数据块复制时,当前正在写的数据块;

in_user.lock:表示当前目录已经被使用,实现了一种锁机制,这样DataNode可以独自使用该目录;

current:保存了已写入HDFS文件系统的数据块和一些系统工作时需要的文件;

blk_开头的文件:HDFS数据块,用来保存HDFS文件内容;

.meta后缀文件:CRC32校验文件,保存数据块的校验信息;

当current目录达到一定规模时(由配置项${dfs.datanode.numblocks}指定),DataNode会在current目录下新创建一个子目录subdir*,用于保存新的数据块和元数据。

默认配置下,current目录下最多只有64个数据块(128个文件)和64个子目录。通过这种手段,DataNode既保证目录不会太深,影响文件检索性能,同时也避免了某个目录保存大量的数据块。