1.HBase的基本介绍

a.Hbase是建立在hdfs之上的一个数据库,

b.不支持join等SQL复杂操作

c.支持的数据类型:byte[],

d.依靠横向扩展,一个表可以有上十亿行,上百万列。

e.面向列(族)的存储和权限控制

f.对于为空(null)的列,并不占用存储空间,是一个稀疏表。

2.HBASE的适用场景

海量数据、精确查询、快速返回

海量数据:指的是数据量的背景

精确查询:业务场景

快速返回:是业务对时效性的要求

3.Hbase和Hadoop之间的关系

HDFS:

海量数据存储,适合一次性扫描大量数据。

适合一次写入多次读取

不适合频繁更新的数据

HBASE:

适用一次扫描少量数据。

适合多次写入多次读取

支持数据更新

支持删除数据

4.Hbase与RDBMS的关系

RDBMS :

支持SQL查询

支持事务

支持Join

HBASE :

不支持SQL查询

不支持事务

不支持Join

5. Hbase详细架构

Client:

访问数据的入口,包含访问hbase的API接口,维护着一些cache来加快对hbase的访问

Zookeeper:

1.zookeeper的选举机制保证任何时候,集群中只有一个master

2.实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master

3.存储Hbase的schema

4.存贮所有Region的寻址入口

Master:

1.为Region server分配region

2.负责region server的负载均衡

3.发现失效的region server并重新分配其上的region

4.处理schema(元数据)更新请求

说明:Hmaster短时间下线,hbase集群依然可用,长时间不行。

Region server:

1.Region server维护Master分配给它的region,处理对这些region的IO请求

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

6. Row Key

最大长度是 64KB,完全可以自行设计。Hbase会对表中的数据按照rowkey排序(字典序)

7.列族Column Family

列族是表的schema的一部分,而列不是。(schema包含表名和列族)

每个列都所属于某一个列族。一个列族可以包含多个列。一个列族与列的关系是一对多。

8.时间戳

标记一个数据的不同版本,时间戳可以由hbase(在数据写入时自动 )赋值,hbase支持工程师自己定义时间戳。每个 cell中,不同版本的数据按照时间倒序排序

9.hbase本身提供数据回收机制

1.保存数据的最后n个版本

2.保存最近一段时间内的版本

10. Cell

存储数据的最小单位,由{row key, column( = + ), version} 唯一确定的单元确定一个精确的数据

11.VersionNum

数据的版本号,默认值为系统时间戳。

12. hbase物理存储

1.一个regionserver内部可以有多个region,这多个region可能来自多个表或一个表。一个region只能属于一个 regionserver.

2.一个regionserver只有一个HLog

3.一个region里面可以有多个store

4.一个store里面只有一个memstore

13.rtegion的切分

region按大小分割的(默认10G)。每个表一开始只有一个region,随着数据的增加,一个region逐渐变大,达到 10G,进行分裂,等分成两个region.

14. Memstorestorele

一个region由多个store组成,每个store包含一个列族的所有数据 Store包括位于内存的memstore和位于硬盘的 storefile

客户端检索数据时,先在memstore找,找不到再找storefile

15.HLog(WAL log)

每个Region Server维护一个Hlog,而不是每个Region一个.

Hlog的切分机制

1.当数据写入hlog以后,hbase发生异常。关闭当前的hlog文件

2.当日志的大小达到HDFS数据块的0.95倍的时候,关闭当前日志,生成新的日志

3.每隔一小时生成一个新的日志文件

16.读请求过程

meta表是hbase系统自带的一个表。里面存储了hbase用户表的元信息。

元信息为meta表内记录一行数据是用户表一个region的start key 到endkey的范围。

meta表存储在regionserver里。 具体存储在哪个regionserver里?zookeeper知道。

过程:

1.客户端到zookeeper询问meta表在哪

2.客户端到meta所在的节点(regionserver)读取meta表的数据

3.客户端找到region 获取region和regionserver的对应关系,直接到regionserver读取region数据

17.HBase的特征

1.海量存储:Hbase适合存储PB级别的海量数据,在几十到百毫秒内返回数据。

2.列式存储:这里的列式存储其实说的是列族存储列族理论上可以很多,但实际上建议不要超过6个

3.极易扩展:处理能力(RegionServer)的扩展,是基于存储的扩展(HDFS)

hbase在最初设计的时候就考虑了扩展性。

4.高并发:这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多

