随着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的源代码,了解Replication的具体实现细节。同时,HBase提供了命令行工具以及Admin API来管理和监控复制状态。 总的来说,HBase的Replication功能是保证数据可靠性和一致性的...
《HBase权威指南》是一本深入探讨分布式列式数据库HBase的专业书籍,其源码提供了对HBase工作原理和实现细节的深入理解。HBase,作为Apache Hadoop生态系统中的一个关键组件,是为大规模数据存储设计的高性能、...
为了实现HBase到Solr的数据同步,我们可以使用HBase Indexer,这是一个由NGDATA开发的开源项目,它简化了这个过程,避免了手动编写同步代码的需求,从而减少了开发工作量和并发环境下的性能问题。在CDH 5.0.2版本中...
HBase是Apache软件基金会开发的一个开源、分布式、版本化、基于列族的NoSQL数据库,设计用于处理海量数据。这个“hbase-0.98.6.1-...总之,HBase 0.98.6.1的源码分析是理解大数据处理和NoSQL数据库设计的宝贵学习材料。
2. **列式存储**:不同于传统的行式存储,HBase以列族(Column Family)的形式组织数据,同一列族内的列可以共享相同的存储策略,有利于进行大数据分析。 3. **实时查询**:HBase支持实时读写操作,通过内存缓存和...
11. **Replication**:HBase 0.92.1版本已经支持数据复制,可以创建集群之间的数据备份,提高数据的可用性和容错性。 12. **故障恢复**:当Region Server出现故障时,Master节点会自动检测并重新分配其管理的Region...
2. **下载源码**:从Apache官方网站下载Hadoop2.7.5和HBase1.2.6的源码包,解压到指定目录。 3. **配置Hadoop**:在解压后的Hadoop目录下,修改`etc/hadoop`下的`core-site.xml`,设置`fs.defaultFS`为`hdfs://...
- ** Coprocessors**: 在Region Server上运行的用户自定义代码,可以扩展HBase的功能。 ### 7. 文件名称解析 从提供的压缩包子文件名来看,可能包含三个部分的教程: - "0401 HBase 初窥使用":这部分可能会介绍...
### Hadoop与HBase集群及单机安装配置详解 #### 一、背景介绍 随着大数据技术的发展,Hadoop和HBase成为了处理...这些步骤确保了Hadoop和HBase可以在单机或集群环境下稳定运行,为后续的大数据分析提供了坚实的基础。
要将其与Hadoop和Hbase集成,首先需要从GitHub获取最新版本的Nutch-2.x源码,并根据项目文档编译Nutch。 在`conf/nutch-site.xml`中,配置Nutch的基本参数,如抓取间隔、抓取策略等。还需在`conf/hadoop-site.xml`...
5. **实时同步**:当HBase中的数据发生变化时,通过HBase Indexer或SolrCloud的HBase Replication功能,确保Solr中的索引与HBase数据保持同步。 6. **查询优化**:利用Solr的查询API,可以进行复杂查询,如多字段...
HBase 的安装与配置需要根据实际情况进行选择,可以选择使用 HBase 的二进制包,也可以从源代码编译安装。HBase 的配置包括配置 RegionServer、HMaster、ZooKeeper 等组件的配置,以及 Region 的分配和负载均衡的...
8. **故障恢复**:备份系统必须具备故障恢复机制,例如通过HBase的region replication或HDFS的副本策略来保证数据的完整性。 9. **监控与维护**:系统可能会集成监控工具,如HBase的Metrics2和Zabbix,用于监控系统...
4. **编写代码**: 根据需求编写MapReduce作业或HBase客户端应用等。 5. **编译与运行**: 在Eclipse中编译项目,并通过Hadoop或HBase提供的工具提交并运行程序。 #### 七、总结 通过本文档的学习,读者可以了解到...
- **Replication**:使用HBase自带的复制功能来迁移实时增量数据,其优点包括错误重试机制和增量数据的不丢失保证。缺点包括不同版本间可能存在的兼容问题、bug修复和升级困难以及同步积压问题难以通过扩展节点解决...
- **HBase Replication**:展示HBase的复制机制。 - **HBase Aggregate**:介绍如何使用聚合函数进行数据统计。 - **HBase Parallel Scanning**:演示并行扫描数据的方法。 - **HBase Group-by**:展示如何使用...