携程面经1

面经

HDFS读写流程

1.读流程

  1. 客户端向NameNode发起读请求
  2. (如果存在)NameNode返回一批block地址
  3. 客户端与第一个block的拓扑距离最近的节点建立连接以packet(64kb)的单位读取数据块。
  4. 一个block读取完成后客户端会断开与该DataNode的连接,然后与下一个数据块的最近节点建立连接。
  5. 所有数据块读取完成后会在客户端拼接为一个完整的文件。
  6. 如果在读取过程中一个节点读取出错,客户端会去读取下一个拓扑距离最近的节点,该节点不再连接。

2.写流程

  1. 客户端向NameNode发起写入操作请求,NameNode对请求进行检测:文件是否已存在,父目录是否已存在,是否有权限进行写入。返回检查结果。
  2. 客户端将文件切分为128M大小的Block,向NameNode请求上传第一个Block
  3. NameNode返回一个DataNode集合(拓扑距离排序)
  4. 客户端与距离最近的DataNode通过RPC调用建立连接,后续节点通过同样的方式建立连接形成pipeline。
  5. 客户端将第一个数据块读入缓存中,在缓存中将数据块切分为大小为64kb的packet,数据以packet的形式在pipeline上传输。
  6. 数据块传输完毕后会在pipeline上反向传输ack,最终由DataNode1将确认消息ack传给客户端
  7. 重复以上步骤直到所有数据块传输完毕。

NameNode HA的实现原理

NN的HA主要由两个机制实现:共享editLog机制和ZKFC对namenode状态的控制
共享editLog机制:HA中有多台NN节点,其中有一台为ActiveNN,其他的节点为StandbyNN。Active节点负责对外界提供读写服务,并将操作日志向共享文件系统(QJM,NFS)进行同步,standby节点负责从共享文件系统中同步数据,以便于active节点异常时快速恢复。当active节点宕机或与共享文件系统连接超时时,共享文件系统会对该NN进行fencing,避免发生脑裂。DN需要向所有NN都发送数据块处理报告。为了实现热备,每个NN上都运行了一个轻量级故障转移控制器zkfc。

ZKFC对NameNode状态控制:
主要由两个组件实现:HealthMonitor,ActiveStandByElector
HealthMonitor:负责监视NN的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值