大数据系列之HdFS(一) 概述及架构设计
一.分布式文件系统HDFS
1.特点介绍
1.高容错性和高可用性
硬件错误是常态而不是异常 HDFS设计为运行在普通硬件上,所以硬件故障是很正常的。HDFS提供文件存储副本策略,可以实现错误自检并快速自动恢复。个别硬件的损坏不影响整体数据完整性和计算任务的正常执行。
2.流式数据访问
HDFS主要采用流式数据读取,做批量处理而不是用户交互处理,因此HDFS更关注数据访问的高吞吐量。流式数据特点:是连续的 但连续式相对的不是绝对的 比如 有一百兆数据 可能会被分成两个五十兆的数据来读取而不是 分成100个 1兆的数据进行读取
3. 弹性存储,支持大规模数据集
弹性存储的最大挑战是减小在修改存储节点时的数据震荡问题
4.单一致性模型
HDFS文件 一次写多次读 高吞吐量
5.移动计算而非移动数据
6. 协议和接口多样性
7. 多样的数据管理功能
对于数据压缩、数据加密、数据缓存和存储配额等提供了多样的管理功能
二.HDFS机构设计
1.HDFS是什么:
是Hadoop 分布式文件系统
2.HDFS组件角色
1.NameNode(简称NN)
- HDFS是元数据的管理者
而元数据是描述数据的数据 HDFS管理Namespace(文件系统命名空间) 记录数据的各种属性 以及 分别存储在那些数据节点上 HDFS是管理者 相当于人的大脑
2.DataNode(简称DN)
-
DataNode是文件系统的工作节点。根据客户端或者NameNode发送的管理指令,负责HDFS的数据块的读写和检索操作。
-
通过心跳机制定期向NameNode发送他们的存储块的列表
- 心跳机制: 心跳机制就是主从模式 类似于生活中上下级汇报任务进度 比如 : 小组组长给组员分配任务 每天 需要知道任务 进度 而任务进度通过 组员 向 组长 反馈
-
Client
- 客户端Client代表用户与NameNode或者DataNode交互来访问整个文件系统的对象。
-
开发人员面向Client API来编程实现,对NameNode、DataNode来说透明无感。
3.HDFS架构设计
1.基本架构
1.首先(读) 从最左边的client看 客户端向NN提出请求(Metadata ops) 来获取相应的元数据存储路径就是右上角的方框 获得路径之后 客户端直接操作相应的DN 而不是通过NN
2.其次(写)
从最下边的Client看这个 图少了一条线就是写的时候也是由CLient指向NN获得路径 之后操作相应的DN来写入数据 也是 不经过NN操作
注 读写两个过程NN 只是提供 Client 请求元数据的路径 而真正操作 DN是 获得 元数据路径之后 Client直接操作DN
2.读文件流程
详细步骤:
-
第一步:Client向NameNode发送数据请求后,寻找数据对应的数据块的位置信息。
-
第二步:NameNode返回文件对应的数据块元数据信息,如所属机器、数据块的block_id、数据块的先后顺序等。
-
第三步:由Client与DataNode直接通信,读取各个block数据块的信息。过程为并行读取,由客户端合并数据。
3写文件流程
详细步骤:
-
第一步:
- Client向NameNode发送写数据请求后,寻找可以写入的数据块block信息的机器位置。
2.若文件过大,写入可能会分成很多block数据块,实际上是通过一个block一个block的申请。
3.若副本为3,则每次请求后返回一个block的对应的3个副本的block的存放位置。
-
第二步:
- Client获取到对应的block数据块所处的DataNode节点位置后,Client开始写操作。
2.Client先写入第一个DataNode,以数据包package的方式逐个发送和接收。如64K大小的package包大小来发送和接收。
3.存在多个副本时,package包的写入是依次进行的。写入到第一个DataNode后,第一个向第二个DataNode传输。第二个写完后,由第二个向第三个DataNode传输package。以此类推。
4.写完一个block数据块后,如果还有则反复进行第一步和第二步。
- 第三步:
-
待所有的数据块block均写完后,Client接收到全部写完的ack答复,告诉NameNode数据已写完,Client关闭socket流。
-
DataNode也会向NameNode报告新增block数据块的信息。