HBase 架构概览
本篇介绍 HBase 架构以及一些关键点。
Server
- HMaster
- Region Server
Table
- Namespace
可以为 HBase 表指定命名空间,一个 namespace 对应多个 表。 - Table
表被拆分为一组 region。region 分布在不同的 RegionServer 中。每个 Region 管理一段 rowkey 范围的行。
region 中的数据都是按照 start key 和 end key 排序好的。 - Region
- Store
- One Memory Store
- 0-N store files
- Row
- rowkey
- column family
- column
- timestatmp
HBase 中的表一般由多个 region 组成。这些 region 由不同的 region server 管理。同一个 region 只属于一个 region server。 当 HBase 表刚创建时,通常只有一个 region。意味着所有的表请求操作会被落到一个 region server 中。
预分区
HBase 表创建的时候,通常只有一个 region,在知道导入的数据 row key 分布的情况下,可以采用预分区来实现表的负载均衡。 将表预分成多个 region, 分布在不同的 region server 上。来提高性能。减低 HBase 单个 region server 负载。
HBase 提供预分区工具
- 已经存在的表 split
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 8 -f f1
-c 表示分成8个 region ,-f 表示 column family,多个 cf 使用:隔开。
- 已经存在的表 split
hbase(main)>create 'test_table', 'f1', SPLITS=> ['a', 'b', 'c']
$ echo -e "anbnc" >/tmp/splits
hbase(main)> create 'test_table', 'f1', SPLITSFILE=>'/tmp/splits'
Java api(Admin):
void createTable(HTableDescriptor desc, byte[] startKey, byte[] endKey, int numRegions)throws IOException;
void createTable(final HTableDescriptor desc, byte[][] splitKeys) throws IOException;
void createTableAsync(final HTableDescriptor desc, final byte[][] splitKeys) throws IOException;
一般 MR 向 HBase 中 load 数据的时候,通常会先对数据进行采样,然后 split 表,然后生成 HFile 再导入 HBase。
Region
Table (HBase table)
—–Region (Regions for the table)
———-Store (Store per ColumnFamily for each Region for the table)
—————MemStore (MemStore for each Store for each Region for the table)
—————StoreFile (StoreFiles for each Store for each Region for the table)
——————–Block (Blocks within a StoreFile within a Store for each Region for the table)
通常每个 Region Server 管理的 region 在200以下为宜。每个 region 管理5-20G数据为宜。
关键配置
zookeeper.session.timeout
hbase.regionserver.handler.count
hbase.regionserver.global.memstore.lowerLimit
hbase.regionserver.global.memstore.upperLimit
hbase.regionserver.hlog.blocksize
hbase.regionserver.maxlogs
hbase.hstore.blockingStoreFiles
hbase.hregion.memstore.flush.size
hbase.hregion.memstore.block.multiplier
write performance:
table region 分布均衡
单台region server 的 region 数
hbase.regionserver.handler.count
hbase.regionserver.global.memstore.upperLimit
hbase.hregion
hbase.hregion.max.filesize
hfile.block.cache.size
参考:
HBase ref:Data Model
HBase ref:Master
HBase ref:RegionServer
HBase ref:Regions
Understanding HBase and BigTable
Introduction to HBase Schema Design