请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[BigData] 好程序员大数据答疑 你不知道的Hbase

[复制链接]
沫沫老师 发表于 2018-12-6 11:25:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本帖最后由 wowo 于 2018-12-11 13:30 编辑

    为什么有hbase?     随着数据的逐渐增大,传统的关系型数据库无法满足对数据的查询和存储,而hive不是数据库,只是数据仓库,虽然能够满足简单的存储要求,但是始终无法满足对非结构化和半结构化的数据的存储和查询。
    Hbase是阿帕奇旗下的一款开源的,多版本的,可扩展的非关系型数据库。它是基于谷歌的bigtable的基础上,建立在hdfs上的一款提供高 可靠性的,高性能的列式存储,可伸缩,实时读写的nosql的数据库系统。
    Habse的适用场景?
    海量数据存储。随机实时读写和管理数据。
    Habse有何特点?
    列式存储
    模式:无模式
    数据类型:单一的byte[]
    多版本(version):每个值都可以有多个版本
    稀疏存储:如果kv为null,则不占用存储空间    Habse结构框架
    1.Client
    hbase的客户端,包含访问的hbase的接口(linux shell ,java api),维护一些cache(缓存)来加速hbase的速度,比如region的位置信息。
    2.Zookeeper
Habse.png

    监控hmaster的状态,保证有且只有一个active的hmaster,达到高可用,存储所有的region的寻址入口,实时监控hregionserver的状态,将regionserrver的上下线信息实时通知给hmaster,存储hbase的所有表的信息(hbase的元数据)。
    3.Hmster
    为regionserver分配region(新建表),负责regionserver的负载均衡,负责region的重新分配(处理hregionserver异常,hregion裂变),Hdfs上的垃圾文件回收,处理schema的更新请求。
    Hregionserver
    维护Hmster给他的region(管理本机上的region)处理client对region的IO请求,并和hdfs交互,Regionserver负责切分在运行过程中变大的region。
    Hregion
    Hbase中分布式的存储和负载的最小单元,表或者是表的一部分,(在HBase中数据按主键排序,同时表按主键划分为多个Region,Region按大小分割的,随着数据增多,Region不断增大,当增大到一个阀值的Region就会分成两个新的Region)。
    Region虽然是分布式存储的最小单元,但并不是存储的最小单元。每个Region包含着多个Store对象。每个Store包含一个MemStore或若干StoreFile,StoreFile包含一个或多个HFile。MemStore存放在内存中,StoreFile存储在HDFS上。
Habse2.png

    Hlog
    对hbase的操作进行记录,使用wal(Write-Ahead-Log)写数据,优先写入log,然后再写入memstore,以防数据丢失时可以进行日志回滚回复数据。
    Store
    相当于一个列簇。
    Memstore
    128M,内存缓冲区,用于将数据批量刷新到hdfs上。
    Hstorefile
    Hbase中的数据是以hfile的形式存储到hdfs上。
    写流程:
    1.client通过zookeeper的调度,向regionserver发出写数据请求,在region中写数据。
    2.数据被写入region的memstore,直达memstore达到预设的阈值(128M)。
    3.memstore中的数据被flush成一个storefile。
    4.随着storefile文件的不断增多,当其数量增长到一定阈值的时候,触发了compact合并操作,将多个storefile合并成一个storefile,同时进行版本合并和数据删除。
    5.storefiles通过不断的compact合并操作,逐渐形成越来越大的storefile6单个storefile大小超过一定阈值之后,触发spilt操作,把当前的region切分成2个新的region,父region会下线,新切出的2个字region会被hmaster分配到相应的regionserver上,使得原先的一个region的压力的以分配到2个region上。
    读流程:
    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
Habse3.png

    Rowkey:行键,和mysql的主键一样,不允许重复,按照字典顺序排列
    Columnfamily:列簇
    Column:列
    Timestamp:时间戳,默认显示最新的时间戳
    Version:版本号,记录数据的版本
    Cell:单元格,一个key 一个value




精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启