- 描述HBase有哪些特性,解释说明。
- 海量存储:Hbase适合存储PB级别的海量数据,在几十到百毫秒内返回数据。
- 列式存储:HBase是面向列(族)存储的,并且列(族)拥有独立索引,对数据的权限控制也是从列族层面来实现的。
- 极易扩展:HBASE为横向扩展,只需要添加服务器台数即可对集群进行扩展
- 高可靠性:HBASE是基于hdfs分布式文件系统的,hdfs采用副本机制,所以HBASE具有高可靠性
- 稀疏:在列数据为空的情况下,是不会占用存储空间的。
- HBase数据库写入数据的流程。
- 客户端首先访问zookeeper,从meta表得到写入数据对应的region信息和相应的region服务器。
- 找到相应的region服务器,把数据分别写到HLog和MemStore上一份。
- MemStore达到阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以从HLog上恢复)。
- 当StoreFile文件达到一定的数量后,会触发Compact合并操作,合并为一个StoreFile
- 当Storefile大小超过一定阈值后,会把当前的Storefile分割为两个(Split分裂)
- HBase数据库读取数据的流程。
客户端先访问zookeeper,从meta表读取Region的信息对应的服务器。
客户端向对应Region服务器发送读取数据的请求
Region接收请求后,先从MemStore找数据,如果没有,再到StoreFile上读取
将数据返回给客户端。
- HBase集群都有哪些组件?写出各自的功能
Client客户端
HBase系统的入口:客户端用来操作HBase数据库
通信功能:与HMaster进行管理类通信,与Regionserver进行数据读写类通信
Zookeeper
主要用来解决分布式应用中经常遇到的数据管理的问题
在HBase中协调的任务:HMaster选举,系统容错,Region元数据管理,记录HMaster/HRegionServer节点地址,Region状态管理
HMaster - HMaster是HBase集群中的主服务器,负责监控集群中的所有RegionServer,并且是所有元数据更改的接口。
- HMaster主要负责表和region的管理工作
- 与客户端交互,管理用户对表的增、删、改、查操作
- 管理RegionServer的负载均衡
- 处理RegionServer的故障转移
- 调整Region的分布,Region的分配和移除
RegionServer
一般在分布式集群当中,RegionServer运行在DataNode服务器上,实现数据的本地性。每个RegionServer包含多个Region,主要负责响应用户读写请求,从HDFS中读写数据。RegionServer是Hbase集群最核心的模块。
它负责的功能有:
处理客户端读写请求。
处理分配给它的Region。
刷新缓存到HDFS中。
处理Region的合并与拆分。
- HBase与HDFS的关系,HFile文件过多对集群有什么影响?如何解决?简单描述对应的方法及如何权衡
HDFS:
海量数据储存,适合一次扫描大量数据
适合一次写入,多出读取
不适合频繁修改数据
Hbase
适合一词扫描少量数据
合适多次写入多次读取
支持数据更新
支持删除数据
影响:HFile文件过多会影响集群的性能,增加HMaster的压力,HMaster的存储空间是有限的,HFile文件过多会占用大量的HMaster的内存空间。源数据增多,增大了检索文件目录的时间。
解决办法:进行文件合并
在Hbase中每当有 memstore 数据 flush 到磁盘之后,就形成一个 storefile, 当 storeFile 的数量达到一定程度后,就需要将 storefile 文件来进行compaction 操作。
-
写出MongoDB副本集的工作流程及复制的目的。
工作流程:备份节点定期轮询主节点上的数据操作,然后对自己的数据副本进行这些操作,从而保证跟主节点的数据同步
复制的目的:
Failover(故障转移,故障恢复)
Redundancy(数据冗余)
避免单点故障,提升数据可用性
读写分离,分担读压力
对用户透明的系统维护升级 -
写出MongoDB分片集群的组件及搭建分片集群的流程。
mongod:处理所有的数据请求,管理数据的增删改查操作
mongos(路由):集群的路由选择
mongod:为研发人员提供一套交互式js API
启动配置服务器,mongod进程,配置为单成员副本集。
启动mongos,使用配置文件启动一个mongos实例。
启动一个分片服务器,使用单成员的副本集。
对数据库启用分片
对集合进行分片
- 简单描述MongoDB的特点及其与关系数据库的区别。
数据量大
频繁写入
价值密度较低,对事务性要求低
存储方式:MongoDB是文档数据库,关系型数据库是按照结构化的方法存储数据
存储规范:关系型数据库避免重复,规范化,充分利用存储空间,MongoDB要求数据冗余备份,价值密度低。
扩展性:关系型数据库难于横向扩展,MongoDB可以横向扩展。
事务性:关系型数据库事务性较强,MongoDB事务性较低
-
为什么要使用Memcached或者Redis。
在内存中缓存关系型数据库的查询结果,减少数据库被访问的次数,从而提高web应用的响应速度,提高web应用的并发性和可扩展性,分担数据库的并发负载。 -
非关系数据库都有哪几类?举例并说明使用场景。
键值数据库:主要用于处理大量数据的高访问负载
图像数据库:只要用于网络社交媒体
列族数据库:主要用于海量数据的分布式存储
文档数据库:主要用于web应用的数据存储