欢迎来到魔据教育大数据学院,专注大数据工程师培养!
当前位置:首页 > 学习资料 > 讲师博文 > Hbase理论

Hbase理论

时间:2017-11-28 10:50:26作者:魔据大数据学院

还记得我们配置hbase的dir路径吗:

看hbase-site.xml
 
Hbase理论 
 
也就是说,我们目前的数据是保存到了家目录的hbasedir这个路径下
 
那么我们来看一下:
 
Hbase理论 
 
这个目录里面存储着数据行健和version数据
 
那么我们hbase的数据应该是存储到HDFS才对是吧,那么接下来我们来改一改这个配置文件:
 
[hyxy@localhost hbase-hive]$ vim hbase-1.2.5/conf/hbase-site.xml
 
<configuration>
<!-- 指定hbase数据存储在hdfs的位置-->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:9000/hbase</value>
        </property>
<!-- 指定hbase是否是分布式的 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
<!-- 指定zooleeper的端口号 -->
        <property>
                <name>hbase.zookeeper.property.clientPort</name>
                <value>2181</value>
        </property>
<!-- 指定zk的地址,多个用“,”分割 ,咱们这是单节点-->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master</value>
        </property>
<!-- zookeeper存储数据的地址,咱们启动的zookeeper是hbase自带的-->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/home/hyxy/hbase-hive/hbase-1.2.5/zookeeper</value>
        </property>
 
</configuration>
 
Hbase理论 
 
然后我们再编辑env.sh ,加入:
 
export HBASE_MANAGES_ZK=true  开启hbase集群
 
Hbase理论 
 
保存退出
 
配置一下环境变量:
 
Hbase理论 
 
然后别忘了关闭hbase进程,再启动hadoop然后再来开启hbase
 
你不能不开启hdfs就直接开启hbase否则会报错
 
Hbase理论 
 
这个时候我们jps查看一下:
 
Hbase理论 
 
你会发现多了三个进程
 
HMaster 进程Hbase的主节点,类似hadoop的namenode
HQuorumPeer 是zookpeer进程,负责协调主从节点的切换
HRegionServer 进程一般存在从节点上,就是小弟,负责存储数据,类似hadoop的datanode
 
这个时候你再list,你会发现没有一张表,因为hdfs上没有数据
 
Hbase理论 
 
看一下hdfs:
 
Hbase理论 
 
有一个hbasedir 目录,这个就是存放数据的目录
 
接下来我们创建一张user表,表中有两个列族,一个是info1 一个是info2
 
create 'user', 'info1', 'info2'
 
Hbase理论 
 
那么hbase是有web端的,那么查看hbase的web页面很简单:
 
在浏览器输入:ip:60010即可
 
Hbase理论 
 
我们往下看tables那块
 
Hbase理论 
 
很详细的说了有多少张表,和表的信息
 
 
接下来咱们说一下hbase的理论:
 
1.物理存储:
 Table 在行的方向上分割为多个HRegion,一个region由[startkey,endkey)表示(包左不包右),每个HRegion分散在不同的RegionServer中
在分布式存储过程中,存储的最小单位就是region,也就是说,hbase中表的数据是分割成多个region然后再放到hdfs中,我们想,如果将一张表放在一台机器上,那么读写的时候一直访问这一台机器,机器压力会很大,所以我们要分布式存储,读写操作多台机器,实现负载均衡,看下图:
 
 
Hbase理论 
 
此图将两张表都分成了多个region,以row key进行分割,存储在Region Servers , 也就是jps进程中的HRegion Server
Hbase理论 
 
那么到达了这个HRegion Server 后,并不是直接存储在hdfs上的,而是先存储在内存中,经过一系列的内部操作后,才会写入到hdfs中,这点要记住
 
说完了region之后我们再来说一个重点:hbase表中row key 顺序问题:
 
假设现在有一堆数字,让你排序,你试着排一下:
 
1 11 21 41
 
现在加入一个2 和 5  ,看好下面hbase是怎么排的:
 
1 11 2 21 41 5
 
那么现在再加入一个50 和 20 怎么排?
 
1 11 2 20 21 41 5 50
 
也就是说,hbase的排序是根据第一位进行排序,同一位的数据根据下一位的大小再继续拍
 
