简介:
HDFS 集群有两类节点,一个是 NameNode (管理者)和多个 DataNode(工作者)。
DataNode 是文件系统的打工仔,听从客户(client)或者管理者(Namenode)的安排,还要定期向管理者反馈工作进展(所存储的块列表)。
目录:
一、 DataNode 的工作职责以及流程
二、 相关面试题
正文:
接着上一篇,聊聊 DataNode 这个"打工仔"。首先得搞清楚 DataNode 是什么地干活?职责如下。
- 1、提供真实文件数据的存储服务;
- 2、定期向 NameNode 汇报自身所持有的 block 信息(通过心跳信息上报);
- 3、文件块(block):最基本的存储单位。
块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在 hadoop2.x 版本中是 128 M,之前的版本中是 64 M。
一般来说,一个文件的长度 大小是 size,从文件的 0 偏移开始,按照固定大小以及顺序对文件进行划分并编号。也就是所谓的 Block(块)。
block 大小在 hdfs-site.xml 文件中可以配置, dfs.block.size可以设置。
- 4、每一个 block 都可以在多个 datanode 上存储多个副本(Replication)(副本数量也可以通过参数设置 dfs.replication,默认是 3 )
hdfs-site.xml 的 dfs.replication 属性
属性举个例子:
假如上传一个 256 MB 的文件,会被切割成 256 / 128 = 2 块,一个 block 对应一个 meta 元数据信息;如果文件为不足 128 MB 也是一个 block。
若一个文件为 129 MB,那么会被分成两个 block ,第一个 block 为 128 MB ,第二个 block 为 1 MB。
进入hdfs 存储位置
[hadoop1@h1 subdir0]$ pwd
/home/hadoop1/app/hadoop-2.9.2/data/dfs/data/current/BP-1932602083-192.168.223.10-1575093118671/current/finalized/subdir0/subdir0
[hadoop1@h1 subdir0]$
注释:BP-random integer-NameNode-IP address-creation time(格式)
BP(BlockPool) Namenode 的 VERSION 中的集群唯一 blockpoolID ,可以理解为集群的位置。IP部分和时间戳代表创建该 BP 的 NameNode 的 IP 地址和创建时间戳。
在 hdfs 文件系统里,有个文件大小为 186.0 M,按照以上的分割规则 jdk-8u212-linux-x64.tar.gz 会被分割成两块,第一块为 128 MB,第二块为 186 -128 = 58 MB
[hadoop1@h1 subdir0]$ hadoop fs -ls -h hdfs://h1:9000/
Found 1 items
-rw-r--r-- 2 hadoop1 supergroup 186.0 M 2019-12-05 09:43 hdfs://h1:9000/jdk-8u212-linux-x64.tar.gz
[hadoop1@h1 subdir0]$
执行 ll -h 查看命令
[hadoop1@h1 subdir0]$ ll -h
total 188M
-rw-rw-r--. 1 hadoop1 hadoop1 128M Dec 5 09:43 blk_1073741856
-rw-rw-r--. 1 hadoop1 hadoop1 1.1M Dec 5 09:43 blk_1073741856_1032.meta
-rw-rw-r--. 1 hadoop1 hadoop1 58M Dec 5 09:43 blk_1073741857
-rw-rw-r--. 1 hadoop1 hadoop1 464K Dec 5 09:43 blk_1073741857_1033.meta
[hadoop1@h1 subdir0]$
如上图所示,blk_1073741856 为第一块存储块 128 MB;blk_1073741857 为第二块存储块 58 MB。
试验证明了书上的理论没有骗人,至于 .meta 结尾的文件包含了 checksum (校验)信息。
留个面试题:
我们知道 HDFS 会在 DataNode 保留副本(默认是 3 块),那么假如其中的一块数据块损坏了该如何处置?
微信搜索公众号「一起学大数据呀」,里面有更多学习资料
网友评论