大数据项目-3.hbase

一:为什么出现hbase?

  1. 在大数据的领域,一直摸索的有俩个方向,一个是存储,另外一个是计算。人们在这俩个领域不段的进行研究。按照之前的阶段来讲,存储使用hdfs,计算使用hive(map-reduce)。
  2. 但是有个问题,使用hdfs存储数据,查询会非常慢,所以,我们在hdfs的基础上,创建了hbase,数据底层依旧是hdfs,我们在hdfs之上对于数据做一个类似的索引,将这些信息存放在一个物理表中。后期我们查询某个信息,直接查询物理表即可。这就是hbase的原因。

二:hbase是什么?

1. hbase是分布式,高可用的列式存储工具。

2. hbase基础框架在这里插入图片描述

高可用

  1. Zookpeeper
    zk在大数据中的更多的作用是进行高可用的解决方案。
    在hbase中可以有多个HMaster,但是只会有一个起作用,当一个失效以后。zk会选举一个新HMaster的进行工作
    另外zk还HRegionServer,HRegion的注册。

分布式

  1. HMaster
    为HRegionSever分配HRegion
    监控HRegionSever进行负载均衡。
    发现有失效的HRegionSever重新分配。
    总结:管控资源。
  2. HRegionSever
    进行分布式操作。我们的数据最终存储在HRegion,分布式,说明有多个HRegion,所以需要一个管理者,即为HRegionSever。
    1. 进行和客户段的io。
    2. 监控HRegion。为了保持查询效率,当HRegion存储的数据多时,查询效率会降低,所以当超过一个阈值(256M)的时候,会分割成为俩个HRegion。

列式存储

  1. 逻辑列式存储
    在这里插入图片描述
    包含列族,列,rowkey,值。
    列族:目的是为了将相关联的列放在一起,经可能放在同一个服务器上,在查询的时候,可以减少时间。
    row_key:每一条数据的唯一值,可以通过rowkey来获取到一条完整的数据。
  2. 实际列式存储
    在实际的列式存储中,我们是key-vaule的方式进行存储的。
    在这里插入图片描述
    key: rowkey+列族+列+时间戳
    Value: 值
    为什么会出现时间戳?因为hdfs不允许修改,所以我们只能通过拿最新的时间来获取最新的数据,将老的数据覆盖掉,既为删除掉。
    我们每个表中的数据,在进入hbase中,都会存储成以上的格式。最后会存储在对应的每个列族下面(Store)
  3. HRegion
    table在行上被切分成多条信息,之后将这些信息存储在HRegion中。
    HRegion就是hdfs上的一个存储。
  4. Store
    Store是HRegion的组成单位,一个列族就是一个Store。有多少个列族就有多少个Store。每一个Store会包含至少0个MenStore和多个HFile。
  5. MemStore
    MemStore是存放在内存中的,对数据的修改都会存放在这个里面,当到达一个阈值(默认64M)的时候,就会被Flush成一个文件 。
  6. StoreFile
    MenStore最后写成的文件就是StoreFile。
  7. 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) 启动加载时间缓慢)
  8. Hlog
    里面记录所有的数据记录的变更,用户进行数据恢复。

3.读写流程

在这里插入图片描述

写流程

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

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

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

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

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

  6. 单个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,其中三次用来发现缓存失效,另外三次用来获取位置信息。

读的过程

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

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

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

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

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

三:怎么使用HBase?

1. 安装

2. 操作流程。

在这里插入图片描述
在这里插入图片描述

1.创建表。

在这里插入图片描述

create 'dk_ods:dk_ods_nukp_dkb_vehiclemodel_partnum','cf'
create 'dk_ods:dk_ods_nukp_dkb_data_dict','cf'
2. 查看表
list
3. 查看表信息
 scan "dk_ods:dk_ods_nukp_dkb_data_dict"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值