【大数据开发工程师】面试——HBase

HBase版本:2.2.4

架构

 

 Region Server是Regoin的管理者,其实现类为HRegoinServer;它主要负责对数据的操作;compactRegoin + splitRegoin

Master是所有Regoin Server的管理者,其实现类为HMaster。它主要负责对表的操作;将Regoin分配给RegoinServer,监控每个RegoinServer的状态,实现负载均衡和故障转移。

zookeeper主要负责做master的高可用,元数据meta的入口集群配置的维护等。负责与客户端的交互,所有客户端读写数据的入口,对数据的增删改查。(所以读写数据时,HMaster挂掉也没有关系)

 

 

 

memstore会将数据排好序后,等达到刷写时机再请求调用HDFS Client刷写到StoreFile中,每刷写一次形成一个新的HFile;

StoreFile存储在HDFS上。HFile是其存储格式(类似Parquet,textFile等),是key-value;

Hlog也会写入到HDFS上。

API

org.apache.hadoop.hbase

读写流程

写流程

 

 

 HBase有两个默认的表:meta、namespace。meta表里存有用户/系统表所在的位置,所在的RegoinServer。

zk记录了meta表在哪个RegoinServer上。

 

 

 flush时机

  1. 内存
    1. 一个RegoinServer的所有memstore >= 堆内存*40%。  ——  阻塞写入,开始刷写,会停止其他的所有读写流程。 
    2. 一个RegoinServer的所有memstore下限  >= 堆内存 * 40% * 0.95。——  开始刷写,不停止其他读写流程。
    3. 单个Regoin的memstore >= 128M。当前这个Regoin开始刷写。
    4. 当WAL文件的数量>32个时(这个参数已经不给用户可见了),当前这个Regoin开始刷写。每个WAL文件的大小默认时128M,达到128M时就会形成一个新的文件。
  2. 时间
    1. 刷写时间间隔。—— 默认是1个小时,最后一条数据到达一个小时之后,开始刷写。

读流程

 

 

 同时读memstore和磁盘,然后把storeFile里面的数据缓存到Block Cache里面,然后将memStore和BlockCache里面的内容做比较,返回时间戳大的内容。

要注意:存在Block Cache中后,就不会再读磁盘里面的这部分内容,但是要读磁盘里的其他内容。

rowKey设计原则

1. 唯一

2. 长度

3. 散列原则:预分区指定个数和范围后,将rowkey设计为:(123123123+2020-01-06).hash%分区数_123123123+2020-01-06

  效果:把相同电话号码相同日期的信息放在同一个regoin里,在一个分区里,相同电话号码同一天的所有数据连续地存储在一个区域。

合久必分,分久必合

compact
  minor compaction: 将多个HFile合并成一个较大的HFile,但不会清理过期和删除的数据。
  major compaction:将一个Store下的所有HFile合并成一个大的HFile,并且会清理过期和删除的数据
split
  
 
 
 
posted @ 2021-01-06 16:32  极速遁走  阅读(102)  评论(0编辑  收藏  举报