HBASE
Posted frost2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBASE相关的知识,希望对你有一定的参考价值。
HBASE初识
01
介绍
Hbase是一个分布式的、面向列的开源数据库,该技术是基于Google论文《Bigtable》设计的——结构化数据的分布式存储系统。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力(低延迟的数据查询能力)。HBase不同于一般的关系数据库,它和BigTable一样,都是NoSQL数据库,即非关系型数据库,此外,HBase和BigTable一样,是基于列的而不是基于行的存储模式。
02
特点
1、非关系型数据库,可以存储海量数据(基于Hadoop的HDFS)。
2、提供了低延迟的数据查询能力。低延迟指的是能够在秒级甚至毫秒级给出响应。
3、面向列存储的数据库。(mysql、oracle都是面向行存储的)
03
BigTable
BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库。
BigTable是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序Map。Bigtable的设计目的是可靠的处理PB级别的数据,并且能够部署到上千台机器上。
Bigtable是用三维表来存储数据,分别是行键(row key)、列键(column key)和时间戳(timestamp),本质上说,Bigtable是一个键值(key-value)映射。按作者的说法,Bigtable是一个稀疏的,分布式的,持久化的,多维的排序映射。可以用 (row:string, column:string, time:int64)→string来表示一条键值对记录。
04
行存储VS列存储
目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。
列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表:
Ø Row-based storage stores table in a sequence of rows.
Ø Column-based storage stores table in a sequence of columns.
从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。所以它们就有了如下这些优缺点对比:
在数据写入上的对比:
1)行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。
2)列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多(意味着磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。
3)还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。
在数据读取上的对比:
1)数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
2)列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。
3) 两种存储的数据分布。由于列存储的每一列数据类型是相同的,不存在二义性问题。比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。所以,列存储的解析过程更有利于分析大数据。
4)从数据的压缩以及更性能的读取来对比,也是行存储更加优势。
优缺点:
显而易见,两种存储格式都有各自的优缺点:
1)行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。
2)列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。
05
HBASE基本结构
HBase以表的形式存储数据。表由行和列族组成。列族是若干个列的集合。
1、Row Key
HBase本质上也是一种Key-Value存储系统。Key相当于RowKey,Value相当于列族数据的集合。与nosql数据库们一样。row key是用来检索记录的主键。
访问HBase table中的行,只有三种方式:
1、通过单个row key访问。
2、通过row key的range。
3、全表扫描。
Row key(行键)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)进行排序存储。设计key时,要充分利用排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)。
2、列族(列簇)
HBase表中的每个列,都归属与某个列族。列族是表结构的一部分(而列不是),列族必须在使用表之前定义。列名都以列族作为前缀。例如courses:history , courses:math 中列history和math都属于 courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。
3、cell与时间戳
由{row key, column( =<family> + < label>), version}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由HBase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理 (包括存贮和索引)负担,HBase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。
06
HBASE基本指令
补充说明:
HBase命令行下不能使用BackSpace直接删除,要使用 ctrl+删除键 来进行删除。
解决办法如下:
我这里以xshell为例,其他工具修改对应键序列即可:
文件->属性->终端->键盘
->delete键序列改为[VT220Del]
->backspace键序列改为[ASCII127]
往期回顾
姿势已摆好
就等你点啦
发现更多精彩
以上是关于HBASE的主要内容,如果未能解决你的问题,请参考以下文章