【hbase】hbase理论学习

HBase用途:

基于Hadoop Distributed File System,是一个开源的,基于列存储模型的分布式数据库。

HBase简介:

HBase是一个分布式的、多版本的、面向列的开源数据库
           1)利用Hadoop HDFS作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
           2)利用Hadoop MapReduce来处理HBase中的海量数据
           3)利用Zookeeper作为协同服务。

HBase中表的特点:
           1)大:一个表可以有上亿行,上百万列(列多时,插入变慢)
           2)面向列:面向列(族)的存储和权限控制,列(族)独立检索。
           3)稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
           4)每个cell中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
           5)HBase中的数据都是字符串,没有类型;

HBase 特点:
           1)强一致性:同一行数据的读写只在同一台Region Server上进行
           2)水平伸缩:Region的自动分裂以及Master的balance;
                    只用增加Datanode机器即可增加容量;
                    只用增加Region Server机器即可增加读写吞吐量
           3)支持有限查询方式和一级索引:
                        仅支持单行事务
                        仅支持三种查询方式(single row key、range row key、scan  all rows of  table)【可通过hive等实现多表关联查询】
                        仅基于row key的索引
           4)高性能随机写:WAL (Write Ahead Log)
HBase与RDBMS对比:

注:DBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的数据库软件有OracleSQL Server等。

Hbase基本用法:
(1)建立一个表scores,有两个列族grad和courese
代码如下:

hbase(main):001:0> create ‘scores‘,‘grade‘, ‘course‘ 

可以使用list命令来查看当前HBase里有哪些表。使用describe命令来查看表结构。
(记得所有的表明、列名都需要加上引号)
(2)按设计的表结构插入值:

代码如下:
put ‘scores‘,‘Tom‘,‘grade:‘,‘5′
put ‘scores‘,‘Tom‘,‘course:math‘,‘97′
put ‘scores‘,‘Tom‘,‘course:art‘,‘87′
put ‘scores‘,‘Jim‘,‘grade:‘,‘4′
put ‘scores‘,‘Jim‘,‘course:english‘,‘89′
put ‘scores‘,‘Jim‘,‘course:art‘,‘80′ 

这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,加不加冒号都是可以的。
put命令比较简单,只有这一种用法:

hbase> put ‘tablename′, ‘rowname′, ‘colname′, ‘value‘, timestamp
注:tablename指表名,rowname指行键名,colname指列名,value指单元格值。timestamp指时间戳,一般都省略掉了

(3)根据键值查询数据
get ‘scores’,‘Jim’
get ‘scores’,‘Jim’,‘grade’
可能会发现规律了,HBase的shell操作,一个大概顺序就是操作关键词后跟表名,行名,列名这样的一个顺序,如果有其他条件再用花括号加上。
get有用法如下:

hbase> get ‘t1′, ‘r1′
hbase> get ‘t1′, ‘r1′, {TIMERANGE => [ts1, ts2]}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′}
hbase> get ‘t1′, ‘r1′, {COLUMN => [‘c1‘, ‘c2‘, ‘c3‘]}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMESTAMP => ts1}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> get ‘t1′, ‘r1′, {COLUMN => ‘c1′, TIMESTAMP => ts1, VERSIONS => 4}
hbase> get ‘t1′, ‘r1′, ‘c1′
hbase> get ‘t1′, ‘r1′, ‘c1′, ‘c2′
hbase> get ‘t1′, ‘r1′, [‘c1‘, ‘c2‘]

(4)扫描所有数据 scan ‘scores‘
也可以指定一些修饰词:TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,or COLUMNS。没任何修饰词,就是上边例句,就会显示所有数据行。
例句如下:

