Hbase基本原理

一、hbase是什么

 HBase 是一种类似于数据库的存储层,也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库,是由当年的 Google 公布的 BigTable 的论文而生。HBase 底层依旧依赖 HDFS 来作为其物理存储。

 


 

二、hbase的列式存储结构

行式存储:传统的数据库是关系型的,且是按行来存储的

 其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。

 列式存储:

 HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:

  • 表是行的集合。
  • 行是列族的集合。
  • 列族是列的集合。
  • 列是键值对的集合。

 

Row key行键 (Row key): 可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在Hbase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)。

列族: Hbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。

时间戳: Hbase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由Hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。 为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,Hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

Cell: 由{row key, column(= + ), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

 


 三、hbase架构

 


Zookeeper

 Zookeeper 是作为 HBase Master 的 HA 解决方案。也就是说,是 Zookeeper 保证了至少有一个 HBase Master 处于运行状态。并且 Zookeeper 负责 Region 和 Region Server 的注册。

HMaster:

HBase Master 用于协调多个 HRegion Server,侦测各个  HRegion Server 之间的状态,并平衡 HRegion Server 之间的负载。HBase Master 还有一个职责就是负责分配 Region 给 HRegion Server。HBase 允许多个 Master 节点共存,但是这需要 Zookeeper 的帮助。不过当多个 Master 节点共存时,只有一个 Master 是提供服务的,其他的 Master 节点处于待命的状态。当正在工作的 Master 节点宕机时,其他的 Master 则会接管 HBase 的集群。

  1. 为Region server分配region,负责region server的负载均衡
  2. 管理用户对Table的增、删、改、查操作
  3. 发现失效的region server并重新分配其上的region
  4. GFS上的垃圾文件回收
  5. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

HDFS:

HDFS是Hbase运行的底层文件系统

HRegionServer

HRegionServer是RegionServer的实现,服务和管理Regions,集群中HRegionServer运行在DataNode上。

对于一个 HRegion Server 而言,其包括了多个 HRegion。HRegion Server 的作用只是管理表格,以及实现读写操作。Client 直接连接 HRegion Server,并通信获取 HBase 中的数据。对于 Region 而言,则是真实存放 HBase 数据的地方,也就说 Region 是 HBase 可用性和分布式的基本单位。如果当一个表格很大,并由多个 CF 组成时,那么表的数据将存放在多个 Region 之间,并且在每个 Region 中会关联多个存储的单元(Store)。

HRegion

Region 是真实存放 HBase 数据的地方,也就说 Region 是 HBase 可用性和分布式的基本单位;每个HRegion对应了Table中的一个Region,随着数据的不断加入,region会不断增大,当region增大一个阀值时,region会等分为两个region。当region分裂越来越多时,都将在Region Server上这时将无法满足负载均衡,所以Hmaster 将会发起协调的作用,将给table的所有region平均分配到所有的region Server上。

HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。HStore包括内存memstore 和位于磁盘的storeFile;数据写入时先进入memstore,当memstore中的数据到达阀值后,HRegion Server 会启动flashcache 进程将内存的数据写入磁盘storeFile。每次写入都会形成一个单独的storeFile文件。当storeFile文件的数量到达一个阀值时,系统会将storeFile文件合并,在合并时会进行版本的合并和删除文件(合并时会删除低版本的数据),形成一个更大的storeFile。在合并期间无法访问数据。

客服端查找数据时,先在memstroe查找,然后storeFile。

HLOG

 

转载于:https://www.cnblogs.com/jalja/p/11441801.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最终的动画函数封装(2)

<button>点击触发1</button><button>点击触发2</button><div></div><style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: red;position: relative;top: 100px;left: 0;}.div1{display: block;width: …

第二次JAVA作业

感觉和C语言后面都差不多&#xff0c;就是开头的定义和输入输出有点差别&#xff0c;多写几次应该能搞清楚开头的定义&#xff0c;接下来是四道题目的截图。 第一题&#xff1a; 第二题&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 转载于:https://www.cnblogs.com/YSh…

js(Dom+Bom)第七天(1)

JavaScript BOM介绍 概念 BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型。 本质&#xff1a; 通过对象抽象浏览器中的一些功能 例如&#xff1a;&#xff08;刷新页面&#xff0c;alert,confirm,pormpt,跳转 ...&#xff09;BOM顶级对象 window对象是js中…

「十二省联考 2019」皮配——dp

题目 【题目描述】 #### 题目背景一年一度的综艺节目《中国好码农》又开始了。本季度&#xff0c;好码农由 Yazid、Zayid、小 R、大 R 四位梦想导师坐镇&#xff0c;他们都将组建自己的梦想战队&#xff0c;并率领队员向梦想发起冲击。 四位导师的**派系**不尽相同&#xff0c;…

链表中环的入口结点

题目描述 给一个链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;输出null。 分析 第一步&#xff1a;确定一个链表中是否有环 我们可以用两个指针来解决&#xff0c;定义两个指针&#xff0c;同时从链表的头结点触发&#xf…

java 线程之线程状态

Thread 类中的线程状态&#xff1a; public enum State {NEW,//新建RUNNABLE,// 执行态BLOCKED, //等待锁&#xff08;在获取锁的池子里&#xff09;WAITING,//等待状态TIMED_WAITING,//定时等待TERMINATED; //终止 } 创建状态&#xff08;NEW&#xff09;&#xff1a;当一个线…

目标元素拖动

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系统原理之内存管理(第四章第二部分)

一、基本分页存储管理方式 1、分⻚存储管理的基本原理&#xff1a; 页&#xff1a;将⼀个进程的逻辑地址空间分成若⼲个⼤⼩相等的⽚页框&#xff1a;将物理内存空间分成与⻚⼤⼩相同的若⼲个存储块分⻚存储&#xff1a;将进程中的若⼲⻚分别装⼊多个可以不相邻的⻚框中页内碎片…

d3.js 教程 模仿echarts柱状图

由于最近工作不是很忙&#xff0c;隧由把之前的charts项目用d3.js重写的一下&#xff0c;其实d3.js文档很多&#xff0c;但是入门不是很难&#xff0c;可是想真的能做一个完成的&#xff0c;交互良好的图还是要下一番功夫的。今天在echarts找到了一个柱状图&#xff0c;如图。 …

简单的动画函数封装(2)

<div></div><!-- <span></span> --><button class"btn1">点击500</button><button class"btn2">点击800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …

【蔡勒公式 】根据给定的年月日求出对应星期几

蔡勒公式 蔡勒&#xff08;Zeller&#xff09;公式&#xff0c;是一个计算星期的公式&#xff0c;随便给一个日期&#xff0c;就能用这个公式推算出是星期几。时间复杂度&#xff1a;O(1)。具体的在红书P229有。 若要计算的日期是在1582年10月4日或之前&#xff0c;公式则为&am…

放大镜制作(2)—此方法比较容易理解

<div class"box" id"box"><!--左侧的盒子--><div class"left_img"><!--图片--><img src"images/small.jpg" class"aaa" alt"小图片"/><!--黄色小盒子--><div class"…

js(Dom+Bom)第八天—Swiper(插件)

Swiper插件(库) 01-基本介绍 Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架&#xff0c;使用硬件加速过渡&#xff08;如果该设备支持的话&#xff09;。主要使用于移动端的网站、移动web apps&#xff0c;native apps和hybrid apps。主要是为IOS而设计的&#xff…

第七节:EF Core调用SQL语句和存储过程

一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段。 B. 结果集中的列名必须与属性映射到的列名相匹配。 C. SQL查询不能包含关联数据 D. 除Select以为的其它SQL语句无法运行。 2.调用SQL语句的几种情况 A. 基本的原生SQL查询 B. 利用$内插语法进行传递 C. 原生…

js(Dom+Bom)第八天

JavaScript 移动端事件介绍 touch事件类型 移动设备上无法使用鼠标&#xff0c;当手指按下屏幕的时候会触发 click,mousedown,mouseup事件&#xff0c;但是在移动设备上有专门的事件&#xff1a; touch 备注&#xff1a; 在移动端touch事件需要通过事件监听的方式添加touchsta…

为什么mysql 5.7.24启停不显示错误信息?log-error_verbosity参数

关键词&#xff1a;log-error_verbosity &#xff0c;mysql启停没有信息&#xff0c;mysql启停不显示错误信息&#xff0c;mysql不显示启停信息 原因就是因为 log-error_verbosity 2 被设置成了1/2&#xff0c;需要设置成3才行。 转载自&#xff1a;https://www.cnblogs.com/k…

ASP.NET Core 3.0中使用动态控制器路由

原文&#xff1a;Dynamic controller routing in ASP.NET Core 3.0 作者&#xff1a;Filip W 译文&#xff1a;https://www.cnblogs.com/lwqlun/p/11461657.html 译者&#xff1a;Lamond Lu 译者注 今天在网上看到了这篇关于ASP.NET Core动态路由的文章&#xff0c;感觉蛮有意思…

d3.js 教程 模仿echarts折线图

今天我们来仿echarts折线图,这个图在echarts是折线图堆叠&#xff0c;但是我用d3改造成了普通的折线图&#xff0c;只为了大家学习&#xff08;其实在简单的写一个布局就可以&#xff09;。废话不多说商行代码。 1 制作 Line 类 class Line {constructor() {this._width 1100;…

vue中v-for的使用

本人正在开始学习Vue,每天写写基础的记录,希望对大家有帮助,如有错误还望指出,我也是一个小白,也希望大家能一起进步 v-for指令的使用: 1.循环普通数组 item in list 中的item是自己个想写什么名写什么名 另一种写法 i 表示索引值 2.循环对象数组 3.循环普通对象 4.迭代数字 注…