HBase学习记录

来源:互联网 发布:sai mac版安装包 编辑:程序博客网 时间:2024/06/16 13:25

最近对于HBase的学习,先是对于之前学习的Hadoop相关内容的复习,再是对于HBase相关架构,特性的学习,最后是根据需求,使用SimpleHBase进行的开发任务实践,大概完成了对于消费记录的HBase,MySQL双写存储。

hadoop生态圈:

  • Pig:一种操作hadoop的轻量级脚本语言,用来快速轻松的处理巨大的数据。
  • Hive:满足了数据仓库的需求,适用于离线的进行数据处理与分析工作。
  • HBase:作为面向列的数据库运行在HDFS之上,提供随即读写功能。
    这里写图片描述

ZooKeeper:分布式服务框架,提供了分布式环境下的数据一致性服务
HDFS:分布式文件系统,适合运行在通用硬件上的分布式文件系统
两者具体结合到HBase中,记录相关内容,介绍

HBase:
由图,HBase中的存储包括HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),当一个HRegion超过一定大小,会根据规定的规则进行分割,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。
这里写图片描述

  • HMaster的作用:
    为Region server分配region
    负责Region server的负载均衡
    发现失效的Region server并重新分配其上的region
    HDFS上的垃圾文件回收
    处理schema更新请求
    (PS:个人觉得,对应的为HDFS中的NameNode,NameNode维护的是所有文件的命名空间,EditLog,FsImage等信息,对于文件管理。同样负责对于DataNode上的数据分配,负载均衡,备份管理等)

  • HRegionServer:
    维护master分配给他的region,处理对这些region的io请求
    负责切分正在运行过程中变的过大的region
    一个HRegionServer会有多个HRegion和一个HLog
    (PS:对应的应是HDFS中的DataNode,负责具体数据的存储)

  • HRegion:Region是HBase中分布式存储和负载均衡的最小单元,同一个Region是不会拆分到多个server上。
    Regin所对应的是列族,每一个列都必然属于某一个列族。
    随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。

  • Store:对表的每个列族创建一个Store实例,每个Store都会有一个MemStore和0个或多个StoreFile与之对应,每个StoreFile都会对应一个HDFS中的存储单位HFile, HFile就是实际的存储文件。

  • MemStore:存放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认64MB)时,memStore会被flush到文件,即生成一个快照。

  • StoreFile:memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。
    (此处与HBase的索引算法LSM相关,原理为把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。小树对应为MemStore,达到一定大小至可flush的树为StoreFile,实际上将增删改操作都转化了这种一定时间后Impact的操作)

  • HLog:Hadoop Sequence File,录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp。
    用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。

SimpleHBase:是Java和HBase之间的轻量级中间件。
(SimpleHBase是偏向于HBase设计的ORM框架,较好的保留了HBase的特性,灵活性较强,但具有学习成本的问题。相对偏向SQL设计ORM框架Phoenix,可以如同使用SQL一般使用HBase,但是相对存在灵活性上的缺陷)
主要包含以下功能:

  • 数据类型映射:Java类型和HBase的bytes之间的数据转换。
  • 简单操作封装:封装了HBase的put,get,scan等操作为简单的Java操作方式。
  • HBase query封装:封装了HBase的filter,可以使用SQL-like的方式操作HBase。
  • 动态query封装:类似于mybatis,可以使用xml配置动态语句查询hbase。
    insert,update支持: 建立在HBase的checkAndPut之上。
  • HBase多版本支持:提供接口可以对HBase多版本数据进行查询,映射。
  • HBase原生接口支持。
  • HTablePool管理。
原创粉丝点击