hbase> scan ‘.META.‘
hbase> scan ‘.META.‘, {COLUMNS => ‘info:regioninfo‘}
hbase> scan ‘t1′, {COLUMNS => [‘c1‘, ‘c2‘], LIMIT => 10, STARTROW => ‘xyz‘}
hbase> scan ‘t1′, {COLUMNS => ‘c1′, TIMERANGE => [1303668804, 1303668904]}
hbase> scan ‘t1′, {FILTER => “(PrefixFilter (‘row2′) AND (QualifierFilter (>=, ‘binary:xyz‘))) AND (TimestampsFilter ( 123, 456))”}
hbase> scan ‘t1′, {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
过滤器filter有两种方法指出:
a. Using a filterString – more information on this is available in the Filter Language document attached to the HBASE-4176 JIRA
b. Using the entire package name of the filter.
还有一个CACHE_BLOCKS修饰词,开关scan的缓存的,默认是开启的(CACHE_BLOCKS=>true),可以选择关闭(CACHE_BLOCKS=>false)。

(5)删除指定数据
代码如下:
delete ‘scores‘,‘Jim‘,‘grade‘ delete ‘scores‘,‘Jim‘
删除数据命令也没太多变化,只有一个:

hbase> delete ‘t1′, ‘r1′, ‘c1′, ts1

另外有一个deleteall命令,可以进行整行的范围的删除操作,慎用!
如果需要进行全表删除操作,就使用truncate命令,其实没有直接的全表删除命令,这个命令也是disable,drop,create三个命令组合出来的。
(6)统计行数:
代码如下:

hbase> count ‘t1′
hbase> count ‘t1′, INTERVAL => 100000
hbase> count ‘t1′, CACHE => 1000
hbase> count ‘t1′, INTERVAL => 10, CACHE => 1000

count一般会比较耗时,使用mapreduce进行统计,统计结果会缓存,默认是10行。统计间隔默认的是1000行(INTERVAL)。
(7)修改表结构
代码如下:

disable ‘scores‘
alter ‘scores‘,NAME=>‘info‘
enable ‘scores‘
alter命令使用如下(如果无法成功的版本,需要先通用表disable):
a、改变或添加一个列族:
hbase> alter ‘t1′, NAME => ‘f1′, VERSIONS => 5
b、删除一个列族:
hbase> alter ‘t1′, NAME => ‘f1′, METHOD => ‘delete‘ hbase> alter ‘t1′, ‘delete‘ => ‘f1′
c、也可以修改表属性如MAX_FILESIZE MEMSTORE_FLUSHSIZE, READONLY,和 DEFERRED_LOG_FLUSH:
hbase> alter ‘t1′, METHOD => ‘table_att‘, MAX_FILESIZE => ‘134217728′
d、可以一次执行多个alter命令:
hbase> alter ‘t1′, {NAME => ‘f1′}, {NAME => ‘f2′, METHOD => ‘delete‘}

HBase的体系结构:

Client
 * 包含访问HBase的接口并维护cache来加快对HBase的访问
Zookeeper
 * 保证任何时候,集群中只有一个master
 * 存贮所有Region的寻址入口。
 * 实时监控Region server的上线和下线信息。并实时通知给Master
 * 存储HBase的schema和table元数据
Master
 * 为Region server分配region
 * 负责Region server的负载均衡
 * 发现失效的Region server并重新分配其上的region
 * 管理用户对table的增删改查操作
Region Server
 * Region server维护region,处理对这些region的IO请求
 * Region server负责切分在运行过程中变得过大的region

 HBase数据表的一些关键概念:

Row key键:
a.表中行的键是字节数组(最大长度是 64KB )
b.任何字符串都可以作为键;
c.表中的行根据行的键值进行排序,数据按照Row key的字节序(byte order)排序存储;
d.字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充
e.所有对表的访问都要通过键
f.通过单个row key访问
g.通过row key的range
h.全表扫描

Column Family列族:
a.HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
b.列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english,
c.新的列族成员可以随后按需、动态加入;
d.权限控制、存储以及调优都是在列族层面进行的;
e.同一列族成员最好有相同的访问模式和大小特征;
f.HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

Cell qualifier列族修饰符(列):
a.通过列族:单元格修饰符,可以具体到某个列;
b.可以把单元格修饰符认为是实际的列名;
c.在列族存在,客户端随时可以把列添加到列族;

Timestamp时间戳:
a.在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
b.时间戳的类型是 64位整型。
c.时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
d.时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

Region区域:
a.HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;
b.每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;
c.当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。

HBase物理存储

1、Table中的所有行都按照row key的字典序排列。
2、Table 在行的方向上分割为多个HRegion。

3、Region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,HRegion就会等分会两个新的HRegion。当table中的行不断增多,就会有越来越多的HRegion。

4 、HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegion server上。但一个HRegion是不会拆分到多个server上的。

5 、HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。

如图:StoreFile以HFile格式保存在HDFS上。

 HFile分为六个部分:

Data Block 段:保存表中的数据,这部分可以被压缩

Meta Block段 (可选的):保存用户自定义的kv对,可以被压缩。

File Info 段:HFile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。

Data Block Index 段:Data Block的索引。每条索引的key是被索引的 block的第一条记录的key。

Meta Block Index段 (可选的):Meta Block的索引。

Trailer段:这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会   
首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来 做安全check),然后,DataBlock
Index会被读取到内存中,这样,当检索 
某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个
block读取到内存中,再找到需要的key

? Data Block Index采用LRU机制淘汰。

