Hbase

                                             Hbase

Hbase概述:Hbase是一个构建在HDFS上的分布式存储系统,主要用于海量结构化数据存储,从逻辑上讲,Hbase将数据库按照表、行和列进行存储。

Hbse与HDFS对比:都具有良好的容错性和扩展性,均可扩展成百上千个节点;

HDFS:写模式:适合批处理场景,只支持增加,不支持数据随机查找,不适合增量数据处理,不支持数据更新(其中ORC支持更新,在hive里)。

      读模式:全表扫描,分区扫描(hive的特性)

      Hive(SQL)支持:非常好

      量大

Hbase:写模式:一个随机的块增量的写。

      读模式:随机读,小范围的扫描,全表扫描

      Hive(SQL)支持:慢(MapReduce对Hbase操作)

      较小

1. Hbase特点

老师总结图:

Hbase_第1张图片

Crud操作!

HBase中表的特点

: 一个表可以由百亿行,上百万列(列多时,插入变慢)

面向列:面向列(族)的存储和权限控制,列(族)独立检索

稀疏:对于为空(null) 的列,并不占用存储空间,因此表可以设计的非常稀疏。

多版本:每个Cell中的数据可以由多个版本,默认情况下版本号自动分配为时间戳。

类型唯一:HBase中的数据都是字符串,没有类型

NoSQL的数据库优势

1.1 扩展性强

1.2 并发性能好

 NoSQL大数据量下性能好得益于它的弱关系性,数据库的结构简单。

Hbase 特性

Hbase作为一个典型的NoSQL数据库,仅支持单行事物。Hbase设计目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算能力。

1.2.1 容量巨大

HBase单表可以有百亿行、百万列,数据矩阵横向和纵向两个纬度所支持的数据量级都非常具有弹性。千万列亿级可能会超时。如果限定列则不会出现超时问题

1.2.2 面向列

HBase是面向列的存储和权限控制,并支持独立检索。列式存储 其数据在表中是按照某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数据量。比如一个字段的数据聚集存储。就更容易为这种聚集存储设计更好的压缩算法。

*  传统的行式数据库特性如下:

  数据是按行存储的

  没有索引的查询使用大量的I/O.
  建立索引和物化视图需要花费大量的时间和资源
  面对查询需求,数据库必须被大量膨胀才能满足需求

 *  列式数据库的特性
        数据按存储,即每一列单独存放。
        数据即索引
        只访问查询涉及的列,可以大量降低系统I/O
        每一列由一个线索来处理,即查询的并发处理性能高。
        数据类型一致,数据特征相似,可以高效压缩

列式存储不但解决了数据稀疏性问题,最大程度节省存储开销,而且在查询发生时,仅检索查询涉及的列,能够大量降低磁盘I/O.这些特性也支撑HBase能够保证一定的读写性能。

1.2.3 稀疏性
大多数情况下,行式存储的数据往往是稀疏的,即存在大量为空(null)的列,而这些列都是占用存储空间的,这就造成存储空间的浪费。对HBase来讲,为空的列并不占用存储空间,因此,表可以设计的非常稀疏。

1.2.4 扩展性

底层依赖于HDFS.同时,HBase的Region和RegenServer的概念对应的数据可以分区,分区后数据可以位于不同的机器上,所以在HBase 核心架构具备可扩展性。Hbase的扩展性是热扩展,在不停止现有服务的情况下,可以随时添加或减少节点。

1.2.5 高可靠性

Hbase_第2张图片

1WAL机制保证了数据写入时不会因集群异常而导致写入数据丢失: Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且HBase底层使用HDFS,HDFS本身也有备份。

在往HFile写数据之前,先向Hlog写一个日志。

1.2.6 高性能

底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。Region切分、主键索引和缓存机制使得HBase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能够到达毫秒级别。同时HBase对于高并发的场景也具备很好的适应能力。该特性也是业界众多公司选取HBase作为存储数据库的非常重要的一点  

1.2.7  容错性

Hbase_第3张图片

1.3.1.  重要的组建都有高可用的配置。

1.3.2.  Master不能用了,必须停机检查。

1.3.3.  在zookeeper上会存储一些元数据,所以Region Server不能用后数据依然不会丢掉。

1.3.4.  zookeekper一般配置奇数个,一般3个,保险的话5个。

RegionServer定期向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上;失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer。

2. Hbase适用的场景

老师总结图:

Hbase_第4张图片

2.1、存储大量的数据(TB级数据),hbase适合大数据量的查询,但并不适合大范围的查询;kv大,只适合kv形式。

2.2、需要很高的写吞吐量;快速读取批量数据

2.3、在大规模数据集中进行很好性能的随机访问(基于RowKey);写入频繁

2.4、需要进行数据扩展

2.5结构化和半结构化的数据;

2.6、不支持关系数据库特性,例如交叉列、交叉表,事务,连接;(MapReduce可以)

3. Hbase物理存储

