`
猫耳呀
  • 浏览: 160761 次
社区版块
存档分类
最新评论

HBase read replicas 功能介绍系列

 
阅读更多

摘要: 主要介绍HBase 在读可用性这块做的read replica 功能的大概介绍,包括:基本使用,读写流程的大概链路,设计的折中等等。

HBase read replicas

1.概述

对于这个模块打算有几篇文章组成一个系列,详细的介绍这个功能,大概分read replicas综述(本文)、正常情况下的读写流程分析、异常情况下的读写流程分析;

本文主要介绍的有:概述、读流程链路、写流程链路、如何使用read replicas,example。我们知道HBase是一个强一致的系统,最初是因为一个regionserver下负责的多个region的读写都是经历这个regionserver去做处理,这样的话,该regionserver是单点的做读写,不会存在数据不一致的问题。但是相应的该regionserver如果挂掉了,会造成该regionserver负责的region都不能提供服务。这个降低了整个流程的服务可用性。那么为了解决该问题,HBase引入了 Read Replicas的功能,也就是对于一个region在多个节点上都有对应的副本,HBase可以通过balance保证各个region的各个副本在不同的机器,机架上。我们给主region 一个数字为0的replica_id,其余的副本都可以叫做secondary regions,他们的对应replica_id 是1、2、…,所有的写请求都是replica_id为0的节点(regionserver)做处理,然后异步的发送到1、2、…等节点。有了这个功能HBase的读流程的可用性就由原来的3个9变成了4个9。当然有利也有弊,我们做设计就是在做tradeoff,引入这个功能的话,对系统读取数据的一致性有一点影响。不过这个主要看业务方可否接受,为了提高服务可用性,牺牲一点点数据一致性是否可以考虑。

2.读流程链路

在HBase进行Get的时候,构造的Get对象里面有一个Consistency的子项,默认是Consistency.STRONG,除此之外还有一个Consistency.TIMELINE的选项。我们文章涉及到的replicas主要和这个东西有关系。如果你希望让你的读操作具有更高的可用性,你就需要在Get对象进行一个设置,设置它的Consistency属性为TIMELINE。那么通过这个设置的话,读请求就先会去replica_id为0的主replica上面去读数据,如果在一定时间内,HBase client没有等到主的响应,那么就会并发的发送请求到备份的replicas,这个时间默认是10ms,可以通过在client端的配置文件里面设置hbase.client.primaryCallTimeout.get来配置。那么你可能就会问了,这个数据可能不是主上面的数据,可能是replica_id为1、2、等上面的数据,那么这个数据不就存在老数据的可能么?对!HBase 提供了一个接口用于判别数据是不是最新的,叫做isStale()。

但是如果用户使用的是Consistency.STRONG这种的话,就不会存在读到老数据的可能性。世上很难有完美的方案,那么怎么去做选择,就是需要业务基于自己的需求做一定的选择了。这个方案的有点是:提高了读服务的可用性,同样的会引入一些弊端,造成一定的内存开销以及网络开销,因为数据需要在replicas上进行存储,也存在请求到replicas上的可能性,那么就会增加网络开销;

3.写流程链路

上面概述里面提到我们需要把HBase的写的数据先经replica_id为0 的节点,然后异步分发到replicas上面去,那么分发的过程是异步的,不然存在影响整个写流程的体验。既然设计的是异步的,在HBase 里面存在2阶段不同的实现方案,分别是在HBase1.0+和HBase1.1+这2个大版本上面实现的;在HBase的官方分别叫做: StoreFile Refresher 和 Asnyc WAL replication。

3.1.StoreFile Refresher

这种机制就是一个regionserver上一个特定的线程,阶段性的将主replica上的store file 刷新到secondary replicas上面。开启这个功能的配置是在HBase的里面把hbase.regionserver.storefile.refresh.period进行一个配置,单位是毫秒级别的。通过设置这个,定时刷新线程会看到主上的memstore 的flush,以及compaction,bulck load 操作。那么对于内存里面的数据,可能就会在备份上面读不到。

3.2.Asnyc WAL replication

在HBase1.1+的版本里面新的一种数据被复制到secondary replicas的方式是:类似HBase replication,但是是单集群内部replicas之间的数据复制,由于主和secondary replicas之间的数据共享一份持久化数据,那么数据备份到replicas的时候是需要保证内存之间的数据是相同的。主在做写,compaction,bulkload等操作的时候会写数据到wal log,然后通过这个机制secondary replicas会观察到变化,然后讲数据在本地内存回放。

这个功能默认情况下是被关闭的,通过设置“hbase.region.replica.replication.enabled” 为true即可开启这个功能。

4.使用配置和使用步骤

如果要使用功能的话,分服务端和客户端,下面这份配置是服务端的:

客户端上面的配置更新:

新建一张具有region replica 的表:shell命令:

java的api操作:

读取数据:shell命令:

java的api操作:

后续

后面的话会继续从源码级别进行该模块的分析,敬请期待!

原文链接

分享到:
评论

相关推荐

    HBase Java API类介绍

    本文将详细介绍HBase Java API中的几个核心类及其功能。 #### 二、HBase Java API类介绍 ##### 1. HBaseConfiguration **关系**:`org.apache.hadoop.hbase.HBaseConfiguration` **作用**:用于配置HBase的相关...

    HBase介绍介绍介绍

    【HBase介绍】 HBase是一种NoSQL数据库,它基于Apache Hadoop构建,设计为高度分布式、多版本的列式存储系统。HBase旨在处理大型数据集,提供对这些数据的实时读写访问,尤其适用于大数据量存储和具有特定查询模式...

    HBASE基础应用的介绍

    ### HBase基础应用介绍 #### 一、HBase概述 HBase是Apache Hadoop生态系统中的一个重要的组件,它提供了一种分布式、可扩展的大规模数据存储解决方案。HBase基于Google Bigtable论文的思想实现,旨在为海量结构化...

    HBase中Coprocessor的介绍以及实际业务场景中的使用.pdf

    毕业于浙江大学,现负责快手HBase的维护与研发,支持视频、特征、用户画像、IM等海量数据的存储;一直致力于大数据基础架构和hadoop生态的学习与研发;同时在hbase与hdfs的基础上,和团队一起研发了大数据存储与分析...

    hbase安装和基本介绍

    ### HBase 安装与基本介绍 #### 一、HBase 概述 HBase 是一个分布式的、面向列的开源数据库,它旨在为结构化数据提供高效存储和检索服务。HBase 的设计灵感来源于 Google 的 Bigtable 论文,并且它作为 Apache ...

    HbaseTemplate 操作hbase

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...

    HBase写性能优化策略

    本文旨在提供一系列优化策略,以提高HBase的写入效率和数据写入的稳定性。 首先,要理解HBase写入数据的基本流程:数据首先顺序写入到HLog(WAL),这是一个写入操作的日志文件,用以确保数据的持久化和系统的容错...

    Hbase数据库2.0.0版本介绍

    Hbase数据库2.0.0版本介绍 Assignment Manager v1 root of many operational headaches ● Redo based on custom “ProcedureV2”-based State Machine ○ Scale/Performance ○ All Master ops recast as Pv2 ...

    HBase性能深度分析

    ### HBase性能深度分析 HBase,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...

    hbase介绍以及详细讲解

    HBase 是一个分布式的、基于列族的NoSQL数据库,它是Apache软件基金会的顶级项目,设计用于处理海量数据。HBase构建在Hadoop之上,旨在为非结构化或半结构化数据提供高吞吐量的随机读写能力,特别适合大规模大数据...

    Hbase基本知识介绍

    ### HBase基本知识介绍 #### 一、HBase概述 HBase是Apache Hadoop生态系统中的一个重要的组件,它提供了一种分布式、可扩展的大规模数据存储解决方案。HBase基于Google Bigtable论文设计,并且利用Hadoop HDFS作为...

    HBase官方文档

    HBase具有高扩展性、高性能、以及灵活的数据模型。下面详细介绍HBase的核心知识点。 ### 入门 入门部分包括了介绍和快速开始两小节。在介绍中,对HBase进行了基础的定义和描述,提到其作为一种NoSQL数据库,如何...

    HBase技术介绍.docx

    它具备高可靠性、高性能和可扩展性等特点,能够在成本相对低廉的硬件设备上构建大规模的数据存储集群。 #### 二、HBase的核心特性及原理 ##### 1. **基于Hadoop生态系统** - **HDFS(Hadoop Distributed File ...

    hbase性能测试.docx

    在对HBase进行性能测试时,我们关注的关键指标包括数据读写速度、系统资源消耗以及MapReduce框架的运行效率。以下是对文档中提到的几个重要性能指标的详细解读: 1. **顺序写入(Sequential Write)**: - **FILE:...

    HBase学习利器:HBase实战

    - **第7章:构建实际应用**:通过一系列具体的案例研究,展示如何使用HBase构建复杂的应用程序,涵盖了从需求分析到系统设计、实现再到测试和部署的全过程。 #### 三、HBase核心技术详解 **1. 数据存储模型**:...

    (转)HBase技术介绍

    【HBase技术介绍】 HBase,全称是Apache HBase,是一个分布式的、面向列的开源数据库,基于Google的Bigtable设计思想构建于Hadoop文件系统(HDFS)之上。它是Apache软件基金会Hadoop项目的一部分,专为处理大规模...

    hbase社区2018精选资料

    另外,HBaseCoprocessor的实现与应用也是重要的知识点,Coprocessor提供了在服务器端扩展HBase功能的能力。 运维指南部分讲解了HBase2.0的新特性,比如In-MemoryCompaction,这是一个内存压缩技术,有助于提升数据...

    hbase用于查询客户端工具

    1. **HBase Shell**:这是HBase自带的一个命令行接口,用户可以通过Java REPL(Read-Eval-Print Loop)与HBase交互。HBase Shell提供了创建表、删除表、插入数据、查询数据等基本操作,同时也支持复杂的条件查询和...

Global site tag (gtag.js) - Google Analytics