Master 是所有 Region Server 的管理者,其实现类为 HMaster(服务器上有个HMaster进程),主要作用如下: 对于表的操作:create, delete, alter对于 RegionServer 的操作:分配 regions 到每个 RegionServer,监控每个 RegionServer的状态,负载平衡和故障转移。即负责ddl操作
1.3.2 Region Server
Region Server 为 Region 的管理者,其实现类为 HRegionServer(服务器上有个HRegionServer进程),主要作用如下: 对于数据的操作:get, put, delete(负责dml操作);对于 Region 的操作:splitRegion、compactRegion。一个Region Server管理多个Region
写流程:
Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server
访问对应的 Region Server,获取 hbase:meta 表,根据读哀求的 namespace:table/rowkey, 查询出目的数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问
与目的 Region Server 举行通讯
将数据顺序写入(追加)到 WAL
将数据写入对应的 MemStore,数据会在 MemStore 举行排序
向客户端发送 ack
等到达 MemStore 的刷写时机后,将数据刷写到 HFile
3.3 MemStore Flush
2016-02-04 03:32:41,516 INFO [MemStoreFlusher.1] regionserver.HRegion: Started memstore flush for sentry_sgroup1_data,{\xD4\x00\x00\x01|\x00\x00\x03\x82\x00\x00\x00?\x06\xDA`\x13\xCAE\xD3C\xA3:_1\xD6\x99:\x88\x7F\xAA_\xD6[L\xF0\x92\xA6\xFB^\xC7\xA4\xC7\xD7\x8Fv\xCAT\xD2\xAF,1452217805884.572ddf0e8cf0b11aee2273a95bd07879., current region memstore size 128.9 M
/******* flush阶段 ********/
2016-02-04 03:32:42,423 INFO [MemStoreFlusher.1] regionserver.DefaultStoreFlusher: Flushed, sequenceid=1726212642, memsize=128.9 M, hasBloomFilter=true, into tmp file hdfs://hbase1/hbase/data/default/sentry_sgroup1_data/572ddf0e8cf0b11aee2273a95bd07879/.tmp/021a430940244993a9450dccdfdcb91d
/******* commit阶段 ********/
2016-02-04 03:32:42,464 INFO [MemStoreFlusher.1] regionserver.HStore: Added hdfs://hbase1/hbase/data/default/sentry_sgroup1_data/572ddf0e8cf0b11aee2273a95bd07879/d/021a430940244993a9450dccdfdcb91d, entries=643656, sequenceid=1726212642, filesize=7.1 M
Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server
访问对应的 Region Server,获取 hbase:meta 表,根据读哀求的 namespace:table/rowkey, 查询出目的数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以 及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问与目的 Region Server 举行通讯
分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目的数据,并将 查到的所有数据举行归并。此处所有数据是指同一条数据的不同版本(time stamp)或者不 同的类型(Put/Delete)
将从文件中查询到的数据块(Block,HFile 数据存储单元,默认巨细为 64KB)缓存到 Block Cache
将归并后的最闭幕果返回给客户端
3.5 StoreFile Compaction
默认情况下,每个 Table 起初只有一个 Region,随着数据的不断写入,Region 会自动进 行拆分。刚拆分时,两个子 Region 都位于当前的 Region Server,但处于负载平衡的考虑, HMaster 有大概会将某个 Region 转移给其他的 Region Server。
Region Split 时机:
当 1 个 region 中的某个 Store 下所有 StoreFile 的总巨细超过 hbase.hregion.max.filesize(10g), 该 Region 就会举行拆分(0.94 版本之前)。
当 1 个 region 中的某个 Store 下所有 StoreFile 的总巨细超过 Min(R^2 * "hbase.hregion.memstore.flush.size",hbase.hregion.max.filesize"),该 Region 就会举行拆分,其 中 R 为当前 RegionServer 中属于该 Table 的region个数(0.94 版本之后) hbase.hregion.max.filesiz默认为10g;hbase.hregion.memstore.flush.size默认为128