二、HBase的介绍

1、HBase 简介:

(1)、HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统(开源数据库),
     利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

(2)、HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
     另一个不同的是HBase基于列的而不是基于行的模式。

(3)、HBase的特点:
     海量存储:Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下, 能在几十到百毫秒内返回数据;

     列式存储(列族存储):列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,
                       列族在创建表的时候就必须指定;

     极易扩展:Hbase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS);

     高并发:主要是在并发的情况下,Hbase 的单个IO 延迟下降并不多。能获得高并发、低延迟的服务;

     稀疏:稀疏主要是针对Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的;
二、HBase的介绍_第1张图片
HBase架构图.png
从图中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组件组成: 
1)Client:
      Client包含了访问Hbase的接口,另外Client 还维护了对应的cache 来加速Hbase的访问,比如 cache 的.META.元数据的信息。

2)Zookeeper:
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体如下: 
通过 Zoopkeeper来保证集群中只有1个 master在运行,如果 master异常,会通过竞争机制产生新的 master提供服务;
通过 Zoopkeeper来监控RegionServer的状态,当RegionSevrer 有异常的时候,通过回调的形式通知 Master RegionServer上下线的信息;
通过 Zoopkeeper存储元数据的统一入口地址;

3)Hmaster:
master节点的主要职责如下: 
为 RegionServer分配 Region;维护整个集群的负载均衡; 维护集群的元数据信息;
发现失效的Region ,并将失效的Region分配到正常的RegionServer上;当 RegionSever失效的时候,协调对应 Hlog的拆分;

功能总结:
        1.监控RegionServer
        2.处理RegionServer故障转移
        3.处理元数据的变更
        4.处理 region的分配或转移
        5.在空闲时间进行数据的负载均衡 
        6.通过Zookeeper发布自己的位置给客户端 

4)HregionServer:
HregionServer 直接对接用户的读写请求,是真正“干活 ”的节点。它功能概括如下: 
 管理master为其分配的Region;处理来自客户端的读写请求;负责和底层HDFS的交互,存储数据到 HDFS;
 负责 Region变大以后的拆分; 负责 Storefile的合并工作 的合并工作;

功能
        1.负责存储HBase的实际数据
        2.处理分配给它的Region
        3.刷新缓存到HDFS
        4.维护Hlog
        5.执行压缩
        6.负责处理Region分片

5)HDFS:
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog 存储在HDFS)的支持,具体功能概括如下:
 提供元数据和表的底层分布式存储服务; 
 数据多副本,保证的高可靠和高可用性;

(6)、其他组件 Write-Ahead logs:
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可设定)。
但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫Write-Ahead logFile的文件中,
然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

(7)、其它组件Region:
Hbase表的分片,HBase表会根据Rowkey值被切分成不同的region存储在RegionServer中, 在一个RegionServer中可以有多个不同的region。

(8)、其它组件Store:
HFile存储在Store中,一个Store对应HBase表中的一个列族,但是一个列族被切分后可能对应多个Store。

(9)、MemStore(内存存储):
MemStore位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegionServer会在内存中存储键值对

(10)、HFile:
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。

2、HBase version的选择(尽量不要选择最新发布的version,不稳定):

官网版本:http://archive.apache.org/dist/hbase/

CDH版本:http://archive.cloudera.com/cdh5/

3、HBase表结构模型:


二、HBase的介绍_第2张图片
HBase表结构模型.png

4、HBase表数据模型:


二、HBase的介绍_第3张图片
HBase表数据模型.png

5、HBase中列簇的特点:
(1)、一张表列簇不会超过5个;

(2)、每个列簇中的个数没有限制;

(3)、列只有插入数据后才会存在;

(4)、列在列簇中是有序的;

6、HBase表和关系型数据库表结构的对比:

(1)、HBase 的列可以动态增加;数据能够自动切分;可高并发读写;而关系型数据库都不可以;

(2)、但是不支持条件查询,只支持rowkey查询;但关系型数据库支持复杂查询;

7、HBase的安装说明:

(1)、JDK1.7 以上;
(2)、Hadoop-2.5.0以上;
(3)、Zookeeper-3.4.5以上;

8、HBase分布式配置(可以去官网查找):

(1)、配置hbase-env.sh文件
   export JAVA_HOME=
   export HBASE_MANAGES=false //禁用hbase自带的zk

(2)、创建data/tmp目录; 配置regionservers文件;

(3)、配置hbase-site.xml文件
二、HBase的介绍_第4张图片
配置hbase-site-xml.png

9、HBase启动命令:

hbase-daemon.sh            start-hbase.sh
hbase-daemons.sh           stop-hbase.sh

Hbase  shell

10、HBase操作命令:

(1)、通用命令:
      status: 提供HBase的状态,例如,服务器的数量。
      version: 提供正在使用HBase版本。
      table_help: 表引用命令提供帮助。
      whoami: 提供有关用户的信息。

(2)、数据定义语言 : 这些是关于HBase在表中操作的命令。
      create: 创建一个表。
      list: 列出HBase的所有表。
      disable: 禁用表。
      is_disabled: 验证表是否被禁用。
      enable: 启用一个表。
      is_enabled: 验证表是否已启用。
      describe: 提供了一个表的描述。
      alter: 改变一个表。
      exists: 验证表是否存在。
      drop: 从HBase中删除表。
      drop_all: 丢弃在命令中给出匹配“regex”的表。
      Java Admin API: 在此之前所有的上述命令,Java提供了一个通过API编程来管理实现DDL功能。在这个org.apache.hadoop.hbase.client包
                      中有HBaseAdmin和HTableDescriptor 这两个重要的类提供DDL功能。

(3)、数据操纵语言:
      put: 把指定列在指定的行中单元格的值在一个特定的表。
      get: 取行或单元格的内容。
      delete: 删除表中的单元格值。
      deleteall: 删除给定行的所有单元格。
      scan: 扫描并返回表数据。
      count: 计数并返回表中的行的数目。
      truncate: 禁用,删除和重新创建一个指定的表。
      Java client API: 在此之前所有上述命令,Java提供了一个客户端API来实现DML功能,CRUD(创建检索更新删除)操作更多的是通过编程,
                       在org.apache.hadoop.hbase.client包下。 在此包HTable 的 Put和Get是重要的类。

你可能感兴趣的:(二、HBase的介绍)