大数据之HBASEN内部详解

编程入门 行业动态 更新时间:2024-10-25 18:33:02


hregionmaster:
一台服务器只能个hrs服务==hrs的单元是一台服务器 或者hrs的单元是一个节点
Hregion:
大多数情况下,一个Hregion代表一张表的一部分的数据(当一张表只有一个region的时候,就是代表整个表的数据内容)
store:一个region含有多个ms,一个master代表一个列族当中的数据,
Store中存储的就是一个一个单元格的数据内容,也就是cell,所有真实的数据,最终就是在store中。
hbase的底层存储是hdfs,由于数据量大,如果单条写入,hdfs的效率会非常差,因此采用批量存入的方式来存储到hdfs——————–Memstore
Menstore:数据最开始进入的地方,就是menstore,也就是内存当中的数据,
由于Menstore中的数据是存在内存中,可能会出现数据丢失的可能,因此当Memstore中的数据达到一定量的时候,将数据持久化到storefile,
Storefile:将数据封装成一个一个hfile,Storefile其实是一个逻辑文件
Hfile:真正往hdfs写的一个一个的数据单元,,存储数据的物理文件

什么时候产生storefile:当Memstore中的数据达到一定量的时候,数据持久化写入到storefile中,形成一个一个的hfile
为什么数据最开始进入memstore,积累到一定的量的时候,再进入hfile?
答:速度快 数据写入内存和内存中读数据,都会很快

Hlog:
由于存储数据的流程是:当Memstore中的数据达到一定量的时候,数据持久化写入到storefile中,假如数据在达到一定的量之前,还未写入storefile中,此时发生意外,数据很有可能会丢失,
为什么还有hlog???
防止memstore当中的数据丢失
Hlog的数据,是直接写入到hdfs中的
为什么不直接写入到hdfs中,而是先写入到menstore,并且还要写入到hlog?
时间:数据写入memstor中的时间比hlog直接写入hdfs短
但是:数据写入到hdfs结束时,两者的时间会不一样,因为数据写入有rowkey的默认排序归规则,也就是字典排序,由于写入的数据,不能确定与原来的数据相比较大小排序,因此需要在memstore中查找,插入进行排序
若ms中的数据丢失,如何恢复?
Hlog直接将需要恢复的数据,数据写入memstore中,memstore进行排序操作,hfile再写入hdfs
什么时候才会使用hlog中的数据?
当内存中memstore数据丢失,平时不会使用hlog
不同的版本对hlog写入数据有不同的说明,最新:
Hlog的数据一直直接追加到hdfs,不排序
表的最终的存储的地方是按照region来分的
一个region涵盖多个列族
为什么一个store中有很多个storefile?
每写入一次,会写入多个hfile,
每刷新一次,就会形成一个一个的hfile文件
当log和memstore中的数据都写好以后,才返回给使用者,数据完成
数据先到hlog,再到memstore
一张表的数据到底是在一个regionserver里面还是多个?
多个
当一张表,region超过1以后,就会将region的数据去做负载均衡的操作,

负载均衡的好处:
1.写数据:假如写入2条数据,若没有负载均衡,只有第一条数据完成以后,第二条数据才能开始,如果做了负载均衡,两个region同时开工,并行方式写数据
2.读数据:同时读取两条数据,如果是负载均衡,2个region同时去拿,不需要排队等待
为什么将一张表切分成多个
内存数据:memstore
硬盘数据:hlog hfile
Hdfs:hadoop分布式文件管理系统,主要的作用是:在我们的硬盘中,把多块硬盘同时做相应的存储和查询

Region和Region服务器RegionServer:
表在行方向上,按照行键(rowkey)范围划分成若干的Region
每个表最初只有一个region,当记录数增加到超过某个阈值时,开始分裂成两个region(针对默认的创建方式),也可以采用预分期的方式,创建表时就设置region的数量、范围
物理上所有数据存放在HDFS,由Region服务器提供region的管理
一台物理节点只能跑一个HRegionServer
一个Hregionserver可以管理多个Region实例和多个HLOG:
老版本的Hregionserver:多个region、一个hlog
新版本的Hregionserver:一个region就对应一个hlog

一个Region存放多个数据的Store(代表一个列族的数据)
Hmaster作为总控节点
Zookeeper负责调度 Zookeeper是一个单独的产品,不属于habse
Hbase没有副本机制,因为所有的数据都会存储在hdfs,因此hdfs系统采用了多少个副本数,hbase同样有多少个副本,包括habse的元数据信息表,hbase:meta表,也会存储在hdfs中,因此,只有hdfs存在,hbase就不会出现数据丢失的可能
HLog:
1.用于灾难恢复—–内存中也就是memstore当中的数据存在丢失
2.预写式日志,记录所有更新操作,操作先记录进日志,数据才会写入
Wals: 预写式日志 hlog存储

在配置hbase的分布式的时候,有root.dar这个配置,作用就是将我们hbase的数据,放到hdfs中,50070可以查看,
WALS这个目录就是hlog存储数据的位置目录




Memstore与storefile:
1.一个region由多个store组成,每个store包含一个列族的所有数据
2.Store包括位于内存的memstore和位于硬盘的storefile
3.写操作先写入memstore,当memstore中的数据量达到某个阈值,Hregionserver会启动flashcache进程写入storefile,每次写入形成单独一个storefile(也就是hfile)
4.当storefile文件的数量增长到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile
5.当storefile大小超过一定阈值后,会把当前的region分割为两个,并由Hmaster分配到相应的region服务器,实现负载均衡
6.客户端检索数据时,先在memstore找,找不到再找storefile
Memstore与storefile存储在哪里?存储在store中

