美文网首页
Hbase的架构详解

Hbase的架构详解

作者: Bitson | 来源:发表于2018-12-02 23:37 被阅读0次

    参考:An In-Depth Look at the HBase Architecture, 中文细节介绍

    Hbase架构的组件

    有三类server

    region server用来提供数据读写,client是直接与region server沟通的。region server和data node一起协作工作,region server的写入数据会尽量写到与自己距离最近的data node上,他们一般部署到相同的节点上。

    Region Servers are collocated with the HDFS DataNodes, which enable data locality (putting the data close to where it is needed) for the data served by the RegionServers.

    hbase master负责分配region到region server,表的创建和删除

    zookeeper负责维护集群的状态,即哪台server在线,哪台挂了

    Regions

    hbase 的表会被切分成多个region,每个region负责一部分范围内的rowkey。region被分配到region server,一个region server可以有1000个region

    HBase HMaster

    master负责协调region server

    - 在开始的时候分配region到region server,恢复或者需要load balance的时候重新分配region到region server

    - 监控全部的region server(通过监听zookeeper)

    做一些管理的工作

    - 创建,删除,更新表的接口

    Zookeeper

    协调集群

    三类组件一起工作

    region server和hbase master会在zookeeper创建临时节点。

    - hbase master监听全部region server的临时节点,监控region server是否正常运行

    - 备用hbase master会监听活动状态的hbase master临时节点,当活动状态的hbase master挂掉后,马上向zookeeper抢做主hbase master,这就是hbase master的HA

    - server都向zookeeper发送心跳,心跳没了的话,zookeeper上对应的临时节点就会消失,监听临时节点的监听器就会得到通知

    Hfile的结构

    - 当数据在memstore上积累到一定大小的时候,memstore里的数据会flush到hfile来持久化数据,一次memstore的flush 操作会创建一个新的hfile,因为flush操作是顺序写的,所以速度非常快(顺序写防止来磁头的定位)

    An HFile contains a multi-layered index which allows HBase to seek to the data without having to read the whole file. The multi-level index is like a b+tree:

    Key value pairs are stored in increasing order

    Indexes point by row key to the key value data in 64KB “blocks”

    Each block has its own leaf-index

    The last key of each block is put in the intermediate index

    The root index points to the intermediate index

    The trailer points to the meta blocks, and is written at the end of persisting the data to the file. The trailer also has information like bloom filters and time range info. Bloom filters help to skip files that do not contain a certain row key. The time range info is useful for skipping the file if it is not in the time range the read is looking for.

    Hfile的索引

    当hfile被打开的时候,hfile里的索引会被加载到内存中,这样在查找的时候就可以利用索引来做到一次磁头操作就定位到数据在哪里了

    Hbase读

    由于数据会存在在三个地方,BlockCache,MemStore,Hfile。所以在读的时候有可能会在三个不同的地方去数据,流程如下:

    1. 首先会在block cache里查找,因为最近读过的Row cells会缓存在这里。使用LRU规则来淘汰过时的缓存(这里叫read cache)

    2. block cache里找不到的话会到memstore里找,最近的写操作都在这里(这里叫write cache)

    3. 如果都找不到的话,hbase会使用block cache里的索引和bloom filters去将hfile加载到内存,然后再读出数据。因为有可能需要检查许多个hfile来查找数据,这么多个小文件里查找数据会影响到性能,这叫read amplification。所以hbase有一些机制可以将这些小的hfile合并成大的hfile

    Hbase minor compaction

    hbase会自动将小的hfile合并成大的hfile来减少小文件的数量

    Hbase major compaction

    major compaction 会将一个region里同一个column family里的hfile合并成一个大的hfile,在合并过程中会将标记成删除或者过时的数据移除。这样可以提升读性能(数据减少了,而且减少了小文件的读操作)。major compaction占用大量的网络和磁盘io,这叫write amplification。这个操作可以安排到周末或者夜晚自动执行来减少对业务的影响

    region 的切分

    回顾一个,一个region有以下的特点:

    A table can be divided horizontally into one or more regions. A region contains a contiguous, sorted range of rows between a start key and an end key

    Each region is 1GB in size (default)

    A region of a table is served to the client by a RegionServer

    A region server can serve about 1,000 regions (which may belong to the same table or different tables)

    一开始一个表只有一个region,但region变得太大的时候,一个region会被一分为二成两个region,这两个region还是在同一个region server里的。但是由于负载均衡的原因,hbase会将其中一个region分配到其他的region server上,如下节所述

    读load balancing

    一个region server太忙的话,HMaster会将这台region server上的region分配到其他的region server上来作负载均衡,但是被分配到新region server上的region的数据还在原来的region server上,所以这是远程读,直到HBase做major compaction的时候,数据才会本地化到新region server的节点上

    HDFS数据复制

    WAL也是存在hdfs上的,所以会自动做副本,hfile也会自动做副本。数据在写入时会先写入WAL,然后再写到memstore里

    Hbase crash reovery

    当region server挂掉之后,zookeeper会检测得到,然后hbase master会将region server上的region重新分配到活着的region server上。然后将WAL切分成几份,然后存储到这些新的region server上,再在这些新的region server上做replay来重建memstore

    data recovery

    原来存到memstore的数据会因为事故而没掉了,但是WAL的重播操作可以恢复memstore里原来的数据,但memstore满了之后,数据就会flush到hfile上。数据其实就相当于被恢复了

    Hbase 架构的好处和缺点

    好处:

    - 强一致性模型,当write返回client的时候,说明数据已经在WAL和memstore上了,全部的读操作都会读到相同的数据

    - 自动横向扩展:当数据增长到很大的时候,region会被自动的切分。HDFS天然的可以将数据分布到各个节点上,而且自动做了数据副本

    - 自动的恢复机制:使用WAL

    缺点是,业务的可持续性会有影响,以下的一些问题对业务的可持续性会有影响:

    - WAL 重播的过程会比较慢

    - 灾难恢复比较复杂而且比较慢

    - majro compaction会造成io风暴

    相关文章

      网友评论

          本文标题:Hbase的架构详解

          本文链接:https://www.haomeiwen.com/subject/zpnscqtx.html