网站商城建设实训心得,手机网站改版公司,网站建设计划书,怎么找到域名做的那个网站文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构
HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服… 文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构
HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服务器HBase 一般采用 HDFS 作为底层数据存储系统
客户端
客户端包含访问 HBase 的接口同时在缓存中维护着已经访问过的 Region 位置信息用来加快后续数据访问过程。HBase 客户端使用 HBase 的 RPC 机制与 Master 和 Region 服务器进行通信。对于管理类操作客户端与 Master 进行 RPC而对于数据读写类操作客户端会与Region 服务器进行 RPC。
ZooKeeper 服务器
HBase 服务器集群包含一个 Master 主服务器和多个 Region 服务器。Master是HBase 集群的“总管”它必须知道 Region 服务器的状态。ZooKeeper 服务器就可以轻松做到这一点每个 Region 服务器都需要到 ZooKeeper 服务器中进行注册ZooKeeper 服务器会实时监控每个 Region 服务器的状态并通知 Master 主服务器这样Master 主服务器就可以通过 ZooKeeper服务器随时感知到各个 Region 服务器的工作状态。ZooKeeper 服务器并非一台单一的机器可能是由多台机器构成的集群来提供稳定可靠的协同服务。ZooKeeper 服务器能够很容易地实现集群管理的功能如果有多台服务器组成一个服务器集群那么必须有一个Master知道当前集群中每台机器的服务状态一旦某台机器不能提供服务集群中其他机器必须知道从而做出调整、重新分配服务策略。同样当增加一台或多台服务器也必须让Master知道。ZooKeeper 服务器不仅能够帮助维护当前的集群中机器的服务状态而且能够帮助选出一个“总管”让总管来管理集群。HBase 中可以启动多个 Master但是 ZooKeeper 服务器可以帮助选举出一个 Master 主服务器作为集群的总管并保证在任何时刻总有唯一一个 Master 主服务器在运行避免 Master 主服务器的“单点失效”问题。ZooKeeper 服务器中保存-ROOT-表的地址和 Master 主服务器的地址客户端可以通过访问ZooKeeper 服务器获得-ROOT-表的地址并最终通过“三级寻址”找到所需的数据。ZooKeeper服务器中还存储 HBase的模式包括 Hbase的表每个表的列族。
Master 主服务器
Master 主服务器主要负责表和 Region 的管理工作。
管理用户对表的增加、删除、修改、查询实现不同 Region 服务器之间的负载均衡在 Region 分裂或合并后负责重新调整 Region 的分布对发生故障失效的 Region服务器上的Region 进行迁移 客户端访问 HBase 上数据的过程不需要 Master 主服务器的参与客户端访问ZooKeeper 服务器获取-ROOT-表的地址并最终到相应的 Region 服务器进行数据读写Master主服务器仅维护着表和 Region 的元数据信息因此负载很低。 一个 Region 只能分配给一个 Region 服务器。Master 主服务器维护当前可用的Region 服务器列表,以及Reginon的分布情况。当存在未被分配的 Region并且有一个 Region 服务器上有可用空间时Master 主服务器就给这个 Region 服务器发送一个请求把该 Region 分配给它。Region 服务器接收请求并完成数据加载后就开始负责管理该 Region 对象并对外提供服务。
Region 服务器
Region 服务器是 HBase 中最核心的模块负责维护分配给自己的 Region并响应用户的读写请求。HBase一般采用 HDFS 作为底层存储的文件系统因此 Region 服务器需要向HDFS 中读写数据。采用 HDFS 作为底层存储系统可以为 HBase 提供可靠稳定的数据存储HBase自身并不具备数据复制和维护数据副本的功能HDFS可以为HBase提供这些支持。
Region 服务器工作原理
Region 服务器内部管理一系列 Region 对象和一个 HLog 文件。HLog是磁盘上面的记录文件它记录着所有的更新操作。每个 Region 对象由多个 Store 组成每个 Store 对应表中的一个列族的存储。每个 Store 又包含一个 MemStore 和若干个 StoreFile。其中MemStore 是在内存中的缓存保存最近更新的数据StoreFile 是磁盘中的文件文件是 B 树结构的方便快速读取。
用户读写数据的过程
当用户写入数据时会被分配到相应的 Region 服务器去执行操作。用户数据首先被写入MemStore 和 HLog 中当操作写入 HLog 之后commit()调用才会将其返回给客户端。当用户读取数据时Region 服务器会首先访问 MemStore 缓存如果数据不在缓存中才会到磁盘上面的 StoreFile 中去寻找。
缓存的刷新
MemStore 缓存的容量有限系统会周期性地调用 Region.flushcache()把 MemStore 缓存里面的内容写到磁盘的 StoreFile 文件中清空缓存并在 HLog 文件中写入一个标记用来表示缓存中的内容已经被写入 StoreFile 文件中。每次缓存刷新操作都会在磁盘上生成一个新的 StoreFile 文件因此每个 Store 会包含多个 StoreFile 文件每个Region服务器都有一个自己的 HLog 文件。在启动的时候每个Region服务器会检查自己的 HLog 文件确认最近一次执行缓存刷新操作之后是否发生新的写入操作。如果没有更新说明所有数据已经被永久保存到磁盘的 StoreFile 文件中如果发现更新就先把这些更新写入 MemStore然后刷新缓存写入磁盘的StoreFile文件中。最后删除旧的 HLog 文件并开始为用户提供数据访问服务。
StoreFile合并
每次 MemStore 缓存的刷新操作都会在磁盘上生成一个新的 StoreFile 文件系统中的每个 Store 可能存在多个 StoreFile 文件。当需要访问某个 Store 中的某个值时必须查找所有StoreFile文件非常耗费时间。因此为了减少查找时间系统一般会调用 Store.compact()把多个StoreFile文件合并成一个大文件。由于合并操作比较耗费资源因此只会在StoreFile文件的数量达到一个阈值的时候才会触发合并操作。
Store 的工作原理 Region 服务器是 HBase 的核心模块而 Store 是 Region 服务器的核心。每个 Store 对应了表中的一个列族的存储。每个 Store 包含一个 MemStore 缓存和若干个 StoreFile 文件。 MemStore 是排序的内存缓冲区当用户写入数据系统首先把数据放入 MemStore 缓存当 MemStore 缓存满时就会刷新到磁盘中的一个 StoreFile 文件中。随着 StoreFile 文件数量的不断增加当达到事先设定的数量时就会触发文件合并操作多个 StoreFile 文件会被合并成一个大的 StoreFile 文件。当多个 StoreFile 文件合并后会逐步形成越来越大的 StoreFile 文件当单个StoreFile 文件大小超过一定阈值时就会触发文件分裂操作。同时当前的一个父 Region 会被分裂成两个子 Region父 Region 会下线新分裂出的两个子 Region 会被 Master 主服务器分配到相应的 Region 服务器上
HLog 的工作原理 HBase 系统为每个 Region 服务器配置了一个 HLog 文件它是一种预写式日志Write Ahead Log也就是说用户更新数据必须首先被记入日志才能写入 MemStore 缓存并且直到 MemStore缓存内容对应的日志已经被写入磁盘之后该缓存内容才会被刷新写入磁盘。 ZooKeeper 服务器会实时监测每个 Region 服务器的状态当某个 Region 服务器发生故障时ZooKeeper 服务器会通知 Master 主服务器。Master 主服务器首先会处理该故障 Region 服务器上面遗留的 HLog 文件由于一个 Region 服务器上面可能会维护多个 Region 对象这些 Region 对象共用一个 HLog 文件因此遗留的 HLog 文件中包含来自多个 Region 对象的日志记录。 系统根据每条日志记录所属的 Region 对象对 HLog 数据进行拆分分别放到相应 Region 对象的目录下然后将失效的 Region 重新分配到可用的 Region 服务器中并把与该 Region 对象相关的HLog 日志记录也发送给相应的 Region 服务器。Region 服务器领取分配给自己的 Region 对象以及与之相关的 HLog 日志记录以后会重新做一遍日志记录中的各种操作把日志记录中的数据写入 MemStore 缓存然后刷新到磁盘的 StoreFile 文件中完成数据恢复。 HBase 系统中每个 Region 服务器只需维护一个 HLog 文件所有Region 对象共用一个 HLog而不是每个 Region 对象使用一个 HLog。在这种 Region 对象共用一个 HLog 的方式中多个 Region 对象的更新操作所发生的日志修改只需要不断把日志记录追加到单个日志文件中而不需要同时打开、写入多个日志文件中可以减少磁盘寻址次数提高对表的写操作性能。这种方式的缺点如果一个 Region 服务器发生故障为恢复其上的Region 对象需要将 Region 服务器上的 HLog 按照其所属的 Region 对象进行拆分然后分发到其他 Region 服务器上执行恢复操作。