他人真实面试问题
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流。QQ911283415
1.HBase的架构和基本原理
Hbase以表的方式组织数据,
表由行(Row)以及列(Column)组成,行由row key和一个或多个列及其值组成(存储是按照row key的字典顺序排序,row key的设计非常重要!!),
列必须属于某一列族(Column family),一个列族可以有一各或多个列(一列由列簇和列修饰符组成,他们通常由冒号(:) 分隔),其在存储架构中就是一个Hfile。
Hbase中的列可以达到百万级,列中的数据可以是稀疏的,空值并不占用存储空间。
数据按主键排序,同时表按主键划分为多个Region。底层是LSM树(Long-Structed Merge Tree)。
对于以上叙述,表的简略结构:(逻辑模型)
注1:建议把Hbase理解为一个多维Map
Hbase简略架构图如下:
接下来对Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等做个简单叙述:
Zookeeper
- 保证任何时候,集群中只有一个master(负责多HMaster的选举)
- 存贮所有Region的寻址入口
- 实时监控RegionServer的状态、将RegionServer的上线和下线信息实时通知给Master(服务器之间状态同步)
- 存储Hbase的schema(元数据信息)。包括有哪些table、每个table有哪些column family等
HMaster
(主要负责table和region的管理工作)
- Region分裂后,为RegionServer分配新的Region
- 负责RegionServer的负载均衡,调整region的分配
- 发现失效的region server并重新分配其上的region
(Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,见转载文章:http://developer.51cto.com/art/201708/549419.htm)- 管理用户对table的增、删、改、查操作
- 监听zk,基于zookeeper感应rs的上下线
- 监听zk,基于zookeeper来保证HA
- 处理schema更新请求 (管理用户对表的增删修改)
- 不参与对表的读写访问
- 负载很低
- 无SPOF(单点故障)
- 在一个RegionServer死机后,负责失效节点的Region的迁移
HRegionServer