5.稀疏:在列数据为空的情况下,是不会占用存储空间的。

18.说说你对稀疏表的理解

19. 写请求过程

1.Client先访问zookeeper,找到Meta表,并获取Meta表元数据。确定当前将要写入的数据所对应的HRegion和 HRegionServer服务器。

2.Client向该HRegionServer服务器发起写入数据请求。

3.Client先把数据写入到HLog,以防止数据丢失,然后将数据写入到Memstore。

4.Memstore达到阈值,会把Memstore中的数据flush到Storefile中

5.当Storefile越来越多,达到一定数量时,会触发Compact合并操作,将多个小文件合并成一个大文件。

6.Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,变成两个文件。

说明:hbasez 支持数据修改(伪修改),实际上是相同rowkey数据的添加。hbase只显示最后一次的添加

20. region的分配过程

前提:一个region只能分配给一个region server

1.master记录了当前有哪些可用的region server。以及当前哪些region分配给了哪些region server,哪些region还没有分配。

2.当需要分配的新的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。

3.region server得到请求后,就开始对此region提供服务。

21. region server上线

前提:master使用zookeeper来跟踪region server状态。

1.当某个region server启动时,首先在zookeeper上的/hbase/rs目录下建立代表自己的znode。

2.master订阅了/hbase/rs目录上的变更消息,当/hbase/rs目录下的文件出现新增或删除操作时,master可以得到来自zookeeper的实时通知。因此一旦region server上线,master能马上得到消息

22.region server下线

前提:master使用zookeeper来跟踪region server状态。

1.当region server下线时,它和zookeeper的会话断开。

2.zookeeper而自动释放代表这台server的文件上的独占锁(znode)

3.zookeeper将变化发送给master

4.master 将挂掉的region server的region分配给其它还活着的regionserver

23.Hmaster的上线

前提:hbase集群中可以设置多个Hmaster,真正对外提供服务的只有一个

1.从zookeeper上获取唯一 一个代表active master的锁,用来阻止其它master成为真正的master。

2.扫描zookeeper上的/hbase/rs节点,获得当前可用的region server列表。

3.master和每个region server通信,获得当前已分配的region和region server的对应关系。 4.master扫描.META.表,计算得到当前还未分配的region,将他们放入待分配region列表。

24.Hmaster下线后的影响

master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群没有影响。表的数据读写还可以正常进行。

无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行StoreFile的 合并(region的split可以正常进行) 当hmaster下线后,启动Zookeeper的选举机制,选出新的Hmaster,新的Hmaster上线,执行上线流程。

25.ush机制 

全局的memstore的flush机制默认为堆总大小(多个memstore 多个region)的40%,超过该大小会触发flush到磁盘的操作,会阻塞客户端读写,flush将所有的memstore全部flush.

单个的memstore默认为数据达到128M或1h或者数据为堆大小 0.95倍将会flush. memstore默认将会先提前flush 5M.(先flush一小部分,等后面数据达到阈值在flush后 面的数据) 这样会比一次flush效率高

hbase不建议配置过多列族:过多的列族会消耗大量的内存,同时数据在flush时消耗磁盘IO. 一个regionserver续写操作可用堆内存的80%,读取占用40% ,写入占用40%。这两个参数直接影响hbase读写性能。

26.compact机制

默认3个小的storeFile文件达到三个,合并成大的Storefile文件。

27.split机制

默认一个HFile达到10Gb的时候就会进行切分

28.hbase预分区的优点

1.增加数据读写效率:数据分布在多台regionserver节点

2.负载均衡,防止数据倾斜:当数据时离散的发送时,预分区可以解决数据倾斜

3.方便集群调度region: 分布在多个节点便于调度

4.优化Map数量    

29.rowKey的获取方式

1.通过rowkey直接查找

2.通过startkey endkey 范围查找

3.全表扫描

30.rowkey的长度原则

最大64K,建议越短越好(在保证业务需求的前提下),不要超过16个字节.

31.rowkey散列原则

建议将rowkey的高位(左边)作为散列字段, 低位(右边)放时间字段,这样将提高数据均衡分布在每个 RegionServer,以实现负载均衡的几率。

若不按照此原则:

让时间戳作为高位,数据将按照时间的顺序进行存储会引发热点问题

32.什么是热点问题

当有一点时间业务数据爆炸增长时,这个阶段的数据将存储在少数的节点上。

33.如何解决热点问题

