欢迎投稿

今日深度:

HBase 架构,

HBase 架构,


  • 存储
  • Write-Ahead Log
    region服务器将数据保存到内存中,直到累积到足够多的数据再将其刷写到磁盘上,这样可以避免产生较多的小文件,但保存在内存中的数据是不稳定的,如果发生断电,内存中的数据将会丢失,HBase采用的方式每次更改都会被先写到日志中,然后在写入到内存。这样即使突遇断电,还可以通过回放日志恢复到断电之前的状态。这也意味着如果某个操作写入日志失败,那么整个操作也是失败的。
    下图展示了WAL是怎样和HBase架构结合的

    从图中可以看出,WAL是被多个region实例共享的。
    大致流程是客户端向region服务器发送put或delete操作请求,到达region服务器端后,会被分配给与行相关的HRegion实例处理,首先会被写到WAL中,然后再写入到memstore中。整个过程看起来就是HBase的写路径。

    为什么是多个region共享一个日志,而不是一个region一个日志文件?
    因为一个region一个日志文件,就需要向HDFS并发写入多个文件,这样会造成大量的磁盘寻道来向不同的物理日志文件中写数据,降低性能。
  • 读路径
    当在shell上使用get命令来获取某一行数据时,系统是怎么知道该返回什么呢?
    在读取所有存储文件来查找匹配的条目之前,会有一个快速排查的阶段:使用时间戳和可选的布隆过滤器(Bloom Filter)来排除那些绝对不包含所需条目的文件。然后再扫描剩下的文件和memstore来查找匹配的键。

  • region查找
    HBase提供了两个目录表:-ROOT-表和.META.表,用来查找region。-ROOT-表用来查询.META.表中的region的位置。HBase中只有一个root region,并且是不能拆分的,从而保证类似于B+树的三层结构:第一层ZooKeeper中包含root region位置信息的节点,第二层是从-ROOT-表中查找对应meta region的位置,第三层是从.META.表中查找用户表对应的region的位置。

  • region生命周期
    region的状态是受master控制的。
  • ZooKeeper
    HBase使用ZooKeeper作为其协同服务组件,用来跟踪region服务器的状态、保证集群中只有一个Master、保存root region的地址等。
  • 复制
    HBase的复制有些类似于MySQL的statement-based复制,它主要是通过WALEdit和HLog来实现的。
  • www.htsjk.Com true http://www.htsjk.com/hbase/41131.html NewsArticle HBase 架构, 存储 Write-Ahead Log region服务器将数据保存到内存中,直到累积到足够多的数据再将其刷写到磁盘上,这样可以避免产生较多的小文件,但保存在内存中的数据是不稳定的,如...
    相关文章
      暂无相关文章
    评论暂时关闭