• 23 HBase 存储架构。


    WAL
           WAL: Write-Ahead Logging[1]  预写日志系统
    数据库中一种高效的日志算法,对于存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志的数据库系统事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。

    HBase 的工作流程

           Client -> ZooKeeper -> HMaster 检索-ROOT- RegionServer。-> 检索 RegionServer 查看.META.表 找到对应行健。->RegionServer 知道了 在那个 Region 里,缓存此信息,同时连接 该HRegionServer。 现在客户端就有了去哪里获取行的完整信息而不需要再去查询.META.服务器。

            1、  流程

    a)        Client发起了一个HTable.put(Put)请求给HRegionServer

    b)        HRegionServer会将请求匹配到某个具体的HRegion上面

    c)         决定是否写WAL logWAL log文件是一个标准的Hadoop SequenceFile,文件中存储了HLogKey,这些Keys包含了和实际数据对应的序列号,主要用于崩溃恢复。

    d)        Put数据保存到MemStore中,同时检查MemStore状态,如果满了,则触发Flush to Disk请求。

    e)        HRegionServer处理Flush to Disk的请求,将数据写成HFile文件并存到HDFS上,并且存储最后写入的数据序列号,这样就可以知道哪些数据已经存入了永久存储的HDFS中。

     
    HBase存储数据流程

            Client写入 写入到 LSM 内存中,LSM内存写到一定阈值后 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split 2个 RegionRegion会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer 上,使得原先1Region的压力得以分流到2Region上由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的

    HBase File In HDFS。

    HBase 文件可以分成两类:
        一、直接位于HBase根目录下。(HLog)
        二、位于表目录下文件
        1)根目录
            第一类文件是由HLog 实例处理的 WAL 文件,这些文件创建在 HBase 跟目下一个称为 .logs 的目录中。.logs目录下包含针对每个 HRegionServer的子目录。每个子目录下通常有几个 HLog 文件 (因为日志的切换产生),来自相同 RegionServer的Region 共享这些 HLog 文件。 对于最新创建的HLog文件通常大小为0,因为 HDFS 正使用一个内置的 append 支持来对文件进行写入,同时对于读取者来说只有那些完整的 Block 才是可用的, 包括 hadoop fs -lsr 命令。 尽管写操作的数据被安全地持久化,但是当前写入的日志文件大小信息有些轻微的不同。 日志文件每小时切换一次(默认 60分钟)后, 这个时间是由 hbase.regionserver.logrool.period 配置项控制。 等日志文件切换后,可以查看其正确大小,因为该文件已经被关闭了,所以HDFS 可以获取正确的状态。而其之后的新日志文件戴傲又会变为0.
            当日志文件不再需要时,现有的表更已经持久化到存储文件中了,他们就会诶移动到 HBase 根目录的 .oldlogs 目录中。 这是在日志文件达到上面的切换阈值时触发的。 老的日志文件默认会在10分钟后被 Master 删除, 通过 hbase.master.logcleaner.ttl 设定。 Master 默认每分钟会对这些文件进行检查,可以通过 hbase.master.cleaner.interval 设定。
        2)表
            HBase 中的每个表都有他自己的目录,位于HBase 根目录之下(最最开始讲的HBase表命名要规范的作用,因为他又是文件名)(更正0.98以后貌似改了。不是上面的/hbase/表,而是 /hbase/date/default/表,待验证。每个表目录都有个.tableinfo 的顶层文件,该文件保存了针对该表的 HTableDescriptor 序列化后的内容,包含了一些元数据信息,同时可以被读取。可以通过工具查看表的定义;tmp 包含了一些中间数据。
            
            
            

        3 Region
        在每个表目录内,最对表的Schema 中的每个列族会有一个单独的目录。目录名称还包含 Region 名称的 MD5 哈希部分。 对于存储在磁盘上的目录中的 Region 名称。
        一旦一个Reion 因为容量大小而需要 split , 会创建一个阈值对应的 splits 目录,用来筹划产生两个子 Region。通常只需要几秒或更短的时间,该过程成功之后他们会被移入表目录下用来形成两个新的 Region , 每个代表原始 Region 的一半.换句话说,如果发现一个Region 目录下没有 .tmp 目录,那么说明目前他还没有执行合并。如果也没有 recovered.edits 目录,那么说明目前没有针对他的 WAL 回放。

        // 【表名】,【起始rowkey,如果从0开始 就不写 ,,】【 蓝色部分为后半部分。是哈希。尾部的点事整个 Region 的一部分,是一种包含哈希的新风格。
        例如:p_t_rss ,[rk-1000],1440470934157 .41ba12b50dfcf29053b8de5725dc518.

        


    Region 切分。
        












    God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting. rocky_24
  • 相关阅读:
    apache和tomcat有什么不同,为什么要整合apache 和tomcat?
    servlet
    关于Spring配置文件xml文档的schema约束
    request对象和response对象
    多线程
    数据结构得到连续数据的手段java Enumeration
    程序员八荣八耻
    windows更改MySQL存储路径
    Tomcat源码学习(1)
    Tomcat源码学习(2)——启动过程分析
  • 原文地址:https://www.cnblogs.com/rocky24/p/4829968.html
Copyright © 2020-2023  润新知