大数据技术原理与应用学习笔记(四)

本系列历史文章

大数据技术原理与应用学习笔记(一)
大数据技术原理与应用学习笔记(二)
大数据技术原理与应用学习笔记(三)

分布式数据库HBase——BigTable的开源实现

HBase简介

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表 。

HBase与传统关系型数据库区别

数据类型: 字符串
数据操作: 只采用单表主键查询
存储模式: 基于列存储(关系数据库采用基于行存储)
数据索引: 只有一个索引——行键
数据维护: 仍会保留旧版本(关系数据库中不会)
可伸缩性: 非常好

HBase和BigTable的底层技术对应关系

如表所示

项目BigTableHBase
文件存储系统GFSHDFS
海量数据处理MapReduceHadoop MapReduce
协同服务管理ChubbyZooKeeper

HBase数据模型

相关概念

HBase数据模型的相关概念如下:

  1. 表:HBase采用表来组织数据,由行、列构成,列划分为若干列族。
  2. 行键:每行由行键标识,3种方式访问, 通过单个行键访问、通过一个行键的区间访问、全表扫描。
  3. 列族:基本的访问控制单元,访问控制、磁盘和内存的使用统计都在列族层面进行。
  4. 列限定符:列族里的数据通过列限定符定位,没有数据类型,视为字节数组byte[]。
  5. 单元格:通过行加列确定,存储数据。
  6. 时间戳:保存多版本数据时利用时间戳索引。

数据坐标

在HBase中,数据定位可视为“四维坐标”,即[“行键”,“列族”,“列限定符”,“时间戳”]。

概念视图与物理视图

在HBase的概念视图中,HBase中的每个表都是由许多行组成的,而在物理层,数据都是基于列的存储方式。
面向行存储: 优点是每次插入数据时都把其各项信息添加入数据库,缺点是分析特性时大部分都是以列为特征分析,因此不得不扫描全部行,影响性能。
面向列存储: 优点是每列存储的内容相似或相同,因此可获得很高的压缩率。

HBase原理

HBase的功能组件

 库函数:链接到每个客户端;
 一个Master主服务器,负责管理和维护HBase表的分区信息;
 多个Region服务器,负责存储维护分配给自己的Region。
Master服务器的功能:

  1. 分区信息维护和管理。
  2. 维护了一个Region Server列表
  3. 整个集群中有哪些Region工作
  4. 负责对Region进行分配
  5. 负载平衡。
    而客户端并不依赖于Master获得Region的位置信息,而是可以直接与Region Server存取。
    Region服务器:
    初始一个表中一个Region,随着Region增大至一个阈值时,等分成两个Region(默认100-200MB,现在可达到1-2GB),由Master将其分配到不同Region Server,同一个Region不会再拆分,一个Region Server包含多个Region(一般为10-1000个)。
    Region的定位:
    HBase中采用了三层结构来保存Region的位置信息,如图所示:
    在这里插入图片描述
    各层次的名称和作用如表所示:
层次名称作用
第一层ZooKeeper文件记录了-ROOT-表的位置信息
第二层-ROOT-表记录了.META.表只能有一个Region。通过-ROOT-表就可以访问.META.表中的数据
第三层.META.表记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息

有关寻址的计算:
例:设.META.表一行在内存占1KB,每个Region128MB,则:
 一个-ROOT-表寻址 128MB/1KB = 217 个.META.表的Region。
 一个.META.表寻址 128MB/1KB = 217 个Region。
 共寻址234个Region。
注:为了加速寻址,客户端会缓存位置信息,同时采用惰性机制1解决缓存失效问题。

HBase的运行机制

系统架构

HBase的系统架构如图所示:
在这里插入图片描述

客户端: 为了加快访问速度,包含了了访问HBase的接口。对于管理类操作,客户端与Master进行RPC;对于读写类操作,客户端会与Region服务器进行RPC。
ZooKeeper 服务器: 实现协同管理服务,提供管家功能2。大量用于分布式系统,提供配置维护,域名服务,分布式同步服务。
Master(主服务器): 主服务器主要负责表和Region的管理工作。

  1. 管理用户对表的增加、删除、修改、查询等操作。
  2. 实现不同Region服务器之间的负载均衡。
  3. 在Region分裂或合并,负责重新调整Region的分布。
  4. 对发生故障失效的Region服务器上的Region进行迁移。

Region 服务器:
Region服务器是HBase中最核心的模块。
一个Region Server包含10~100个Region,共用一个HLog。一个Region对应多个Store,一个Store包含一个MemStore(在内存中的缓存,用来保存更新数据)和若干的StoreFile(通过HDFS的HFile实现)。其工作原理如下:

读写数据过程: 先写入MemStore和HLog,当操作写入HLog后,commit()才会将其返回给客户端。RegionServer访问 MemStore,若不在,才回到HDFS的HFile中找。

缓存刷新过程: 系统周期性将MemStore中内容刷到StoreFile中,清空缓存,在HLog中添加标记,每次刷新生成一个新StoreFile,每个Region Server启动都会检查HLog,确认最近一次刷新后是否还有更新,若有,则先写入Memstore,再刷到StoreFile,最后删除旧HLog,启动服务。

StoreFile的合并: 当StoreFile数量达到一定阈值时才合并,当再次达到一定阈值又会执行Region的分裂。

HLog的工作原理

用户更新数据必须首先记入日志才能写入MemStore缓存,并直到MemStore缓存内容对应的日志记入磁盘后,该缓存内容才会被刷入到磁盘。
ZooKeeper监控每个Region Server状态,当某个Region Server故障时:

  • ZooKeeper通知Master
  • Master处理故障Region Server的HLog,拆分给其每个Region目录下,并将其分配给可用的Region Server ,并将HLog一并发送。
  • 新Region Server接收到HLog后重新做一遍日志记录中的各种操作,把日志记录中的数据写入MemStore中,刷新到StoreFile中。

HBase性能优化方案

时间靠近的数据存在一起,按照降序排列。

  • 用时间戳做行键
    提升读写性能
  • 设置HColumnDescriptor.setInMemory = true,把相关的表放到Region Server的缓存中
    节省存储空间
  • 设置HColumnDescriptor.setMaxVersions = 1,最大版本数为1,只保存最新版本
    TimeToLive参数:设置过期自动删除

HBase检测性能的工具

  • Master-status(自带)
  • Ganglia
  • OpenTSDB
  • Ambari(Hadoop)

而且可用SQL语句查HBase;

  • SQL语句的优点:易用,减少编码量

Hive和Phonenix;

  • Hive与HBase接口互相通信实现访问
  • Phonenix构建在Apache HBase之上的SQL中间层

HBase的二级索引;

  • 原生的HBase只支持3种方式查询行
  • 新方式通过建立主表和索引表提高性能

Hase编程实践

HBase的编程实践请参考厦大数据库博客:HBase2.2.2安装和编程实践指南


  1. 惰性机制是指:直到原缓存位置找不到内容时再替换。 ↩︎

  2. 管理和维护整个HBase集群。 ↩︎

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值