• 【转】HBase基本原理


    原文链接 http://my.oschina.net/sdzzboy/blog/164130

     

    HBase以表的形式存储数据。与关系型数据库一样,在HBase中,表由行和列组成。

     

    与关系型数据库不同的是,HBase还有“列簇”(column family)的概念。

    一个表有若干“列簇”组成,每一个“列簇”包含若干列(column)。

    与此同时,表中的每一个cell都是有时间戳的。

    因此我们可以把其想象成一个三维数据库

    除了行和列之外,还有一个时间维度,每一个单元格(cell)的不同版本都被保存。

     

    与关系型数据库类似,在HBase中每一行都有一个主键(row key)。

    HBase对于数据的检索都是通过row key进行的。

     

    HBase对于数据的检索主要有三种方式:

    1. 通过单个row key检索一行

     

    2. 通过row key的范围[row key start,row key end]返回多条记录

     

    3. 全表扫描,返回整个table

     

    在HBase中,所有的行都按照row key进行排序

    在物理上,

    每一个table都会按照行划分成一个或者多个HRegion

    一个HRegion包含了table的一部分,即若干行

    HRegion 按大小分割的,每个表一开始只有一个 HRegion,

    随着数据不断插入表, HRegion 不断增大, 当增大到一个阀值的时候, HRegion 就会等分会两个新的 HRegion

    当 table 中的行不断增多,就会有越来越多的HRegion。

    HRegion 是 Hbase 中分布式存储和负载均衡的最小单元

    最小单元就表示不同的 HRegion 可以分布在不同的 HRegion server 上。但一个 HRegion 是不会拆分到多个server上的。

    HRegion 虽然是分布式存储的最小单元,但并不是存储的最小单元

    事实上,

    HRegion 由一个或者多个 Store 组成

    每个 store 保存一个 columns family

    每个 Strore 又由一个 memStore 和0至多个 StoreFile 组成。

     StoreFile 以 HFile 格式保存在 HDFS 上

    除了HFile之外,HRegion server还生成另外一个文件——HLog(WAL log),该文件是一个日志文件

    WAL 意 为 Write ahead log,类似 于mysql中的 binlog,用来做灾难恢复使用。HLog 记录数据的所有变更

    n(来自不同 table)的日志会混在一起。这样做的目的是不断追加单个文件相对于每个 HRegion Server 维护一个 Hlog,而不是每个HRegion 一个

    这样不同Regio同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对 table 的写性能

    带来的麻烦是,如果一台 region server 下线, 为了恢复其上的 region,需要将 region server 上的 log 进行拆分,

    然后分发到其它 region server 上进行恢复。

     

     

  • 相关阅读:
    教你一招Linux下文本比对方法
    Linux下find与exec的联手干大事
    Linux下Shell日期的格式,你知道几种?
    Linux下Python3.6的安装及避坑指南
    多线程中使用CompletableFuture
    ElasticSearch7.6.2中语法使用(更新中)
    ElasticSearch7.6.2使用_update_by_query语法
    ElasticSearch7.6.2使用_delete_by_query产生版本冲突问题
    filebeat7.6.2进程运行一段时间后自动退出问题解决
    把本地项目提交到gitLab
  • 原文地址:https://www.cnblogs.com/ihongyan/p/4722698.html
Copyright © 2020-2023  润新知