遗留问题:
数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时,系统会在zookeeper中记录一个redo point,表示这个时刻之前的变更已经持久化了。(minor compact)
当系统出现意外时,可能导致内存(MemStore)中的数据丢失,此时使用Log(WAL log)来恢复checkpoint之后的数据。
 
这个checkpoint 和 redo point 怎么用?
 
redo point 记录持久化到那里了
 
先写Hlog再写内存?
些Hlog不影响速度吗?不是随机读写,是顺序写入,连续写入 ; 异步
 
Regin 信息放在zookper中,HBAse的元数据信息,表,列族信息也在zookper中
 
hbase中的数据flush到hfile之后还修改吗?这个时候如果再更新是怎么做的?又是怎么做到更新后依然排序的?
物理存储
split
compact
为什么HBASE快
HBase是无类型的数据库
 
 实际应用中强烈建议使用单列族? 为什么
Zookeeper负责存储Schema信息,包括有哪些表,表有哪些column family,但是HMaster负责处理schema的更新处理请求,他们怎么配合的?
 
无法进行region的合并,但是split可以进行,因为split只有HRegion server参与,所以合并是由Hmaser做的,但是split由hregion server自己完成?、
 
 
1.数据模型
 
HBase以表的形式存储数据。表有行和列组成,列划分为若干个列族,如图所示:
 
 
  • 逻辑数据模型
 
  • 物理数据模型
 
2.物理存储 
 
  • HBase所有行按照Rowkey进行字典排序,Table在行的方向分割为多个region
 
    
  • Region 按照大小进行分割,每个table最初只有一个Region,随着数据的不断插入,Region不短增大,当增加到一定阈值后,从中间分裂成两个Region。 Table中的数据不断增加,就会有越来越的Region
 
 
  • Region是HBase分布式存储和负载均衡的最小单元,一个region只能在一个RegionServer上。
 
 
  • Region虽然是分布式存储的最小单元,但不是存储的最小单元(内部有更详细的结构)。内部划分为多个Store,一个Store对应一个Column Family。 Store内部又分为一个MemStore和零到多个Storefile。Storefile以Hfile的形式存储在HDFS上
 

 
  • 每个Region server 管理大约1000个HRegion。(Why:这个1000的数字应该是从BigTable的论文中来的(5 Implementation节):Each tablet server manages a set of tablets(typically we have somewhere between ten to a thousand tablets per tablet server))
 
3.系统架构
 
 
 
下面的架构图来自于《An In-Depth Look at the HBase Architecture》 
 
这个架构图比较清晰的表达了HMaster和NameNode都支持多个热备份,使用ZooKeeper来做协调;
ZooKeeper并不是云般神秘,它一般由三台机器组成一个集群,内部使用PAXOS算法支持三台Server中的一台宕机,
也有使用五台机器的,此时则可以支持同时两台宕机,既少于半数的宕机,然而随着机器的增加,它的性能也会下降;
RegionServer和DataNode一般会放在相同的Server上实现数据的本地化。
 
 
系统架构细化如下:
也可以细化如下:
 
 
  • Client
Client 包含访问HBase的接口
维护cache加快对HBase的访问
 
  • Zookeeper
 
保证集群中只有一个HMaser;
监控HRegion Server的状态,及时将上线下线的HRegion Server信息通知HMaster;
记录所有HRegion的寻址入口;
存储Schema信息,包括有哪些表,表有哪些column family
 
 
  • HMaster
 
为 HRegion 分配HRegion Server;
负责 HRegion Server的负载均衡;
发现失效的HRegion Serve,并重新分配其上的Region;
GSF上的垃圾文件回收;
处理Schema的更新处理请求
 
  • Region Server
处理region的IO请求
对到达阈值的HRegion进行分裂
 
所以Client访问HBase的数据不需要HMaster的参与。从Zookeeper中寻址,然后到HRegion Server上进行读写操作。

 
 
4 读写过程
 
  • 写入
首先在HLog中记录日志,然后写入到MemStore中,直接返回成功,不需要等待写入HDFS的结果,所以速度很快。
 
MemStore中的记录达到一定阈值时,会创建一个新的MemStore,并将旧的MemStore添加到Flush队列,有专门的线程负责Flush到StoreFile中去,同时在Zookeeper中记录redo point,表明这之前的记录都已经持久化过
 
