这是我参与「第四届青训营 」笔记创作活动的第1天
HDFS提供了哪些特性
- 高性能
- 容错
- 相对简单的中心化管理
- 安全
- 优化的分布式处理
- 可扩展性
NameNode和DataNode
- NameNode 作用
- 管理HDFS集群中文件系统的名字空间(Namespace),例如打开文件系统,关闭文件系统,重名名文件或者目录等
- NameNode节点负责确定指定的文件块到具体的Datanode节点的映射关系,在客户端与数据段节点之间共享数据
- 管理DataNode节点的状态报告,包括Datanode节点的健康状态报告和其所在节点上数据块状态报告,以便能够及时处理失效的数据节点
- DataNode 作用
- 文件的实际内容是存储在工作节点的“块”里
- 每个工作节点都运行一个DataNode守护进程
- 这些块是工作节点本地文件系统里的一些简单的文件
- 每个块为了冗余,都存储在多个不同的节点上
HDFS的副本机制
所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中,作用如下
- 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题
- 使用块作为文件存储的逻辑单位可以简化存储子系统
- 块非常适合用于数据备份进而提供数据容错能力
在 Hadoop1 当中, 文件的 block 块默认大小是 64M, hadoop2 当中, 文件的 block 块大小默认是 128M, block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定
如果一个数据不能被等分切片,那么最后就剩下一个小于128M(或者自己设置)的块大小
存放块副本的个数也是配置文件中指定的,默认是3
HDFS是如何读取和写入文件?
- 写文件
- 详细步骤
- 客户端连接NameNode
- NameNode在它的元数据里记录下该文件的记录,并返回块名机器DN列表给客户端
- 客户端连接到第一个DN,并且开始发送数据
- 第一DN收完数据后,它会往第2个DN并发送数据
- 第二个DN采用用羊的方式发给第3个DN
- 包被接受完成的确认信息ack会沿着管道传给客户端
- 当块儿写完后,客户端会像NameNode汇报
- 有Datename出现故障时
- 管道会被关闭
- 一个新的管道被开辟给2个好的节点
- 数据继续通过管道写数据到2个好的节点上
- NameNode将注意到该块不足副本数,将会重新复制一份到其他DN上
- 详细步骤
- 读文件
- 详细步骤
- 客户端连接NameNode
- NameNode返回请求文件的前几个块的名字和位置
- 客户端连接列表里的一个DN,并且读取块数据
- 详细步骤