HDFS架构图
- HDFS集群遵循主从架构( master/slave )。通常包括一个主节点和多个从节点。
- 在内部,文件分块存储,每个块根据复制因子存储在不同的从节点计算机上形成备份。
- 主节点存储和管理文件系统namespace,即有关文件块的信息,例如块位置,权限等﹔从节点存储文件的数据块。
- 主从各司其职,互相配合,共同对外提供分布式文件存储服务。当然内部细节对于用户来说是透明的。
![](https://img.haomeiwen.com/i9811180/db48cb0536ff56ab.png)
NameNode
主角色: namenode
- NameNode是Hadoop分布式文件系统的核心,架构中的主角色。
- NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
- 基于此,NameNode成为了访问HDFS的唯一入口。
- NameNode内部通过内存和磁盘文件两种方式管理元数据。
- 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log ( Journal )编辑日志。
- 在Hadoop2之前,NameNode是单点故障。Hadoop 2中引入的高可用性。Hadoop群集体系结构允许在群集中以热备配
置运行两个或多个NameNode。
![](https://img.haomeiwen.com/i9811180/1df1bab9e4332eae.png)
DataNode
从角色: datanode
- DataNode是Hadoop HDFS中的从角色,
- DataNode的数量决定了HDFS集群的整体数据存储能力。通过和NameNode配合维护着数据块。
Secondarynamenode
主角色辅助角色: secondarynamenode
- 除了DataNode和NameNode之外,还有另一个守护进程,它称为secondary NameNode。充当NameNode的辅助节点,但不能替代NameNode。
- 当NameNode启动时,NameNode合并Fsimage和edits log文件以还原当前文件系统名称空间。如果edits log过大不利于加载,
HDFS重要特性
- 主从架构:(Namenode是HDFS主节点,Datanode是HDFS从节点)。
- 分块存储机制:HDFS中的文件在物理上是分块存储( block )的}
\color{red}{默认大小是128M ( 134217728 )}$。
- 副本机制:所有block都会有副本,每个文件的block大小 ( dfs.blocksize )和副本系数(dfs.replication ),默认dfs.replication的值是3,也就是会额外再复制2份,连同本身总共3份副本。
- namespace:层次性文件组织结构(类windows)
- 元数据:文件自身属性信息、文件块位置映射信息
- 数据块存储:文件的各个block的具体存储管理由DataNode节点承担。
HDFS Web Interfes
- 模块功能解读-Utilities
logs:各个datanode上的日志
Configuration:查看配置文件是否生效
Borwse the file system: 查看整个文件系统
HDFS写数据流程
核心概念--Pipeline管道
-
Pipeline,中文翻译为管道。这是HDFS在上传文件写数据过程中采用的一种数据传输方式。
-
客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将其复制到第三个数据节点。
-
因为数据以管道的方式,顺序的沿着一个方向传输,这样能够充分利用每个机器的带宽,避免网络瓶颈和高延迟时的连接,最小化推送所有数据的延时。在线性推送模式下,每台机器所有的出口宽带都用于以最快的速度传输数据,而不是在多个接受者之间分配宽带。lb
ACK应答响应
核心概念--默认3副本存储策略
默认副本存储策略是由指定。
第一块副本∶优先客户端本地,否则随机
第二块副本∶不同于第一块副本的不同机架。
第三块副本:第二块副本相同机架不同机器。
![](https://img.haomeiwen.com/i9811180/86e4097fe2c97499.jpg)
hdfs写入数据流程
![](https://img.haomeiwen.com/i9811180/e1e935b389cfcd72.gif)
- Client 发起文件上传请求(HDFS客户端创建FileSystem对象实例DistributedFileSystem,FileSystem封装了与文件系统操作的相关方法。
),通过 RPC 与 NameNode 建立通讯, NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传; - Client 请求第一个 block 该传输到哪些 DataNode 服务器上;
- NameNode 根据配置文件中指定的备份数量及机架感知原理进行文件分配, 返回可用的 DataNode 的地址如:A, B, C;
Hadoop 在设计时考虑到数据的安全与高效, 数据文件默认在 HDFS 上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。 - Client 请求 3 台 DataNode 中的一台 A 上传数据(本质上是一个 RPC 调用,建立 pipeline ),A 收到请求会继续调用 B,然后 B 调用 C,将整个 pipeline 建立完成, 后逐级返回 client;
- Client 开始往 A 上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认64K),A 收到一个 packet 就会传给 B,B 传给 C。A 每传一个 packet 会放入一个应答队列等待应答;
- 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反方向上, 逐个发送 ack(命令正确应答),最终由 pipeline 中第一个 DataNode 节点 A 将 pipelineack 发送给 Client;
- 当一个 block 传输完成之后,Client 再次请求 NameNode 上传第二个 block,重复步骤 2;
hdfs读数据流程
![](https://img.haomeiwen.com/i9811180/3209d3f88ede990e.gif)
1、HDFS客户端创建FileSystem对象实例DistributedFileSystem,FileSystem封装了与文件系统操作的相关方法。调用DistributedFileSystem对象的open()方法来打开希望读取的文件。
2、DistributedFileSystem使用RPC调用namenode来确定文件中前几个块的块位置(分批次读取)信息。
对于每个块,namenode返回具有该块所有副本的datanode位置地址列表,并且该地址列表是排序好的,与客户端的网络`拓扑距离近的排序靠前。
3、DistributedFileSystem将FSDataInputStream输入流返回到客户端以供其读取数据。FSDataInputStream类是DFSInputStream类的包装。
4、客户端在FSDataInputStream输入流上调用read()方法。然后,已存储DataNode地址的DFSInputStream连接到文件中第一个块的最近的DataNode。数据从DataNode流回客户端,结果客户端可以在流上重复调用read ( )。
5、当该块结束时,DFSInputStream将关闭与DataNode的连接,然后寻找下一个块的最佳datanode。这些操作对用户来说是透明的。所以用户感觉起来它一直在读取一个连续的流。
客户端从流中读取数据时,也会根据需要询问NameNode来检索下一批数据块的DataNode位置信息。
6、一旦客户端完成读取,就对FSDataInputStream调用close()方法。
HDFS集群角色职责
NameNode职责
- NameNode是HDFS的核心,集群的主角色,被称为Master。
- NameNode仅存储管理HDFS的元数据∶文件系统namespace操作维护目录树,文件和块的位置信息。
- NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。
- NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
- NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从DataNode汇报中重建。
- NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。NameNode是Hadoop集群中的单点故障。
DataNode职责
- DataNode负责将实际数据存储在HDFS中。是集群的从角色,被称为Slave。
- DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。根据NameNode的指令,执行块的创建、复制、删除操作。
- DataNode会定期( df.s..heartbeat..ntecxal配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到
- DataNode发送的心跳,NameNode就会认为该DataNode失效。
- DataNode会定期向NameNode进行自己持有的数据块信息汇报,汇报时间间隔取参数dfs..blockrepoxt..intervalMsec,参数未配置的话默认为6小时.
- DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。
NameNode元数据管理
元数据管理概述
按存储形式分为和
两种,分别存在内存和磁盘上。
- 内存元数据
为了保证用户操作元数据交互高效,延迟低) NameNode把所有的元数据都存储在内存中,我们叫做内存元数据。内存中的元数据是最完整的,包括文件自身属性信息、文件块位置映射信息。
但是内存的致命问题是,断点数据丢失,数据不会持久化,因此NameNode又辅佐了元数据文件来保证元数据的安全完整。 - 元数据文件有两种:fsimage内存镜像文件、Edits log编辑日志。
namenode元数据管理.jpg
元数据本地存储目录:hdfs-site.xml配置文件中
网友评论