随着HBase的大规模应用,HBase的容灾显得特别的重要。
本文主要从代码层面分析HBase replication (基于HBase0.94.3)
分为正常replication处理逻辑和RS Fail两块。
1.正常replication处理逻辑
首先是HLog的rollwrite方法,调用prelogRoll, 在ZK上加上新的Hlog
再调用postlogRoll,调用Replication的postLogRoll
/**
* Gateway to Replication. Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.
*/
public class Replication implements WALActionsListener,
ReplicationSourceService, ReplicationSinkService {
Replication 实现了WALActionsListener接口,类似于提供给RS来调用的一些方法,类似于gateway.
当有新hlog生成时,会调用相应的方法来处理,在此方法中,
@Override
public void postLogRoll(Path oldPath, Path newPath) throws IOException {
getReplicationManager().postLogRoll(newPath);
Replication会调用ReplicationSourceManager的postLogRoll->ReplicationSource的enqueueLog方法,将新的hlog加入到一个queue中,同时更新Metrics, ReplicationSource是一个线程,负责读取,解析,发送和记录Hlog
,同时会根据replication ration来随机选择几台slave 集群的region servers来,然后将数据push到对应的RS上,若超过无法联系slave的RS,就认为此RS已经挂掉了。
在ReplicationSource的run中,通过ZK获得对应Peer的RS,按照比例随机选择几台Slave RS放入一个LIST中,poll queue,获得一个hlog,open reader,按照配置项读取一定数目的entries存在HLog.Entry[] entriesArray中,然后在调用 shipEdits方法,选择之前LIST的一台 RS,然后通过RPC获得一台RS,然后调用
HregionServer的replicateLogEntries,
HRegionInterface rrs = getRS();
LOG.debug("Replicating " + currentNbEntries);
rrs.replicateLogEntries(Arrays.copyOf(this.entriesArray, currentNbEntries));
在RS的 replicateLogEntries方法中,会调用RS的Replication.replicateLogEntries
this.replicationSinkHandler.replicateLogEntries(entries);
最终会调到ReplicationSink的replicateLogEntries方法,此方法中,会将一个个Hlog.Entry解析出来,生成一个Map>,key为tablename, value为与此tablename相关的row, row生成的put或者deletec对象,然后根据各个table 调用ReplicationSink.batch,最终调用 Hbase的client.HTableInterface.batch 来将
相应的row写入到对应的table。
调用HregionServer的replicateLogEntries方法完成后,会设置hlog的position
------
2.RS Fail
NodeFailoverWorker
OtherRegionServerWatcher.nodeDeleted -> ReplicationSourceManager.transferQueues-> NodeFailoverWorker.run
在run中,在ZK上先lock Fail的RS,将Fail的RS对应的zk上的Hlog队列全部copy到自己下面,然后重新加入queue( ReplicationSource的enqueueLog方法 )
- 大小: 124 KB
- 大小: 39.2 KB
分享到:
相关推荐
用于hbase同步数据到es(replication机制)
NULL 博文链接:https://57832638.iteye.com/blog/1978504
HBase源码分析,详细的源码分析,专业的知识分析,绝对难得
HBase源码分析与开发实战视频技术讲解高阶视频教程以及课件,内部讲解资料 内容非常详细 值得想要提高薪水的人去学习了解
【No0057】HBase源码解析与开发实战
hbase源码,适合研究分析底层实现。对hbase的原理的理解很有好处
Hbase权威指南 随书源代码 源码包 绝对完整版 maven工程,带pom文件,可以直接作为一个完整工程导入eclipse等ide。
Hbase1.3.1源码
hbase-0.98.1-src.tar.gz hbase 0.98源码包
HBase实战 hbase in action 源码
hbase源码分析,了解hbase原理和api的简单实用。
HBase性能深度分析HBase性能深度分析
hbase权威指南源码
hadoop2.x、Hive、HBase源码解析+企业级应用视频,本人花钱买的视频,全部的还没有看,如果感觉老师讲的不好,请不要碰我,谢谢
曹龙(封神) 阿里云技术专家、架构师 专注在大数据领域,有6年分布式引擎研发经验 先后研发上万台Hadoop、...云HBase服务. 阿里大数据三大组件 • 云 最佳实践 • 云 部署模式 • 云 真实案例 • 云 内核特性 • 云 未来
HBase基本操作 增删改查 java代码 要使用须导入对应的jar包
主要针对那些架构师及开发人员而设计,希望他们能更好地理解大数据应用程序的部署。在这之前,你应该具备基本的Hadoop知识,包括所需组件的设置以及成功安装过Hadoop集群,我们不会在Hadoop的配置或NodeManager功能...
hbase 1.2.0源码,学习大数据nosql数据库时小白们可以用得到