HDFS详解

1.简介
HDFS是Hadoop生态下的分布式文件系统,专门存储超大数据文件,为整个Hadoop生态圈提供来基础带存储服务。
1)由GFS发展而来。
2)大部分大数据计算引擎支持与HDFS的交互
2.设计原则
1)硬件故障:HDFS中的硬件故障应该是常态,并不是意外。因为一个HDFS可能包含大量带服务器,每个节点可能会存在硬件故障。所以,HDFS需要自动检测故障、快速和自动恢复数据。
2)流数据访问:HDFS是被设计用于批量处理,而非普通带应用程序带的用户交互。设计重点应该在于支持高带吞吐量。
3)大数据集:HDFS支持大文件,应该提供高带宽和可扩展带上百个节点,文件大小应该在GB或TB以上。
4)简单一致性原则:HDFS的文件需要被多个用户多次读写,所以其需要一个一次写入多次读取的文件访问类型。一个文件一旦创建,写入和关闭就不需要改变。支持在文件带末端进行追加数据而不支持在文件的任意位置进行修改。
5)移动计算比移动数据更划算:应该带计算在其要操作带数据附近执行那就会更高效。尤其是数据集非常大的时候,将最大限度地减少网络拥堵和提高系统带吞吐量。
6)轻便带跨异构带软硬件平台:容易从一个平台跨到另一个平台。
3.HDFS架构
HDFS详解_第1张图片
HDFS是一个主从架构的分布式文件系统,主要由Namenode和Datanode构成,客户端通过Namenode对真实的数据进行管理。
(1)namenode:
1)HDFS 集群必须拥有至少一个Namenode;
2)存储元数据信息;
3)管理HDFS的命名空间(文件的存储结构);
4)管理客户端的访问权限;
5)管理DataNode的文件块映射;
6)接收Datanode的心跳信息和文件块报告。
存储机制
HDFS详解_第2张图片
fsimage:当前文件系统的Namenode的快照
edit logs:Namenode运行后的编辑日志,记录了Namenode的变化
但HDFS出现宕机时,可根据fsimage和edit log 对其进行恢复
但当Namenode彻底损坏时,将无法获取fsimage和edit log
(2)Secondary Namenode
HDFS详解_第3张图片创建检测点checkpoint来合并。它会维护一个合并后发namespace image副本,可用于在namenode完全崩溃时恢复数据。
(2)Datanode
1)HDFS中真正存储数据的节点,通常来说一个Datanode指的是整个集群中的一个节点
2)管理存储在Databode中的数据和文件块
3)对文件进行创建,删除和复制(指令来自Namenode)
4)向Namenode汇报文件块信息和节点状态
5)可以和客户端进行数据交互
(3)The file system Namespace-文件系统命名空间
HDFS支持传统的文件分层结构,目录文件夹结构,用户可以在其中存储文件,
HDFS命名空间和传统的单机文件系统命名方式很类似
任何有关文件系统命名空间的操作(新建目录,删除目录等)都记录在namenode中
HDFS命名空间的操作包括(打开,关闭以及删除目录文件,重命名目录文件)
命名空间的操作由namenode完成
(4)Flies Block和 Data replication文件块和数据复制
HDFS详解_第4张图片

1)一个文件可以被划分成很多个数据块
2)默认值是128M,可以设置
3)文件的所有的Block都是同样大小的,除了最后一个
4)数据块可以使存储变均匀(方便读取)
5)跟容易进行故障恢复(如果某个数据块丢失,只需恢复这个数据块,而无需恢复整个datanode)
6)可以进行并行的读写
7)可以设置副本的数目
Data replication
HDFS详解_第5张图片
文件的文件块大小和副本可以设置
HDFS在写操作的时候会创建多个副本
Datanode会定时发送心跳信息给namenode,报告本节点的数据块信息
收到Datanode心跳信息和报告说明Datanode是正常工作的
HDFS详解_第6张图片
复制准则:
1)同一个机架(Rack)的Datanode数据传输速度会好过跨机架传输
2)副本要放在不同的机架中,防止整个机架损坏后,数据仍然不会丢失
3)如果复制因子是3,也就是存放三分不同的时候,一般将两份放在同一个机架的不同的Datanode,第三份放在另一个机架的不同的Datanode中
HDFS详解_第7张图片
节点交流协议
1)HDFS各个部分的信息交流协议是基于TCP/IP之上的
2)客户端和Datanode会建立对应的连接
3)RPC(远程过程调用)
客户端:客户端协议
Datanode:Datanode协议
4)Namenode:只回应RPC request
(5)HDFS的读写操作
写操作


实线代表真实数据写入
点虚线代表客户端和Namenode的请求信息
短横虚线代表Datanode回应客户端
一点一横虚线代表客户端和Datanode对Namenode的回应
场景:一个文件200MB,客户端需要将该文件写在HDFS上;
HDFS配置:HDFS分布在三个机架Rack1,Rack2,Rack3
写入配置:文件被分成128MB个72MB的两个数据块,复制淡粉
第一步:
客户端将该文件分成128MB个72MB的两个Block,block1和block2
第二步:
客户端向Namenode发送数据写入请求(点虚线1)
Namenode节点记录数据几点信息,并且返回可用的Datanode,点虚线2
Block:DN1 DN3 DN4
Block2: DN5 DN7 DN8
Namenode选择DatanNode的原理
1)客户端在datanodes上,第一个副本和客户端相同的节点,第二个副本在不同机架上的节点,第三个副本是和第二个副本在同一机架上的不同节点
2)客户端不在datanode上,第一个副本随机选择,第二个副本选择和第一个副本不同机架上的节点,第三个副本选择和第二个副本同一机架上的相同节点。
第三步:
1)客户端向Datanode发送block1,发送过程是流式写入,将128MB的block按照64k的传输包划分。
2)将第一个传输包发送给DN1,DN1接受第一个传输包后,奖盖传输包发送给DA4,同时客户端向DN1发送第二个传输包。
3)DN4接收完第一个传输包后,向DN3传送第一个传输包,同时接收从DN1发来的第二个传输包。
4)以此重复,直至block发送完毕。
5)DN1,DN4,DN3向namenode发送消息,DN1向客户端发送消息,说明block1已经传输完毕。
6)客户端收到DN1的消息后,向namenode发送消息,说明block1已经写完来。到此为止,block正式写完
7)依照以上原理,将block2写入DNS,DNB,DN7,写完后,DNS,DN8,DN7告诉namenode已经写完,DN5告诉客户端已经写入完毕
8)客户端会告诉namenode,已经写完block2,至此整个文件已经写入完毕。

读操作
HDFS详解_第8张图片
第一步:客户端向namenode发出读请求
第二步:
namenode查看元数据信息,返回文件block的位置
Block1:DN1 DN3 DN4
Block2: DN5 DN7 DN8
第三步:
Block的位置是先有先后顺序的,先读Block1 再度block2
读取的条件:先从本机的Datanode上进行数据的读取,如果本机架上没有数据,就从最近的Datanode中读取数据
(6)HDFS的特点
1)经济高效:数据集中存储,经济高效
2)大存储高吞吐:分布式存储
3)容错性可靠:多个副本,智能的存储方式
4)可扩展性:添加datanode
5)数据完整性:分布式存储,datanode定时汇报数据块状态
6)高可用 性:一个Datanode,甚至一个机架故障后,数据仍然可以读取
7)耐用性:故障自我修复,数据再次复制,namenode也可以有备用节点进行修复,数据迁移至经常访问的Datanode。

你可能感兴趣的:(大数据,mapreduce,hdfs,spark,hadoop)