Data
Hbseid
Oldwals:
Memstor与storfile的 区分:
创建一个表
写一条数据:
此时数据在内存中,hdfs中没有
内存中的量,一般是64M 128M
—-=======刷新表

手动干预将内存的数据不到一定量就立马写入到hdfs’中
什么时候会将内存中的数据写入到hdfs:
1.手动执行flush刷新操作
2.出现故障之后,hlog的数据写入到内存之后,有些hbase的版本,在ms排序之后。会直接写成hfile
3.内容大小达到hdfs限定值的时候
是不是所有的hdfs文件的大小都是一样的? 答:不是
如何保证我们在读取的时候是完整的数据呢 ?
答:客户端检索数据时,先在memstore找,找不到再找storefile
存储在内存中,因为对于整个同一个store的数据,怎么才能包含完整的数据呢?包含所有的hfile再加上msmstore的数据,才能形成完整的数据
思考:
新数据和老数据,那个用的多? 新数据
=====得知结论:不管是读和写,都是先走memstore
Memstore与storefile:
当我们执行put delete incr等操作时,会先联系hregionserver,hregionserver会将数据先写入hlog中,当hlog数据写完以后,再往具体的hregion中写入。存储时就会先进入memstore中,再将我们ms的数据,持久化放到storefile中

客户端Client:
1.整个HBase集群的入口(hbase shell、jdbc、)
2.使用HBase RPC机制与HMaster和HRegionserver通信
我们连接地址时连接的zookeeper的端口,并不是hmaster
3.与HMaster通信进行管理类的操作
4.与HRegionserver通信进行读写类操作
当你有读或者是写的操作的时候,效需率高的原因之一是因为不需要和hmaster之间通信,而hdfs的读写,每次都要和namennode之间通信,获取相应的路由信息,才知道往哪个datanode上存储,而hbase中,只需找到对应的hregionserver
思考:怎么知道需要的hregionserver在哪个主机上?
5.包含访问HBase的接口,并维护cache(缓存)来加快对HBase的访问,与HRegionserver交互
底层通信地址:rpc

HBase模块 – Region :

1.将一个数据表按Key值范围横向划分为一个个的子表,实现分布式存储。
2.这个子表,在HBase中被称“ Region”。
3.每一个Region都关联一个Key值范围,即一个使用StartKey和EndKey描述的区间。事实上,每一个Region仅仅记录StartKey就可以了,因为它的EndKey就是下一个Region的StartKey。(每一个region的最后的endkey没有包含在region)
4.Region是HBase分布式存储的最基本单元。
Rowkey有什么要求?特点是什么?
1.字典排序
2.唯一

Region与RegionServer :

1.RegionServer是HBase的数据服务进程。负责处理用户数据的读写请求。
当我们要执行一个操作的时候,直接找regionserver
2.Region被交由RegionServer管理。实际上,所有用户数据的读写请求,都是和RegionServer上的Region进行交互。
Region包含了所有的数据
3.Region可以在RegionServer之间发生转移。
什么时候会发送转移:故障 转移时不需要转移hdfs的数据,只需要把关联信息转移到新的regionserver
一张表有很多的region组成,这些region可以放到不同的region上去:实现并行化,可以同时多查询 多写入

思考:
一个Region包含了一个Startkey和EndKey范围;
一条用户数据KeyValue必然属于一个唯一的Region;
Region由RegionServer来管理,那么,这个路由信
息保存在哪里呢?
Hbase_meta表中

包含:确定表信息 、确定region信息、
===因此,这个路由信息就存在hbase的这张元数据表中:habse——meta
Region如何才可以转移?由谁负责转移? (master完成操作)
答:某一个regionserver挂掉,移动到另外一台主机上
Region由一个变成2个的时候,通常移动到
另外一台主机上,做负载均衡

当我们插入或者是查询的时候,是如何定位的
get ‘表名’,’rowkey’
1.1 定位表是否存在
1.2 拿到该张表有哪些region[每一个region在哪一个regionServer上]
1.3 根据我们需要查询的rowkey,从region的数据当中去判断,我们需要得到的数据在哪一个regionServer上
1.4 将我们的需求(put、get)交给对应的regionServer去处理

Region分类 :
User Region Meta Region
记录hbase元数据的表:hbase_meta表,随着habse的数据增多,这个元数据也会一直增加,我们也需要尽量的让这个表变的均衡,因此也会产生region,但是这个region我们不能控制,由hbase内部完成
Region分为元数据Region以及用户Region两类。
Meta Region记录了每一个User Region的路由信息。
到底是什么路由信息:找的region在哪个regionserver上
读写Region数据的路由,包括如下
几步:
找寻Meta Region地址。
再由Meta Region找寻User Region地址。

关于meta表在版本之前有一定的区分

新版本当中:hbase:meta表--->meta region---->user region

老版本 : .ROOT.—>.META.—>user region
1我们找数据的时候,先找.ROOT.表 [不会进行region划分,只有一个region,不需要管理region的信息]
2会将你所找的数据在哪一个.Meta. region的路由发给你。
3在从meta的路由信息中找到具体User region。
4从userRegion信息中去找具体的RegionServer

———————–今晚结束,有很多内容比较乱,明天修改内容,晚安———–

更多推荐

详解,数据,HBASEN

本文发布于:2023-05-25 10:38:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/226415.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:详解   数据   HBASEN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!