写入到StoreFile中的文件只能写入,不能修改(由HDFS的特性决定的), 因此数据修改的过程是不断创建Storefile的过程,因此对应于同一记录,可能有很多历史版本,很多可能是垃圾数据。当Storefile个数到一定阈值时,系统会进行合并,将同一记录的垃圾数据清理掉。 当合并的文件大小超过一定阈值时,进行分裂,防止文件过大。
 
系统崩溃时,系统会根据redo point /check point? 和HLog中的记录来恢复MemStore中丢失的数据
  
  • 读出
读出的数据是MemStore和Storefile中的数据的总和。 由于是按照Rowkey排序的,所以合并也很快。而且真正的合并是索引的合并,所以很快
 
7 分裂
8 压缩 
参考文献:
https://mapr.com/blog/in-depth-look-hbase-architecture/
http://www.blogjava.net/DLevin/archive/2015/08/22/426877.html

HBase 原理的更多相关文章

  1. HBase笔记:对HBase原理的简单理解

    早些时候学习hadoop的技术,我一直对里面两项技术倍感困惑,一个是zookeeper,一个就是Hbase了.现在有机会专职做大数据相关的项目,终于看到了HBase实战的项目,也因此有机会搞懂Hbas ...

  2. Hbase原理

    Hbase原理 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...

  3. HBase原理、设计与优化实践

    转自:http://www.open-open.com/lib/view/open1449891885004.html 1.HBase 简介 HBase —— Hadoop Database的简称,G ...

  4. 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理

    第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...

  5. 1、Hbase原理分析

    一.Hbase介绍 1.1.对Hbase的认识 HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随机读写操作,HBase正是为此而出现. HBase参考 Google 的 Bigtable ...

  6. HBase原理 – 分布式系统中snapshot是怎么玩的?(转载)

    snapshot(快照)基础原理 snapshot是很多存储系统和数据库系统都支持的功能.一个snapshot是一个全部文件系统.或者某个目录在某一时刻的镜像.实现数据文件镜像最简单粗暴的方式是加锁拷 ...

  7. 【转】HBase原理和设计

    简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方 ...

  8. HBase原理和设计

    转载 2016年1月10日:http://www.sysdb.cn/index.php/2016/01/10/hbase_principle/ 简介 架构 数据组织 原理 RS定位 region写入 ...

  9. HBase原理解析(转)

    本文属于转载,原文链接:http://www.aboutyun.com/thread-7199-1-1.html   前提是大家至少了解HBase的基本需求和组件. 从大家最熟悉的客户端发起请求开始讲 ...

  10. HBase之一:HBase原理和设计

    一.简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠 ...

随机推荐

  1. jquery on事件

    可以给后添加的动态元素绑定事件

  2. Cacti 加入多台主机带宽汇聚

            前面我写了一个cacti加入主机带宽监控的博客.能够參考http://blog.csdn.net/dai451954706/article/details/35272465 .有时可能 ...

  3. ROS 用 roboware实现节点信息发送和接收

    在ros下实现节点编程,实现一个节点发送消息,另一个节点接收.实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun  p ...

  4. 12 Top Open Source Data Analytics Apps

    1. Hadoop It would be impossible to talk about open source data analytics without mentioning Hadoop. ...

  5. 从外网站点获取的html去除换行回车制表位\n\r\t

    StringStr.Replace("\\r", "").Replace("\\n", "").Replace(&quo ...

  6. CentOs7 使用iptables开启关闭端口

    介绍 iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分 iptables文件设置路径:命令:vim /etc/sysconfig/iptables-config 注 ...

  7. 神经网络入门——8XOR感知器

    XOR 感知器     XOR 感知器就是一个这样的逻辑门:输入相同返回 0 ,输入不同返回 1.与之前的感知器不同,这里并不是线性可分的.要处理这类较为复杂的问题,我们需要把感知器连接起来. 我们用 ...

  8. rowStyle设置Bootstrap Table行样式

    日常开发中我们通常会用到隔行变色来美化表格,也会根据每行的数据显示特定的背景颜色,如果库存低于100的行显示红色背景 CSS样式 <style> .bg-blue { background ...

  9. Vue2.0做的项目在IE下面打开一片空白?

    解决方式:安装 "babel-polyfill" 即可. 命令:cnpm install --save-dev babel-polyfill 在入口main.js文件引入:impo ...

  10. 三星s5830刷机小记

    拿起好久没用的三星s5830手机,看了看手机内存所无几,运行十分缓慢,就想着收拾下,当个备机用,在刷机前我做了个小实验,先把手机root,安装RE管理器,把system/app下的所有东西都删了,因为 ...