现在加入一个200怎么排?
 
1 11 2 20 200 21 41 5 50
 
这样做的好处是每一位数字都在一起,例如这张表的row key是1到100那么就是1-9 之间都是分段排序,只要知道了开头第一位数字就可以去相应的位置查询,方便快捷
 
那么到这里我们总结一下:
 
Region是分布式存储的最小单元,并且开始是存储在Hregion Server内存中,最终存储在
HDFS  存储的格式是按照row key分割范围存储的, hbase的排序是非常特殊的字典排序,每一位都有一个区间范围,方便查找
 
那么两者结合一下,看下图:
Hbase理论 
 
上图一张表分为了5个region,并且分布式存储在regionServers上,但是一个region也不见得就能保存[0,2)区间范围的值,有可能1区间的数据非常大,那么这一个region可能1区间的值都存不下,所以还要酌情考虑
 
这里扩展一下:每个region能够存储的默认大小是128MB~256MB
 
接下来看下图region的内部结构图,挺复杂的:
 
Hbase理论 
 
其中Region包含了 HLog  Store MemStore StoreFile HFile
 
HLog存储的是对写入数据的存储操作,类似于yarn中的elogs,当机器宕机时可以通过HLog进行恢复
 
Store:HRegin 虽然是负载均衡的最小单元,但并不是物理存储的最小单元,事实上,HRegion由一个或者多个Store组成,每个store保存一个column family 列族,每个store又由一个memStore和0至多个StoreFile组成
 
一个 region 由多个 store 组成,每个 store 包含一个列族的所有数据 Store 包括位于内存
 
的 memstore 和位于硬盘的 storefile
 
写操作先写入 memstore,当 memstore 中的数据量达到某个阈值, HRegionServer 启动
 
flushcache 进程写入 storefile, 每次写入形成单独一个 Hfile
 
当 storefile 大小超过一定阈值后,会把当前的 storefile 分割成两个
 
 
 
写流程
1、 client向Zookeeper发送写请求,zookeeper和Hmaster交互,反馈可以写入
2、 Client向hregionserver 发送数据写入
3、 hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
4、 hregionserver将数据写到内存(memstore)
5、 反馈client写成功。
 
数据flush过程
1、 当memstore数据达到阈值(默认是128M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。
2、 并将数据存储到hdfs中。
3、 在hlog中做标记点。
 
hbase的读流程
1、 通过zookeeper和HMETA.表定位hregionserver。
2、 数据从内存和硬盘合并后返回给client
3、 数据块会缓存
hmaster的职责
1、管理用户对Table的增、删、改、查操作;
2、记录region在哪台Hregion server上
3、在Region Split后,负责新Region的分配;
4、新机器加入时,管理HRegion Server的负载均衡,调整Region分布
5、在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
 
hregionserver的职责
HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
HRegion Server管理了很多table的分区,也就是region。
 
client职责
Client
HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
管理类操作:Client与HMaster进行RPC;
数据读写类操作:Client与HRegionServer进行RPC。
 
好好理解一下,掌握了以上理论,我觉得你的hbase就学的差不多了;
 
接下来带大家看一下hdfs上我们存储的表信息:
 
如果想要知道数据存储在哪,首先要看hbase-site.xml文件:
 
Hbase理论 
 
找一下:/hbase/data/default 路径下
 
表信息:
Hbase理论 

更多大数据相关资讯敬请关注魔据教育,为您分享最及时的大数据资讯。
学习大数据敬请关注魔据教育微信二维码。
魔据教育微信二维码

【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息发邮件至kefu@mojuedu.com,我们将及时沟通与处理。本站内容除非来源注明魔据教育,否则均为网友转载,涉及言论、版权与本站无关。

全国咨询热线:18501996998,值班手机:18501996998(7*24小时)

在线咨询:张老师QQ 320169340

企业合作服务专线:010-82340234-821, 院校合作洽谈专线:010-82340234

Copyright 2001-2019 魔据教育 - 北京华育兴业科技有限公司 版权所有,京ICP备17018991号-2

免费在线咨询立即咨询

免费索取技术资料立即索取

大数据技术交流QQ:226594285

电话咨询010-82340234