- Hbase的特性:容量巨大、面向列、稀疏性、扩展性,高可靠性、高性能
- Hbase的优势:高可靠性,高性能,面向列 可伸缩的分布式数据库,利用hbase可以在廉价pc上搭建起大规模结构化数据集群。
- Hbase的核心功能模块:
- Client:这个Hbase系统的入口,直接通过客户端操作hbase,使用RPC协议与Hmaster(管理类操作)和RegionServer(数据写读类操作)进行通信
- 协调服务模块ZooKeeper,负责管理Hbase中多Hmaster的选举、服务器之间状态同步等,储存所有region的寻址入口,保证hbase集群中只有一个Hmaster节点
- Hmaster主要的职责是什么?答:主要负责Table和Region的管理工作,管理用户对Table的增删改查操作,管理regionserver的负载均衡,调整region分布;在region分裂后,负责新region的分配;在regionserver宕机后,负责失效regionserver上的region的迁移工作
- hbase使用场景(最好知道几个例子:淘宝,搜狐等等):储存大量的数据且能保证良好的随机访问性能,需要很高的写吞吐量,瞬间写入量很大,可以动态扩展整个存储系统容量,数据格式无限制,业务场景简单
- 为什么在Hbase的RegionServer上会发生 切表这一动作?答:Hbase中每张表的大小可能是TB级,甚至是pb级的;一台物理机上是不可能存储整张表,因此表会切分成小一点的数据单位,然后分配到多台服务器上
- Hmaster为什么没有单点问题?答:Hbase 中可以启动多个Hmaster,通过Zookeeper中的Master Election机制保证总会有一个master在运行
- ZooKeeper在整个框架中的定位。答:一种集中服务,用来维护配置信息、命名 服务、提供分布式同步和提供分组服务;负责管理Hbase中多Hmaster的选举、服务器之间状态同步等,储存所有region的寻址入口,保证hbase集群中只有一个Hmaster节点。
- 请描述Hregion的负载均衡过程。答:HBase使用RowKey将表水平切割成多个 Hregion,每个HRegion都纪录了它的StartKey和 EndKey,Client可以通过HMaster快速的定位每个 RowKey在哪个HRegion中,HRegion由HMaster分配到相应在HRegion Split后,两个新的HRegion 最初会和之前的父HRegion在相同的 HRegionServer上,出于负载均衡的考虑,HMaster可能会将 其中的一个甚至两个重新分配的其他的 HRegionServer中,此时会引起有些HRegionServer处理的数 据在其他节点上 ,直到下一次Major Compaction将数据从 远端的节点移动到本地节点。这就是Hregion的负载均衡。
- Hstore由哪些部分组成?各个部分主要负 责哪些工作?答:两部分组成,一部分是MemStore,一部 分是StoreFiles;*MemStore是Sorted Memory Buffer, 内存里的写入缓冲区,用户写入的数据首 先会放入MemStore; 当某一个region的MemStore大小达到一 定的阀值时,hbase就会阻塞更新;当MemStore满了以后会Flush成一个 StoreFile(底层实现是HFile)存储到磁盘 上;*StoreFile以HFile格式保存在HDFS上;用于存储Hbase的数据;当StoreFile文件数量增长到一定阈值,会 触发Compact操作,将多个StoreFiles合 并成一个StoreFile; 压缩过程中会进行版本合并和数据删除; 因此可以看出HBase其实只有增加数据, 所有的更新和删除操作都是在后续的 compact过程中进行的; • 这使得用户的写操作只要进入内存中就可 以立即返回,保证了HBase I/O的高性能。
- WAL是什么?作用是什么?答:预写式日志,记录所有更新操作; • 一个region server包括Hlog日志和存放实 际数据的Store; • 用于灾难恢复
- 请描述RegionSever的读写流程。答:RegionServer的写流程 • 当客户端发起一个Put请求时,首先它从 hbase:meta表中查出该Put数据最终需要 去的HRegionServer。 • 然后客户端将Put请求发送给相应的 HRegionServer,在HRegionServer中 它首先会将该Put操作写入WAL日志文件中 (Flush到磁盘 • 写完WAL日志文件后,HRegionServer根 据Put中的TableName和RowKey找到对 应的HRegion,并根据Column Family找 到对应的HStore,并将Put写入到该 HStore的MemStore中。 • 此时写成功,并返回通知客户端。RegionServer的读流程 • 分析一下相同的Cell可能存在的位置 • 首先对新写入的Cell,它会存在于 MemStore中; • 然后对之前已经Flush到HDFS中的Cell, 它会存在于某个或某些StoreFile(HFile)中; • 最后,对刚读取过的Cell,它可能存在于 BlockCache中。 • 既然相同的Cell可能存储在三个地方,在读 取的时候只需要扫瞄这三个地方,然后将 结果合并即可(Merge Read), • 在HBase中扫瞄的顺序依次是: BlockCache、MemStore、 StoreFile(HFile)。 • 其中StoreFile的扫瞄先会使用Bloom Filter过滤那些不可能符合条件的HFile, • 然后使用Block Index快速定位Cell,并将 其加载到BlockCache中,然后从 BlockCache中读取。 • 一个HStore可能存在多个 StoreFile(HFile),此时需要扫瞄多个 HFile,如果HFile过多又是会引起性能问题。
- Compaction方式有几种?每一种应用的场 景是什么?答:在HBase中Compaction分为两种:Minor Compaction和Major Compaction。 • Minor Compaction是指选取一些小的、 相邻的StoreFile将他们合并成一个更大的 StoreFile,在这个过程中不会处理已经 Deleted或Expired的Cell。 • Major Compaction是指将所有的 StoreFile合并成一个StoreFile • 在这个过程中,标记为Deleted的Cell会被 删除 • 而那些已经Expired的Cell会被丢弃 • 那些已经超过最多版本数的Cell会被丢弃 • 一次Major Compaction的结果是一个 HStore只有一个StoreFile存在 • Major Compaction可以手动或自动触发 • 由于它会引起很多的IO操作而引起性能问 题 • 因而它一般会被安排在周末、凌晨等集群 比较闲的时间。
- 请解释Hbase与Hadoop是如何协同工作的。(不知道标准答案)答:HBase是一个分布式的、面向列的开源数据库.HBase是Apache的Hadoop项目的子项目
- Hbase中对Join的支持是如何做到的?把另一张表的关键字加入表中列族,加入二级索引
- 请说出几种RowKey散列的方法:加入随机数,反转倒序,取模,哈希值
- 为什么Hbase不能处理好两个或者三个以 上的列族?答:由于Hbase的物理因素,内存memstore在做flash操作后会生成针对列族的Hfile文件,当各个Hfile数据量大小差异过大时会做出“合并”操作,而此操作是在region上完成的,region又是用户承载着数据操作,因此影响性能,所以过多的列族是Hbase不能处理的。
posted on
2019-01-02 20:27
叛逆闲人
阅读(
585)
评论()
编辑
收藏
举报