Hadoop Core_HDFS总结(一)

一、产生背景

传统的本地文件系统(单机式),在数据量增长过快、数据备份、数据安全性、操作使用便捷性上存在严重不足。

二、架构设计

2.1. 定义

HDFS(Hadoop Distributed File System)Hadoop分布式文件系统。

2.2. 组件角色

1)NameNode:  HDFS元数据管理者,管理 NameSpace(文件系统命名空间),记录文件是如何分割成数据块以及他们分别存储在集群中的哪些数据节点上。NameSpace 或其本身属性的任何更改都由 NameNode 记录,维护整个文件系统的文件和目录。

2)DataNode:  DataNode 是文件系统的工作节点。根据客户端或者 NameNode 发送的管理指令,负责 HDFS 的数据块的读写和检索操作。通过心跳机制定期向 NameNode 发送他们的存储块的列表。

3)Client :  客户端 Client 代表用户与 NameNode 或者 DataNode 交互来访问整个文件系统的对象

2.3. 特点

1)高容错和高可用性,硬件错误是常态而不是异常

HDFS 设计为运行在普通硬件上,所以硬件故障是很正常的。HDFS 提供文件存储副本策略, 可以实现错误自检并快速自动恢复。个别硬件的损坏不影响整体数据完整性和计算任务的正常执行。

2)流式数据访问

HDFS 主要采用流式数据读取,做批量处理而不是用户交互处理,因此 HDFS 更关注数据访问的高吞吐量。

3)弹性存储,支持大规模数据集

HDFS 支持大文件存储,典型的文件在GB 甚至TB 级别,可以支持数以千万计的大规模数据集。根据业务需要灵活的增加或者缩减存储节点。弹性存储的最大挑战是减小在修改存储节点时的数据震荡问题。

4)简单一致性模型

HDFS 文件实行一次性写、多次读的访问模式。设计为文件一经创建、写入和关闭之后就不需要再更改了,这种设计和假定简化了数据一致性问题,使高吞吐量成为可能。

5)移动计算而非移动数据

由于 HDFS 支持大文件存储,对于大文件来说,移动计算比移动数据的代价要低。这样也可以减少网络的拥塞和提高系统的吞吐量。

6)协议和接口多样性

为上层应用提供了多种接口,Http RestFul 接口、NFS 接口、Ftp 接口等等 POSIX 标准协议, 另外通常会有自己的专用接口。

7)多样的数据管理功能

对于数据压缩、数据加密、数据缓存和存储配额等提供了多样的管理功能。

2.4. 架构设计

HDFS是一个主从式(Master/slave)的体系结构。HDFS集群中有一个NameNode和一些DataNode。NameNode管理文件的元数据,DataNode 存储实际的数据。客户端联系 NameNode 来获取元数据信息,而真正的文件 I/O 是直接和 DataNode 进行交互的。

2.4.1 读文件流程

1)客户端向NameNode发送请求,NameNode根据客户端的请求查找数据对应的数据块信息。

2)NameNode返回文件对应的 数据块元数据信息(所属机器、数据块的block_id、数据块顺序)

3)客户端向DataNode直接通信,读取各个Block数据块信息。该过程是并行读取,由客户端合并数据。

2.4.2 写文件流程

1)客户端先向NameNode申请,NameNode寻找可以写入数据块信息的机器位置。

如果文件大,写入会被分成很多block数据块,实际上是通过一个block一个block进行申请。如果设置副本数为3,则每次请求会返回一个block对应的3个副本的block的存放位置

2)客户端获取对应的block数据块所处的DataNode节点后,开始写操作。客户端整个过程以数据包package的方式逐个发送和接受。存在多个副本时,一个数据块的package包的写入是依次进行的。写入到第一个DataNode后,第一个向第二个DataNode传输,第二个写完后,向第三个传输package。每完成一个副本对client有一个应答,副本数为3则会有3次应答。写完一个block块在为下一个block块申请然后写入。

3)待所有的数据块 block 均写完后,Client 接收到全部写完的 ack 答复,告诉 NameNode 数据已写完,Client 关闭 socket 流。DataNode 这时才会向 NameNode 报告新增 block 数据块的信息。

猜你喜欢

转载自blog.csdn.net/weixin_40235225/article/details/85051147