zoukankan      html  css  js  c++  java
  • Hbase存储实现

    1、Hbase的数据存储在存储文件(store file)中,称为Hfile。

    2、Hfile中存储的是经过排序的键值映射结构。文件内部由连续的块组成,块的索引信息存储在文件的尾部。

    3、打开Hfile并加载到内存中时,索引的信息会优先加载到内存中,每个块的默认大小是64kb,可根据其需求配置不同的块大小。

    4、每一个Hfile都有一个块索引,通过一个磁盘查找可以实现查询。

    5、Hfile通常保存在分布式文件系统(Hadoop HDFS)中,HDFS提供了一个可扩展的、持久的、冗余的Hbase存储层。

    6、每次更新数据时,都会先将数据记录在提交日志中,在Hbase中叫做“预写日志”,然后才会将这些数据写入内存中的memstore中。

    7、Hbase有Regionserver的内存:menmstore用于写;blockcache用于读取数据。

    8、一旦内存保存的写入数据的累计大小超过一个给定的最大值,系统就会将这些数据移出内存作为Hfile文件刷写到磁盘。数据移除内存之后,系统会丢弃对应的系统日志,只保留未持久化到磁盘中的提交日志。持久化到磁盘中的Hfile是按照行键顺序排序的,所以没必要执行排序或者其他特殊处理。

    9、Hfile是不可改变的,所以没有办法通过移除某个键值对来简单的删除值。但可以通过做“删除标记”(墓被标记)来表明给定的行已经被删除的事实。删除标记掩盖了实际值,用户读取不到被做了删除标记的值。

    10、读回的数据是两部分数据合并的结果,一部分是memstore中还没写入到磁盘中的数据,;另一部分是磁盘上的存储文件。

    11、数据检索时用不到预写日志系统(WAL)。

    12、内存中的数据在服务器崩溃前没有写到磁盘,而后进行恢复数据时才会用到WAL。

    13、随着越来越多的Hfile文件的产生,Hbase的机制管家会将多个小的Hfile合并成一个大的Hfile。合并有两种类型,合并类型:
    minor合并(将多个小文件合并成一个大文件)
    major合并(将一个region中一个列族的若干个Hfile重写为一个新的Hfile,major合并会扫描所有的键值对,顺序的重写全部的数据,重写数据的过程会忽略做了删除标记的数据)

    14、Hbase三组件:
    客户端库
    一台主服务器
    多台region服务器
    可动态的增删region服务器,主服务器主要负责利用zookeeper为region服务器分配region

    15、zookeeper是一个可靠的、高可用的、持久的分布式协调系统。zookeeper提供了类似文件系统一样的访问目录和文件的功能,通常分布式系统利用他协调所有权、注册服务、监听更新————每台region服务器在zookeeper中注册了一个自己的临时节点,主服务器会利用这些临时节点来发现可用服务器,还可以利用临时节点来跟踪机器故障和网络分区。在zookeeper中,每个临时节点都相当于一个会话,这个会话是客户端连接zookeeper自动生成的。且每个会话有一个唯一的id,客户端会以此id不断地向zookeeper发送请求,一旦发生故障zookeeper客户端进程死掉,zookeeper会判断该会话超时,并自动删除属于它的临时节点。

    16、Hbase可利用zookeeper确保只要一个主服务器在运行,zookeeper作为一个region服务器的注册表,zookeeper是一个关键的组成部分,没有zookeeper,Hbase无法运行。

     

    17、列式存储结构允许表在实际存储时不存储NULL值,因此表可以看作是一个无限的、稀疏的表。表中的每一行数据只由一台服务器所服务。hbase具有强一致性,多版本可以避免因并发解耦过程引起的编辑冲突,而且还可以保留这一行的历史变化。

  • 相关阅读:
    java request.getInputStream中文乱码解决方案
    MySql5.7配置文件my.ini 设置 my.ini文件路径
    PostgreSQL抛错“不良的类型值: long”之解决
    PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写
    PostgreSQL的空串、空值对唯一性约束的影响
    JPA/Hibernate移植到PostgreSQL时关于CLOB, BLOB及JSON类型的处理
    PostgreSQL函数自动Commit/Rollback所带来的问题
    JBoss EAP 为应用项目配置PostgreSQL数据源
    PostgreSQL 9.4使用UUID
    PostgreSQL视图使用特殊名称作字段时的处理
  • 原文地址:https://www.cnblogs.com/guo-up/p/8350795.html
Copyright © 2011-2022 走看看