HBase存储特点



* Client

1. 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。

* Zookeeper:

1. 选举集群中的Master,Master与RegionServers 启动时会向ZooKeeper注册。

2. 存储所有Region的寻址入口。

3. 实时监控Region server状态并实时通知Master。

4. 存储HBase的schema和table元数据。

5. 使Master不存在单点故障。

* Master

1. 在Region Split后,为Region server分配region。

2. 管理HRegionServer的负载均衡,调整Region分布。

3. 发现失效的Region server后重新分配其上的region,并负责Regions迁移。。

4. 管理用户对table的增删改查操作。

* Region Server

1. Regionserver维护region,处理对这些region的IO请求,向HDFS文件系统读写数据。

2. Regionserver负责切分在运行过程中变得过大的region。

* Region

1. table按照行分割成若干Region,每个Region对应table中的一个Region。

2. Region由多个HStore组成。

* HLog

1. 类似mysql的binlog,数据会先写到WAL上,然后再放到内存中,数据恢复。

2. 已经持久化到StoreFile的HLog会定期被删除。

* HStore

1. HBase的存储核心,由MemStore和StoreFile组成。

2. 每个HStore对应Table的一个列族的存储。

* MemStore

1. 数据不直接写磁盘而是先写到MemStore,当满了才会Flush到StoreFile中。

2. 底层由HFile实现。

3. 数据只需写入到此内存即可返回,快速的插入操作。

* StoreFile

1. StoreFile文件数到一定阀值会触发Compact合并操作,多个StoreFile变成一个StoreFile。

2. 所有数据操作都是添加操作,保证I/O,而对于数据更新/删除都是在后续compact过程中完成。

底层存储

HBase支持很多文件系统的存储。

1. 操作系统原生文件系统。

2. HDFS文件系统。

3. 其他文件系统。

HDFS可靠性高及其同属同个生态,选择HDFS作为存储。

HBase 如何寻址

寻址过程大致为client -> -ROOT- -> .META. -> RS ->region -> rowkey。

  1. client通过zookeeper的root-region-server节点获取哪个Server管理-ROOT-表,包含该机器的IP地址和端口。
  2. 接着访问-ROOT-表,该表只有一个Region且不会split,每行记录了.META.表的一个region信息,以及这个region的startkey和endkey,查找到.META.表包含要查的rowkey记录的Region的ip和端口。
  3. 接着访问该ip和端口的.META.表,根据rowkey找到用户表数据存放对应的Region的机器信息,根据rowkey查找对应的regionserver和region。最后到对应的region找到value。
  4. 根据查到的用户表信息到对应机器上查找数据。

客户端会缓存查询过的rowkey的地址。

client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问region server),master仅仅维护table和region的元数据信息,负载很低。

HBase 的性能、如何扩展

HBase的插入性能很好,查询还不错,腾讯给出的数据是经过调优在百亿数据级别80%以上数据能在20ms查到。

详细的一些数据后面在写代码阶段会给出。

当数据峰值接近系统设计容量时,可以简单的通过增加服务器的方式来扩大容量。某种程度上来说,这个动态扩容过程无需停机,HBase系统可以照常运行并提供读写服务,完全实现动态无缝无宕机扩容。

balance模式下,会自动将数据迁移到新机器上,适合中小集群,迁移过程大量消耗机器资源。

非balance模式下,新写入文件写到新机器上。

运维

  1. 官方的命令行或二次开发,rest接口。官方有原生监控平台。
  2. BigInsights。

最后的说明

hbase优势在于接近线性的任意水平扩展,不必在单机上与redis性能太较真,看自己场景选择。

HBase作为存储方案的更多相关文章

  1. Redis百亿级Key存储方案(转)

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  2. Redis百亿级Key存储方案

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  3. HBase 数据迁移方案介绍

    一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...

  4. Hadoop小文件存储方案

    原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...

  5. HBase 数据迁移方案介绍 (转载)

    原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  6. BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

    一.引言 时间到了2019年,数据库也发展到了一个新的拐点,有三个明显的趋势: 越来越多的数据库会做云原生(CloudNative),会不断利用新的硬件及云本身的优势打造CloudNative数据库, ...

  7. HBase 数据迁移方案介绍(转载)

    原文链接:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  8. MongoDb gridfs-ngnix文件存储方案

          在各类系统应用服务端开发中,我们经常会遇到文件存储的问题. 常见的磁盘文件系统,DBMS传统文件流存储.今天我们看一下基于NoSQL数据库MongoDb的存储方案.笔者环境 以CentOS ...

  9. HTML5的五种客户端离线存储方案

    最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie.WebStorage.IndexedDB以及Fi ...

随机推荐

  1. ES6(数值)

    数值处理新增特性: 1.新增方法 2.方法调整 1.二进制和八进制 二进制以 0b 开头,其中B和b都可以:八进制以 0o 开头,其中O和o都可以. 2.判断数值是否有效(有限) NaN为非数字,故为 ...

  2. Spring中@Autowired与@Resource的区别

    1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必 ...

  3. Oracle的dual

    1.dual 确实是一张表.是一张只有一个字段,一行记录的表. 2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3.他的存在,是为了操作上的方便.因为select 都是要有特定对象的.但如果我们 ...

  4. 跨域资源共享CORS与JSONP

    同源策略限制: 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说 ...

  5. day07 Cookie 和 Session(非常重要)

    day07 Cookie 和 Session 1. 会话技术 2. cookie 的方法和 cookie 案例-显示用户上次访问网站的时间 3. cookie 的细节 - 删除 cookie 4. S ...

  6. 去除html标记和替换script标记

    1: /// <summary> 2: /// 去除HTML标记 3: /// </summary> 4: /// <param name="NoHTML&qu ...

  7. java基础复习+大数运算

    String: Array: 下面分别是大数加法,加法,乘法,取模

  8. python笔记七(递归函数)

    在介绍递归函数之前,我们先介绍以下递归函数的使用有以下特征: 1.递归函数就是函数在函数体内部调用本身 2.递归函数的运算规模要不断减小,这样才是可以运算的 3.递归的层数不要超过999,因为函数调用 ...

  9. ACM Super Jumping! Jumping! Jumping!

    Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is very popular i ...

  10. Jmeter(二)_基础元件

    测试计划(Test Plan) 它用来描述一个测试方案,包含与本次性能测试所有相关的功能.也就说本次测试的所有内容是于基于一个计划的. "函数测试模式"复选框,如果被选择,它会使J ...