HDFS的运行原理,如何实现HDFS的高可用

1 HDFS的运行机制

HDFS集群中的节点分为两种角色,一种角色负责管理整个集群的元数据,是名称节点(name node);另一种角色负责存储文件数据块和管理文件数据块,是数据节点(datanode)。

1.1 NameNode

      1.1.1名称节点负责响应客户端的请求,负责管理整个文件系统的元数据。

       1.1.2HDFS的内部工作机制对客户端是透明的,客户端对HDFS的读、写操作都必须先向name node申请。所以元数据是关键。

       1.1.3负责维持文件的副本数量

       1.1.4 为了保证集群的元数据不丢失,生产环境下需要配置辅助名称节点(secondary name node,简称2NN),目的是帮助  NameNode 合并编辑日志,减少  NameNode 启动时间,万一name node的元数据丢失就可以从2NN恢复元数据。

       1.1.5 名称节点可用的前提是此节点运行名为“NameNode”的进程。

 

 

1.2 数据节点Data Node

1.2.1 负责存放被切割后的文件块。文件在data node的存储单位是块(block)。

1.2.2 如果hadoop集群是完全分布式模式,那么一个文件的每一个块必须有多个副本,存放在不同的datanode上。当客户端把某个文件写入HDFS时,首先按照固定的块大小(block size)把该文件切成若干个块,再分布式地存储在若干台data node上。

1.2.3 data node通过心跳信息定期地向name node汇报自身保存的文件块信息。

1.2.4 数据节点可用的前提是此节点运行名为“DataNode”的进程。

 

下面介绍一下客户端向HDFS写数据和读数据的流程,hadoop集群规模以“1台namenode + 3台data node”为例。

1.3 客户端向HDFS写数据的流程

1.3.1 客户端和name node通信,name node检查目标文件是否已存在,父目录是否存在,检查通过以后name node通知客户端可以写入

1.3.2 客户端向name node请求上传文件的第一个块(block1),询问name node应该把block1上传到哪些data node主机上。客户端每传一个block都要向name node请求

1.3.3 name node把3台data node服务器信息返回给客户端。基于可靠性的考虑,每个文件块都有副本,每个副本分别存放在不同的data node服务器上。副本存放的data node选择策略:首选在本地机架的一个节点上存放副本, 第二个副本在本地机架的另一个不同节点,第三个副本在不同机架的不同节点上

1.3.4 正式上传之前,客户端请求与3台中的其中一台(dn1)建立传输通道,dn1又和dn2主机建立传输通道,dn2又和dn3建立传输通道

1.3.5整个传输通道建立完成后,客户端把block1从磁盘读出来放到本地缓存, 开始向dn1上传block1,上传时以package为单位进行传输,package默认大小64kb。dn1每收到一个package就会复制一份传给dn2,dn2再复制一份传给dn3。

1.3.6 当block1传输完成后,客户端再次向name node申请上传此文件的第二个块block2

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值