? HFile的Data Block,Meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩。

? 目标Hfile的压缩支持两种方式:Gzip,Lzo。

原文地址:https://www.cnblogs.com/CQ-LQJ/p/11645055.html

时间: 2024-09-30 10:56:42

【hbase】hbase理论学习的相关文章

HBase client

通过HBase client访问HBase时,配置如下: Configuration conf = HBaseConfiguration.create(); // Zookeeper地址 conf.set(HConstants.ZOOKEEPER_QUORUM, "master.hadoop"); //Zookeeper端口conf.set(HConstants.ZOOKEEPER_CLIENT_PORT, "2181"); //Zookeeper节点父目录 con

笔记《Hbase 权威指南》

为什么要用Hbase- Hbase的诞生是因为现有的关系型数据库已经无法在硬件上满足疯狂增长的数据了,而且因为需要实时的数据提取Memcached也无法满足- Hbase适合于无结构或半结构化数据,适合于schema变动的情况- Hbase天生适合以时间轴做查询 Werner Vogels,可以关注一下他的博客(Amazon的CTO) 分布式计算系统的CAP定理:在理論計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對於一

5.安装hbase

下载安装包并解压设置hbase环境变量配置hbase-site.xml启动hbase检测hbase启动情况测试hbase shell 下载安装包并解压 https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.3.1/hbase-1.3.1-bin.tar.gz -.. [[email protected] opt]$ tar -zxvf hbase-1.3.1-bin.tar.gz 设置hbase环境变量 [[email protected] op

Hbase安装

搭建hbase集群 一.先决条件 1.安装jdk环境 2.做好免密登录 二.搭建zookeeper 1.上传zookeeper-3.4.6到/usr/local/src目录下,并解压 2.将zookeeper移动到/opt/hbase目录下,并重命名为zookeeper 3.修改配置文件(zookeeper/conf/) a.修改zoo_sample.cfg为zoo.cfg,添加参数 dataDir=/opt/hbase/zookeeper/zkdata dataLogDir=/opt/hbas

hbase非结构化数据库与结构化数据库比较

目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不是很好,类似于互联网这样的访问量容易造成宕机. hbase hbase是基于列存储的数据库与传统的基于行存储的关系型数据库相比,可扩展性好.Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性

Hbase笔记1-2

吴超1.1 Hbase是Hadoop中的数据库,Hadoop还需要数据库吗?我们学的Hadoop是一个分布式的存储和计算的平台为什么要在他上面建一个数据库呢,数据库是干什么的呢,数据库是一个管理系统(DBMS),用来管理数据的,也就是说我们的数据是存储在磁盘中的,但是我们对这一部分的数据进行高效的查询操作的时候,那么你就得用数据库来做,为啥呢,因为我们通常见的数据库都是关系型数据库,他是支持SQL的,SQL是一个非常强大的查询语言,Hadoop存储的是海量数据,海量数据存储起来的目的是为了应用,

HBase参数配置及说明

转自:http://www.cnblogs.com/nexiyi/p/hbase_config_94.html 目的是看下生产环境配置与默认配置情况. hbase.hregion.max.filesize:100G hbase.regionserver.hlog.blocksize:512M hbase.regionserver.maxlogs:32 ............. 版本:0.94-cdh4.2.1 hbase-site.xml配置 hbase.tmp.dir 本地文件系统tmp目录

HBASE 介绍

一 什么是HBASE Hbase 是建立在Hadoop HDFS上的一个 分布式的 面向列存储的 开源数据库.来源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>利用MapReduce来处理HBase中的海量数据,利用Zookeeper 作为协同服务. HBase 以表的形式存储数据.表中由行和列组成. key1,key2,key3是三条记录的ROWKEY,相当于主键.图中有三个列簇,colum-family1,2,3.每个family下有多个列,column+ro

工作中我自己总结的hbase文档,供初学者学习。看了这个,就不用去查什么文档了。

HBase配置和使用文档 HBase配置和使用文档...................................................................................................... 1 一. HBase原理和结构说明............................................................................................. 2 二. HBase的

[转载] HBase入门

转载地址:https://dxer.github.io/2016/03/18/hbase/ HBase一些基本概念 1.Row key 行主键,在对HBase进行查询时候只能依靠Row key,HBase不支持条件查询等类似于一些主流数据库的查询方式,读取记录只能依赖行主键以及进行全局扫面,可以将行主键想象成主流数据库查询过程中用到的主键(例如,id). 2.Column Family 列族,可以将列族想象成日常主流数据库中的表结构的所有列的一个大管家,列族中存储了所有列的名称,整个表包括多少列