原则:将分散的数据,放在rowkey的高位

1.哈希(随机数):将哈希值放在高位

2.反转:反转固定长度或者数字格式的数据(时间戳反转、手机号反转,订单号反转)

3.加盐:本质时是加随机数,并且放在高位。

Review Hbase记忆相关推荐

  1. HBase 记忆内容(简答题)

    1.HBase的基本介绍 a.Hbase是建立在hdfs之上的一个数据库, b.不支持join等SQL复杂操作 c.支持的数据类型:byte[], d.依靠横向扩展,一个表可以有上十亿行,上百万列. ...

  2. 考试教训总结[学员-路过]

    考试教训总结[学员-路过] 作者:神州巨龙 文章来源:本站原创 点击数: <script language=javascript src="/Article/GetHits.asp?A ...

  3. JAVA_基础部分_综合篇

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  4. hbase shell命令_HBASE的shell操作

    前言 我们知道hbase其实是架构在hdfs上的一个分布式数据库,既然是数据库那么这篇文章就主要围绕着我们最熟悉的增删改查来做.当然了,其实hbase的shell操作在真实的企业中几乎不用,这个很简单 ...

  5. Google是如何做Code Review的?| CSDN原力计划

    作者 | 帅昕 xindoo 编辑 | 屠敏 出品 | CSDN 博客 我和几个小伙伴一起翻译了Google前一段时间放出来的Google's Engineering Practices docume ...

  6. Hbase 和 MySQL 的区别是什么?一文深度对比!

    欢迎关注方志朋的博客,回复"666"获面试宝典 MySQL + HBase是我们日常应用中常用的两个数据库,分别解决应用的在线事务问题和大数据场景的海量存储问题. 从架构对比看差异 ...

  7. 万字详文告诉你如何做 Code Review

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|机器学习实验室 前言 作为公司代码委员会 golang 分 ...

  8. 看完这篇,code review 谁敢喷你代码写的烂?怼回去!

    我将常用的软件设计模式,做了汇总,目录如下: (考虑到内容篇幅较大,为了便于大家阅读,将软件设计模式系列(共23个)拆分成四篇文章,每篇文章讲解六个设计模式,采用不同的颜色区分,便于快速消化记忆) 本 ...

  9. 在腾讯,如何做 Code Review?

    作者:cheaterlin,腾讯 PCG 后台开发工程师 前言 作为公司代码委员会 golang 分会的理事,我 review 了很多代码,看了很多别人的 review 评论.发现不少同学 code ...

最新文章

  1. 如何删除一个员工编号及其全部主数据和事务数据?
  2. 夯实基础js - 语句篇
  3. Java命令学习系列(二)——Jstack
  4. XML文档的基本操作
  5. 聊一下C#开发者如何过渡到JAVA 开发者
  6. python输出总字符个数_python每次处理固定个数的字符的方法总结
  7. delphi idtcpclient和idtcpserver的心跳包
  8. 某企业虚拟化平台时间同步异常排查
  9. OpenOffice.org 2.0已经发布了。
  10. 面向对象第一单元(表达式求导)总结体会
  11. 火力发电厂卸料车系统无线改造
  12. 用连接数据库的方式读取excel
  13. 支付宝小程序、百度小程序、微信小程序、今日头条小程序技术分析
  14. 【观察】打造智能决策“新引擎”,杉数科技勇闯“无人区”
  15. 如何入职阿里前端岗?
  16. 掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵
  17. 外贸软件进出口内贸综合型管理解决方案
  18. STM32单片机低功耗剖析
  19. 网游人才市场两难困境:招聘难,应聘也难
  20. android WebView详解,常见漏洞详解和安全源码

热门文章

  1. 贪心算法适用条件_【算法】贪心算法
  2. 64位机器使用Chrome下载文件总是损坏
  3. html 点击新建窗口,【单选题】在HTML中,若实现单击超链接时,弹出一个新的网页窗口,下列的()选项符合要求。 A. 节目 B. 节目 C. 节目 D. 节目...
  4. Go: go mod获取第三方依赖包unknown revision xxx错误解决
  5. 计算机知识电子小报,电脑小报的制作方法图解步骤
  6. 三极管的Q点/静态工作点
  7. 魔域口袋版服务器维护,《魔域手游》13日例行维护
  8. 问题 C: EXCEL排序
  9. http://blog.163.com/ecy_fu/blog/static/4445126200921512556887/
  10. 【转】Linux诞生记