HDFS设计简要

Hadoop1的问题:
namenode单点故障
namenode内存受限
Hadoop2的解决方案:HA 和联邦集群
HA:
jounalnode:负责同步activenamenode和standbynamenode的元数据。
zk和zkfc:负责监控namenode的状态,以及进行选举。

namenode启动流程
启动namenodeRpcServer
启动httpServer
加载元数据到内存
是否开启安全模式的三个条件:block块正常的数量占比,datanode存活节点占比,namenode保存元数据的空间是否足够,最小100M

datanode启动流程
注册:告诉namenode,自己的信息
心跳:周期性向namenode报告,namenode会返回操作指令。

namenode往磁盘写元数据时的设计
采用分段锁+双缓存
分段锁:只对内存操作加锁,性能不会受影响,磁盘写不加锁,因为这个过程比较耗时。
双缓存:namenode保存元数据时除了在内存中维持一份元数据,还要往磁盘写一份editlog(ha模式的话还要往journalNode写一份元数据),为了支持高并发,使用双缓存设计对写磁盘进行了优化,直接写磁盘比较耗时,namenode不是直接往磁盘写元数据,而是开了两个内存块,
往第一个里面写元数据,达到一定条件后,两个内存块进行内存交换,然后从第二块内存写到磁盘。

一些问题

  1. namenode 瞬时高并发导致短暂不可用
    原因:editlog双缓存的两块内存大小被写死为512k,如果遇到高并发请求,写满第一块内存的时间比第二块内存溢写磁盘的时间短,那么namenode主线程会wait,导致不可提供服务。
    解决方案:将双缓存内存大小改为可配置,适当提升大小,建议2M,即可解决。

  2. namenode fullgc 引起存储元数据到jounalnode时超时 导致进程退出
    解决方案:超时的时候判断是否full gc引起,stopWatch计算代码执行时间

  3. datanode锁优化,读写锁互斥导致性能不好,可以在高频调用的方法里细化加锁的粒度,提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值