Hbase原理

Hbase原理

概述

HBase是一个构建在HDFS上的分布式列存储系统;
HBase是基于Google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
Hbase表的特点
大:一个表可以有数十亿行,上百万列;
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的存储和权限控制,列(族)独立检索;
稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
数据类型单一:Hbase中的数据都是字符串,没有类型。

  • Hbase数据模型

Hbase逻辑视图

注意上图中的英文说明

Hbase基本概念

RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
Value(Cell):Byte array

  • Hbase物理模型

每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
Key 和 Version number在每个 column family中均有一份;
HBase 为每个值维护了多级索引,即:<key, column family, column name, timestamp>

物理存储:
1、Table中所有行都按照row key的字典序排列;
2、Table在行的方向上分割为多个Region;
3、Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
4、Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。

5、Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。

  • HBase架构及基本组件

Hbase基本组件说明:

Client

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

Master

?为Region server分配region

?负责Region server的负载均衡

?发现失效的Region server并重新分配其上的region

?管理用户对table的增删改查操作

Region Server

?Regionserver维护region,处理对这些region的IO请求

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

Zookeeper作用

?通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册

?存贮所有Region的寻址入口

?实时监控Region server的上线和下线信息。并实时通知给Master

?存储HBase的schema和table元数据

?默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper

?Zookeeper的引入使得Master不再是单点故障

Write-Ahead-Log(WAL)

该机制用于数据的容错和恢复:

每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复

HBase容错性
Master容错:Zookeeper重新选择一个新的Master
?无Master过程中,数据读取仍照常进行;
?无master过程中,region切分、负载均衡等无法进行;
RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例
Region定位流程:

寻找RegionServer

ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表

-ROOT-
?表包含.META.表所在的region列表,该表只会有一个Region;

?Zookeeper中记录了-ROOT-表的location。

.META.

?表包含所有的用户空间region列表,以及RegionServer的服务器地址。

  • Hbase使用场景

storing large amounts  of data(100s of TBs)
need high write throughput
need efficient random access(key lookups) within large data sets
need to scale gracefully with data
for structured and semi-structured data
don‘t need fullRDMS capabilities(cross row/cross table transaction, joins,etc.)

大数据量存储,大数据量高并发操作

需要对数据随机读写操作

读写访问均是非常简单的操作

  • Hbase与HDFS对比

两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
HDFS适合批处理场景
不支持数据随机查找
不适合增量数据处理

不支持数据更新

时间: 2024-10-29 02:50:18

Hbase原理的相关文章

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

早些时候学习hadoop的技术,我一直对里面两项技术倍感困惑,一个是zookeeper,一个就是Hbase了.现在有机会专职做大数据相关的项目,终于看到了HBase实战的项目,也因此有机会搞懂Hbase原理. 首先来点实在的东西,假如我们已经在服务器上部署好了Hbase应用,作为客户端或者说的具体点,本地开发环境如何编写程序和服务端的Hbase进行交互了? 下面我将展示这些,首先看工程的结构图,如下图所示: 接下来我们将hbase应用下lib文件夹里所有jar包都导入到工程lib目录下,还要把c

HBase原理、设计与优化实践

转自:http://www.open-open.com/lib/view/open1449891885004.html 1.HBase 简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来 讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的存储和读取服务.而从应用的角度来 说,HB

网易视频云:HBase原理和设计

网易视频云是网易推出的视频云服务平台,为客户提供真正易用的视频云服务,全面的端到端解决方案,全程技术专家接入指导.下面,网易视频云的技术专家给大家分享一下:HBase原理和设计. 简介 HBase -- Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的

HBase原理相关

接下来记录一下HBase存储原理相关的知识,理解尚浅,后续再补充. 索引 hbase中没有索引,但是mysql有,区别在于mysql是行级存储,hbase是列级存储,索引对行级存储有意义,对于列级存储意义不大. 如下图所示,不管是mysql还是hbase,最终数据都会落地成文件,当给行级存储建立索引,如果想查找id为1的数据,直接通过建立的索引,可以快速定位到数据所在的位置,这样显然比文件中遍历更加高效,如果是列级存储,建立了索引也只对单列数据有效,如想查询{id=1,name=messi,ag

HBase原理和设计

一篇不错的介绍HBase基本原理的文章,转载自:http://www.sysdb.cn/index.php/2016/01/10/hbase_principle/ ,感谢原作者. 简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的

【转】HBase原理和设计

简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的存储和读取服务.而从应用的角度来说,HBase与一般的数据库又有所区别,HBase本身的存取接口相当简单,不支持复杂的数据存取,更不支持SQL等结构化的查询语言:HBase也没有除

HBase原理解析(转)

本文属于转载,原文链接:http://www.aboutyun.com/thread-7199-1-1.html 前提是大家至少了解HBase的基本需求和组件. 从大家最熟悉的客户端发起请求开始讲起吧,这样大家能够深有体会的逐步了解原理.比如我们发起了一条PUT请求,客户端首先需要查找到需要响应请求的REGIONSERVER. 记录region->regionserver映射是由HBASE系统表.META.记录的.所以我们只要知道. META.表的位置就能知道每个region响应的key的范围

HBase原理——要弄懂的sequenceId

为什么需要sequenceId? HBase数据在写入的时候首先追加写入HLog,再写入Memstore,也就是说一份数据会以两种不同的形式存在于两个地方.那两个地方的同一份数据需不需要一种机制将两者关联起来?有的朋友要问为什么需要关联这两者,那笔者这里提出三个相关问题: Memstore中的数据flush到HDFS文件中后HLog对应的数据是不是就可以被删除了?不然HLog会无限增长!那问题来了,Memstore中被flush到HDFS的数据,如何映射到HLog中的相关日志数据? HBase中

你想要的 HBase 原理都在这了

目录 一. 集群架构 集群角色 工作机制 二.存储机制 A. 存储模型 B. LSM 与 Compaction C. Region 分裂 D. 自动均衡 三.访问机制 四. 鉴权 五. 高可靠 1.集群高可靠 2. 隔离性 3. 容灾 参考文档 在前面的文章中,介绍过 HBase 的入门操作知识,但对于正考虑将 HBase 用于生产系统的项目来说还是远远不够. 一般在对 HBase 做选型之前,还需要学习一些它的架构原理.弹性扩展及可靠性方面的知识. 本文来自笔者此前对 HBase 做的学习概括