老师总结图:

 Hbase_第5张图片

把一个大表切到不同的Region里面,不同的Region又会分到不同的Region Server之上,Region越来越大后就是分成两个Region,一个Region Server就像一个数据节点,有利于并行分布式处理,Region他是一个最小处理单元,但不意味着他最小。

Hbase_第6张图片

一个Region上有不同的Store(表里有十个columns family 就有十个store),并且也含有一个memstor和多个storefile,memstor在内存中,效率高。Storefile存储在HDFS中,但是,一个Region不会拆分到多个server上。

4. Hbase架构

Hbase_第7张图片

Hbase是一个数据库,数据库下面封装了一层存储,存储是由HDFS提供,HDFS也有自己的客户端和实际存储在datanode之上。

架构图包含:

Client

  1 包含访问Hbase的接口,client维护着一些cache来加快对Hbase的访问,比如regione的位置信息。 

Zookeeper(数据同步和数据存储)

  1 保证任何时候,集群中只有一个master(还可以在起一个standby高可用)

  2 存贮所有Region的寻址入口。(类似HDFS中的Namenode)

  3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master

  4 存储Hbase的schema(元数据),包括有哪些table,每个table有哪些column family

Master

  1 为Region server分配region

  2 负责region server的负载均衡(分)

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

  4 GFS上的垃圾文件回收

  5 处理schema更新请求,管理用户对table的增删改查

RegionServer

  1 Region server维护Master分配给它的region,处理对这些region的IO请求

  2 Region server负责切分在运行过程中变得过大的region

所以client访问Hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低。

还有Region和store.加上底层的HDFS。

流程:Client端提交作业时,先去zookeeper(存储Hbase元数据和HMaster的一些信息在HDFS上)请求Region可存储的地方,并且怎么去读和写。Client得到信息后找到相应的Region并且找到其中的store,取得相应的storefile。在去底层找到相应的HDFS文件。Master是一个整体的管理。

Hbase_第8张图片

Hbase_第9张图片

Client准确定位Region:1.请求zookeeper(HDFS).2.进入-ROOT-(单Region在Hbase),他储存所有.META.信息在HBase。3.通过root找到META表,MATE中有相信的需求表元数据信息。4.根据详细的元数据信息,去HDFS找相应的表。

比较冗余,但他只找一次,并把信息放到本地。

5. HbaseShell使用

进入Hbase shell里

Hbase_第10张图片

按住Ctrl可删除,查询服务器状态:

查询版本:

创建表,并查看:

Hbase_第11张图片

查看表的描述:

Hbase_第12张图片

表的上线和下线:

 


删除列族并检查删除成功:

Hbase_第13张图片

删除表并且下线表:

Hbase_第14张图片

删除表后查询表是否存在在创建表检查上下线状态:

Hbase_第15张图片

数据插入:

Hbase_第16张图片

扫描全表:

Hbase_第17张图片

获取一条数据:

获取1个ID,一个列族的所有数据

Hbase_第18张图片

获取1个ID,一个列族中一个列的所有数据

更新1条记录

Hbase_第19张图片

通过timestamp来获取两个版本的数据

删除sddress为lalalainfo为age的字段

Hbase_第20张图片

删除整行:

Hbase_第21张图片

查看表中有多少行:

清空一张表并检查:

Hbase_第22张图片

6. Hive 操作Hbase

创建hbase表:

Hive建表:

Hbase_第23张图片

插入数据并查询:

Hbase_第24张图片

7. Phoenix操作Hbase(官方文档常用命令)

启动位置加启动:

Hbase_第25张图片

Hbase_第26张图片

退出:

查看表格和新建表插入表:

Hbase_第27张图片

查询:

多插入一些数据等命令:

Hbase_第28张图片

Example:

UPSERT INTO TEST VALUES('foo','bar',3);
UPSERT INTO TEST(NAME,ID) VALUES('foo',123);
UPSERT INTO TEST(ID, COUNTER) VALUES(123, 0) ON DUPLICATE KEY UPDATE COUNTER =COUNTER + 1;
UPSERT INTO TEST(ID, MY_COL) VALUES(123, 0) ON DUPLICATE KEY IGNORE;

创建一个新表并且复制另一个表的内容:

Hbase_第29张图片

查看相关命令:

Hbase_第30张图片

Example:

SELECT * FROM TEST LIMIT 1000;
SELECT * FROM TEST LIMIT 1000 OFFSET 100;
SELECT full_name FROM SALES_PERSON WHERE ranking >= 5.0
    UNION ALL SELECT reviewer_name FROM CUSTOMER_REVIEWWHERE score >= 8.0

查看内置命令:

Hbase_第31张图片

查看表结构:

修改表数据:

Hbase_第32张图片

总结:

完全可以把Phoenix当成MySQL来用。但是老是出错是个问题。。。。

附加:

创建表:

 

 

 

 

 


你可能感兴趣的:(大数据学习笔记)