初识Hbase

Posted Justin的后端书架

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Hbase相关的知识,希望对你有一定的参考价值。

NoSQL

  • 简介

    • Hbase 是一种非SQL类型的数据库,即非传统的RDBMS数据库。 有很多的非关系型数据库,如:BerkeleyDB 是一种典型的NoSQL 数据库。Hbase 是一个分布性非常好的数据库,从技术层面讲,相对于数据库,它更像是一个数据仓库。因为它缺乏很多RDBMS数据库的特性,像字段的数据类型、辅助索引、触发器和高级的查询语言等。可是,Hbase拥有很多的特性支持线性和模块化扩展。Hbase集群依靠添加Region Server进行扩展,如果一个集群从10台Region server扩展到20台,这将会使原有的存储和处理能力双倍扩展。RDBMS关系型数据库也可以同样进行扩展,但是只能扩展到一个特定的受限临界点,特别是受到单个数据库的大小限制,同时考虑到性能,需要特别的硬件和存储设备。

  • HBase 特性

    • 很强的连续读写性能,这使得它非常适合高速计数聚合运算;

    • 自动地进行分片:Hbase 表依靠Region分布式地存储在在集群上,Region依据数据的增长自动地进行分割合并操作;

    • 自动进行RegionServer的故障转移;

    • Hadoop/HDFS的集成:Hbase非常好地支持HDFS的分布式文件系统;

    • MapReduce: Hbase 支持通过MapReduce进行大规模并行处理;

    • Java客户端API:Hbase 支持简单地调用Java API程序性地访问Hbase;

    • Thrift/REST API:Hbase同样支持非Java 的Thrift 和REST;

    • 数据块缓存和Bloom过滤器:Hbase支持高查询请求数据量下的数据块缓存和Bloom过滤优化;

    • 操作管理:HBase提供了构建在Web页面中的业务洞察力以及JMX标准;

    • HBase是一个构建在HDFS上的分布式列存储系统;

    • HBase是基于Google BigTable模型开发的,典型的key/value系统;

    • HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;

初识Hbase

Hbase数据模型

  • HBase 数据逻辑模型

    • RowKey: 是表中每条记录的"主键",方便快速查找,Rowkey的设计非常重要

    • Column Family:   列族,拥有一个名称,包含一个或多个相关列

    • Column: 属于某一特定列族,FamilyName:columnName,每条记录可动态添加

    • Version Number: 类型为long,默认是系统时间,可由用户自定义

    • Value(Cell): ByteArray

      初识Hbase

  • HBase 数据物理模

    • Table 中所有行都按照 row key的字典序排列

    • Table在行的方向上分割为多个Region

    • Region按大小分割,每个表开始只有一个region,随着数据的增多,region 不断增大,当增大到一个阀值的时候,Region就会等分为两个新的Region. Region 数量会越来越多

    • Region是Hbase中分布式存储和负载均衡的最小单元,不同的Region分布到不同的RegionServer上。

    • Region虽然是分布式存储的最小单元,但不是存储的最小单元. Region由一个或多个Store组成,每个Store保存一个column family. 每个Store 又由一个memStore和多个storeFile组成,StoreFile包含HFile; memStore存储在内存中,StoreFile存储在HDFS上。

    • 注释:每个column family存储在HDFS上的一个单独文件中,空值不会被保存,Key 和 Version number在每个column family中均有一份

      初识Hbase


    初识Hbase初识Hbase

HBase架构及基本组件

初识Hbase

  • Hbase基本组件说明

    • Client

      • 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

    • Master

      • 为Region server分配region

      • 负责Region server的负载均衡

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

      • 管理用户对table的增删改查操作

    • Region Serve

      • Regionserver维护region,处理对这些region的IO请求

      • Regionserver负责切分在运行过程中变得过大的region

    • Zookeeper作用

      • 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册

      • 存贮所有Region的寻址入口

      • 实时监控Region server的上线和下线信息。并实时通知给Master

      • 存储HBase的schema和table元数据

      • 默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper

      • Zookeeper的引入使得Master不再是单点故障


        初识Hbase

Write-Ahead-Log(WAL)

提供了一种高并发、持久化的日志保存与回放机制,每一个业务数据的写入操作(PUT / DELETE)执行前,都会记账在WAL中。当出现数据恢复需求的情况下,调用日志进行数据恢复。

初识Hbase

该机制用于数据的容错和恢复:每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复


HBase容错性

  • Master容错

    • Zookeeper重新选择一个新的Master

    • 无Master过程中,数据读取仍照常进行;

    • 无master过程中,region切分、负载均衡等无法进行;

  • RegionServer容错

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

  • Zookeeper容错

    • Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例


Region定位流程

  • 寻找RegionServer

    • ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表

  • -ROOT-

    • 表包含.META.表所在的region列表,该表只会有一个Region;

    • Zookeeper中记录了-ROOT-表的location。

  • .META.


以上是关于初识Hbase的主要内容,如果未能解决你的问题,请参考以下文章

初识Hbase

初识HBase

走进Hbase-初识分布式

初识NoSQL

flume初识

Hive初识功能架构