作为Hadoop的分布式文件系统的HDFS,是Hadoop框架学习当中的重点内容,HDFS的设计初衷,是致力于存储超大文件,能够通过构建在普通PC设备上的集群环境,以较低成本完成大规模数据存储任务。今天的大数据入门分享,我们就主要来讲讲HDFS数据读写机制。
HDFS在数据存储上,具备高可靠性,提供容错机制,为整个Hadoop框架的数据处理提供了更稳固的底层支持。这其中,HDFS数据读写机制是发挥着重要的作用的。
HDFS相关的基本概念
块(block)
这是HDFS的基本思想,把大的文件分成块,每块64M。
备份(replicas)
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
机架 (rack)
由几个DataNode组成的部件称为机架。
MetaData
描述我们要存储数据的数据结构。
HDFS namespace
这个命名空间指的是文件的目录结构,与我们单个电脑的文件的结构树相似。
EditLog
记录文件系统的metadata变化的事务日志,是HDFS的核心数据结构。 例如,写入一个文件或修改复制因子都会向EditLog中写入一条record。
FsImage
整个文件系统的命名空间,包括block到文件的映射,文件系统的属性(大小,被分为几个block,只读,权限等信息),都被存储在一个文件中,这个文件就是FsImage。
HDFS namespace,EditLog,FsImage都存储在NameNode上。
HeartBeat
NameNode和DataNode通过HeartBeat进行通信,每隔一定时间,DataNode就会向NameNode发送心跳信号,以此报告给NameNode,说我还活着,这样NameNode 在接到读写任务时,会发命令给它。
HDFS如何分解文件
HDFS默认会将文件分割成 block,64M为1个block,然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。每个文件默认会保存3份。
HDFS的基本架构,按照Master和Slave的结构,主要的组件包括:NameNode、SecondaryNameNode、DataNode。
NameNode:是Master节点,处理客户端的读、写请求;管理数据块映射;管理HDFS的名称空间;配置副本策略;
SecondaryNameNode:合并fsimage和fsedits,然后再发给namenode,尽量不要与NameNode部署在同一个host上,这样避免内存的过多消耗;NameNode的冷备份;
DataNode:Slave节点,干活的。负责存储client发来的数据块block,执行数据块的读写操作。
HDFS读写机制
1、数据写入
客户端访问NameNode请求上传文件;
NameNode检查目标文件和目录是否已经存在;
NameNode响应客户端是否可以上传;
客户端请求NameNode文件块Block01上传服务位置;
NameNode响应返回3个DataNode节点;
客户端通过输入流建立DataNode01传输通道;
DataNode01调用DataNode02,DataNode02调用DataNode03,通信管道建立完成;
DataNode01、DataNode02、DataNode03逐级应答客户端。
客户端向DataNode01上传第一个文件块Block;
DataNode01接收后传给DataNode02,DataNode02传给DataNode03;
Block01传输完成之后,客户端再次请求NameNode上传第二个文件块。
2、数据读取
客户端通过向NameNode请求下载文件;
NameNode查询获取文件元数据并返回;
客户端通过元数据信息获取文件DataNode地址;
就近原则选择一台DataNode服务器,请求读取数据;
DataNode传输数据返回给客户端;
客户端以本地处理目标文件。
关于大数据入门,HDFS数据读写机制,以上就为大家做了简单的介绍了。在Hadoop框架当中,HDFS作为分布式文件系统,地位十分关键,而想要把HDFS学好学懂,还是需要多下功夫的。