HBase笔记

本文详细介绍了HBase,一个基于HDFS的列式分布式数据库。HBase表由行和列组成,行键按字节序排序,列族内的列以冒号分隔。表被自动划分为区域,由Regionserver管理,支持原子性行更新。HBase无需预先设定列,具有线性扩展性和高容错性,适合处理大规模实时数据。与传统RDBMS相比,HBase没有真正的索引,但具有自动分区和批处理能力。
摘要由CSDN通过智能技术生成
HBase 是一个在HDFS 上开发的面向列的分布式数据库。如果需要实时地随机读/
写超大规模数据集,就可以使用HBase 这- Hadoop 应用。

应用把数据存放在带标签的表中。表囱行和列组成。表格"单元格" (cell)一一由行
和列的坐标交叉决定一一是有版本的。默认情况下,版本号自动分配,是HBase 插
入单元格时的时间戳。单元格的内容是未解释的字节数组。
表中行的键也是字节数组。所以理论上,任何东西都可以表示成二进制形式,然后
转化为长整型的字符串或直接对数据结构进行序列化,来作为键值。表中的行根据
行的键值(也就是表的主键)进行排序。排序根据字节序进行。所有对表的访问都要
通过表的主键。
行中的列分成"列族" (column family) 。所有的列族成员有相同的前缀。因此,像
列temperature:air 和temperature:dew_point 都是列族temperature 的成员,而
station: identifier 则属于station 族。@列族的前缀必须由"可打印的" (printable)字
符组成。而修饰性的结尾字符,即列族修饰符,可以为任意字节。
HBase 中,为了方便,使用冒号( :)来分隔列族和列族修饰符(qualifier) 。这是写在
HBase 代码里的,不能修改。
一个表的列族必须作为表模式定义的一部分预先给出。但是新的列族成员可以随
后按需要加入。
[b]区域[/b]
HBase 自动把表水平划分成"区域" (region) 。每个区域由表中行的子集构成。每
个区域由它所属于的表、它所包含的第一行及其最后一行(不包括这行)来表示。区域是在HBase 集群分布数据的最小单位。
[b]加锁[/b]
无论对行进行访问的事务牵涉多少列,对行的更新都是"原子的" (atomic) 。这使
得"加锁模型" (locking model)能够保持简单。

HBase 主控机(master)负责启动(bootstrap)和全新
的安装、把区域分配给注册的Regionserver ,恢复Regionserver 的故障。Master 的
负载很轻。Regionserver 负责零个或多个区域的管理以及晌应客户端的读写请求。
Regionserver 还负责区域的划分,井通知HBase Master 有了新的子区域(daughter
region) ,这样主控机就可以把父区域设为离线,井用子区域替换父区域。

[b]表操作[/b]

要新建一个表,必须对你的表命名,井定义其模式。一个表的模式包含表的属性和
一个列族的列表。安IJ 族本身也有属性。可以在定义模式时依次定义它们。列族的属性示例包括列族是否应该在文件系统中压缩存储, 一个单元格要保荐在þ 勺版体,
等。模式可以修改,需要时把表设为"离线" (offline) 即可。外壳环境中使用
disable 命令可以把表设为离钱,使用alter 命令可以进行必要的修改,而
enable 命令则可以把表重新设为"在线" (online) 。

外壳环境中使用disable 命令可以把表设为离钱。
要想新建一个名为test 的表,使其只包含一个名为data 的列,表和列族属性都为
默认值,则键入以下命令:
hbase(main):007:0> create 'test' , 'data'
向表中添加数据:
put 'test' , 'rowl ' , 'data:l' , 'valuel'
查看表中数据:scan 'test '
要移除这个表,必须在丢弃它前,首先把它设为禁用:
disable 'test'
drop 'test'
通过运行以下命令来关闭HBase 实例:
% stop-hbase.sh


和关系型数据库相比, HBase 的一个强项是不需要我们预先设定列。
HBase <<扫描器" (scanner)和传统数据库中的"游标" (cursor)或Java 中的" 迭
代器" (iterator)类似。它和后者的不同在于在使用后需要关闭。
配置选项hbase . client . scanne俨.caching 设为1. 也可以设置Scan 实
例自己缓存(cache)/预取(prefetch)数据的多少。扫描器每次会在幕后获取你指定的
这么多结果,把这些结果放在客户端,并只有在当前这批结果都被取光后才再去服
务器端获取下一批结果。

HBase对比RDBMS(传统数据库):
[b]没有真正的索引[/b]
行是顺序存储的,每行中的列也是,所以不存在索引膨胀的问题,而且插入性
能和表的大小无关。
[b]自动分区[/b]
在表增长的时候,表会自动分裂成区域,井分布到可用的节点上。
[b]线性扩展和对于新节点的自动处理[/b]
增加一个节点,把它指向现有集群,井运行Regionserver。区域自动重新进行
平衡,负载会均匀分布。
[b]普通商用硬件支持[/b]
集群可以用1000 到5000 美金的单个节点搭建,而不需要使用单个得花5 万美
金的节点。RDBMS 需要大量1/0 ,因此要求更昂贵的硬件。
[b]容错[/b]
大量节点意味着每个节点的重要性井不突出。不用担心单个节点失效。
[b]批处理[/b]
MapReduce 集成功能使我们可以用全井行的分布式作业根据"数据的位置"
(location awareness)来处理它们

HBase 使用HDFS 的方式与MapReduce 使用HDFS 的方式截然不同。在
MapReduce 中,首先打开HDFS 文件,然后map 任务流式处理文件的内容,最后
关闭文件。在HBase 中,数据文件在启动时就被打开,并在处理过程中始终保持
打开状态,这是为了节省每次访问操作需要打开文件的代价。所以, HBase 更容易
碰到MapReduce 客户端不常碰到的问题:文件描述符用完,datanode 线程用完:和前面的情况类似, Hadoop 的datanode 上同时运行的线程数不能超过256 这
一限制值。

[b]连接[/b]
HBase 井没有内置对数据库连接的支持。但是"宽表" (wide table)使我们并不需要
让一个表和第二个表或第三个表进行数据库连接。一个宽行有时可以容下一个主键
相关的所有数据。
[b]行键[/b]
应该把较多的精力用于设计行的键。在本章的气象数据示例,复合的行键利用观测
站作为前缀,对同一个观测站的气温数掘进行分组。反向时间戳后缀使我们可以按
时间序读到从最近到最远的气温数据。一个精心设计的复合键可以用来对数据进行
聚类,以配合数据的访问方式。
设计复合键时,可能需要用0 来填充数据,使行键可以正确排序。否则,会碰到由
于只考虑字节序而导致10 排在2 之前的情况。
如果键是整数,则应该使用二进制形式,而不是把数据持久化成字符串类型,这样
可以节省存储空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值