栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据项目-3.hbase(理论)

大数据项目-3.hbase(理论)

一:为什么出现hbase?
    在大数据的领域,一直摸索的有俩个方向,一个是存储,另外一个是计算。人们在这俩个领域不段的进行研究。按照之前的阶段来讲,存储使用hdfs,计算使用hive(map-reduce)。但是有个问题,使用hdfs存储数据,查询会非常慢,所以,我们在hdfs的基础上,创建了hbase,数据底层依旧是hdfs,我们在hdfs之上对于数据做一个类似的索引,将这些信息存放在一个物理表中。后期我们查询某个信息,直接查询物理表即可。这就是hbase的原因。
二:hbase是什么? 1. hbase是分布式,高可用的列式存储工具。 2. hbase基础框架 高可用
    Zookpeeper
    zk在大数据中的更多的作用是进行高可用的解决方案。
    在hbase中可以有多个HMaster,但是只会有一个起作用,当一个失效以后。zk会选举一个新HMaster的进行工作
    另外zk还HRegionServer,HRegion的注册。
分布式
    HMaster
    为HRegionSever分配HRegion
    监控HRegionSever进行负载均衡。
    发现有失效的HRegionSever重新分配。
    总结:管控资源。HRegionSever
    进行分布式操作。我们的数据最终存储在HRegion,分布式,说明有多个HRegion,所以需要一个管理者,即为HRegionSever。
      进行和客户段的io。监控HRegion。为了保持查询效率,当HRegion存储的数据多时,查询效率会降低,所以当超过一个阈值(256M)的时候,会分割成为俩个HRegion。
列式存储
    逻辑列式存储

    包含列族,列,rowkey,值。实际列式存储
    在实际的列式存储中,我们是key-vaule的方式进行存储的。

    key: rowkey+列族+列+时间戳
    Value: 值
    为什么会出现时间戳?因为hdfs不允许修改,所以我们只能通过拿最新的时间来获取最新的数据,将老的数据覆盖掉,既为删除掉。
    我们每个表中的数据,在进入hbase中,都会存储成以上的格式。最后会存储在对应的每个列族下面(Store)HRegion
    table在行上被切分成多条信息,之后将这些信息存储在HRegion中。
    HRegion就是hdfs上的一个存储。Store
    Store是HRegion的组成单位,一个列族就是一个Store。有多少个列族就有多少个Store。每一个Store会包含至少0个MenStore和多个HFile。MemStore
    MemStore是存放在内存中的,对数据的修改都会存放在这个里面,当到达一个阈值(默认64M)的时候,就会被Flush成一个文件 。StoreFile
    MenStore最后写成的文件就是StoreFile。HFile
    最后在hdfs上的二进制的存储文件就是HFile。

    Data Block段用来保存表中的数据,这部分可以被压缩。 meta Block段(可选的)用来保存用户自定义的kv段,可以被压缩。 FileInfo段用来保存HFile的元信息,不能被压缩,用户也可以在这一部分添加自己的元信息。 Data Block Index段(可选的)用来保存meta Blcok的索引。 Trailer这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个 block读取到内存中,再找到需要的key。DataBlock Index采用LRU机制淘汰。 HFile的Data Block,meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩。(备注: DataBlock Index的缺陷。 a) 占用过多内存 b) 启动加载时间缓慢)Hlog
    里面记录所有的数据记录的变更,用户进行数据恢复。
3.读写流程

写流程

    Client向zk发出写数据的请求。zk分配指定的HRegion。

    之后向HRegion写数据,数据被写到指定的MenStore中。

    等到底阈值,会形成一个StoreFile。

    随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。

    StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile。

    单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个新的Region。父Region会下线,新Split出的2个子Region会被HMaster分配到相应的RegionServer上,使得原先1个Region的压力得以分流到2个Region上。

读流程 了解HRegion定位

HRegion被分配给哪个HRegionServer是完全动态的,所以需要机制来定位HRegion具体在哪个HRegionServer,Hbase使用三层结构来定位HRegion:

1、通过zk里的文件/Hbase/rs得到-ROOT-表的位置。-ROOT-表只有一个region。

2、通过-ROOT-表查找.meta.表的第一个表中相应的HRegion位置。其实-ROOT-表是.meta.表的第一个region;.meta.表中的每一个Region在-ROOT-表中都是一行记录。

3、通过.meta.表找到所要的用户表HRegion的位置。用户表的每个HRegion在.meta.表中都是一行记录。-ROOT-表永远不会被分隔为多个HRegion,保证了最多需要三次跳转,就能定位到任意的region。Client会将查询的位置信息保存缓存起来,缓存不会主动失效,因此如果Client上的缓存全部失效,则需要进行6次网络来回,才能定位到正确的HRegion,其中三次用来发现缓存失效,另外三次用来获取位置信息。

读的过程

    Client访问Zookeeper,查找-ROOT-表,获取.meta.表信息。

    从.meta.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer。

    通过RegionServer获取需要查找的数据。

    Regionserver的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。

寻址过程:client–>Zookeeper–>-ROOT-表–>.meta.表–>RegionServer–>Region–>client

三:怎么使用Hbase? 1. 安装 2. 操作流程。

详细查看网站

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号