• HBase 表操作


    Hbase 表操作

    Master:负责启动的时候分配Region到具体的RegionServer,执行各种管理操作。

    RegionServer:有一个或多个Region。

    Region:表的一部分数据。HBase是一个会自动分片的数据库


    一个WAL:预写日志,是一个环状滚动日志,当操作到达Region时,Hbase先将操作写到WAL中。HBase先把数据放到基于内存实现的Memstore中,等数据到达一定数量时才刷到HFile中。如果期间服务器宕机或者断电,数据丢失,WAL就是一个保险机制。当故障恢复时候,就可以从WAL中恢复数据。

    # 开启异步写入WAL
    Mutation.setDurability(Durability.ASYNC_WAL);
    

    Region在满足hbase.regionserver.optionallogflushinterval条件才会写入,默认时间间隔是1s。

    检查间隔由hbase.regionserver.logroll.period定义,默认为1小时。

    WAL文件的最大数量通过hbase.regionserver.maxlogs定义,默认为32。

    • 当WAL文件所在的块快要满了
    • WAL所占的空间大于或等于某个阈值
    hbase.regionserver.hlog.blocksize * hbase.regionserver.logroll.multiplier
    

    WAL被创建出来之后会放在/hbase/.log下,归档之后放在/hbase/.oldlogs下。

    Master会定时清理.oldlogs

    • TTL进程:保证WAL文件一直存活,达到hbase.master.logcleaner.ttl定义的超时时间为止(默认十分钟)
    • 备份机制(replaction):如果开启了HBase的备份机制,那么HBase要保证备份集群已经完全不需要这个WAL文件了,才会删除。

    Store内部结构

    • MemStore:每个Store中有一个MemStore实例。数据写入WAL之后就会被放入MemStore。MemStore是内存的存储对象,只有当MemStore满了才会将数据写入到HFile中。
    • HFile:在Store中有多个HFile。当MemStore满了之后HBase就会生成一个新的HFile,然后把MemStore中的内容写入到这个HFile中,HFile直接跟HDFS打交道,是数据的存储实体。

    HDFS上的数据只能创建,追加和删除,对于一个数据库来说,按顺序存放数据是非常重要的,是性能的保障,所以不能按照数据到来的顺序写入硬盘。

    使用内存先把数据整理成顺序存放,然后再一起写入硬盘。

    MemStore

    HBase使用了LSM树结构存储数据。数据现在MemStore中整理成LSM树,在刷写到HFile中。读取的时候有个专门的缓存叫BlockCache,如果开启BlockCache,先读取BlockCache,读取不到才读HFile+MemStore。如果数据添加后又删除了,则刷写的时候就直接不把这个数据写入到HDFS中。

    HFile

    在HBase中一个块默认大小为64KB,在列族上的BLOCKSIZE属性定义。

    • Data:数据块,每个HFile存在多个Data块,
    • Meta:元数据块,可选的,只有在文件关闭时才会写入,存储了HFile文件的元数据信息。
    • FileInfo:文件信息,必要存储信息,只有在文件关闭的时候写入,存储的是该文件的信息。
    • DataIndex:存储Data块索引信息的块文件。也就是Data块的偏移值,
    • MetaIndex:Meta块索引信息的块文件。
    • Trailer:必须,存储了FileInfo,DataIndex,MetaIndex块的偏移值。

    Data块

    第一位存储的是块的类型,后面存储的是多个KeyValue键值对,也就是单元格(Cell)的实现类,Cell是一个接口,KeyValue是它的实现类。

    BlockType(块类型):Data、Meta、FILE_INFO、ROOT_INDEX...

    一个KeyValue类里面最后一个部分是存储数据的Value,而前面的部分是存储该跟单元格相关的元数据信息。如果你存储的value很小,那么该单元格绝大部分空间都是rowkey、column family、column等元数据。

    Region的定位

    1. 客户端通过ZK的/hbase/meta-region-server节点查询到哪台RegionServer上有hbase:meta表。
    2. 客户啊短连接含有hbase:meta表的RegionServer,hbase:meta表存储了所有Region的行键范围信息,通过这个表就可以查询出需要存取的rowkey属于哪个Region的范围里面,以及这个Region又属于RegionServer。
    3. 客户端直连一台拥有要存取rowkey的RegionServer,并对其直接操作。
    4. 客户端把hbase:meta的信息直接缓存起来。

    一个Region包含多个Store:一个Store对应一个列族的数据,如果一个表有两个列族,那么在一个Region中就有两个Store,每个Store内部有MemStore和HFile两部分。

  • 相关阅读:
    JAVA课程设计+五子棋游戏
    201521123059 《Java程序设计》第十四周学习总结
    201521123059 《Java程序设计》第十三周学习总结
    软工个人总结
    alpha阶段个人总结
    centos 下构建lamp环境
    软工15作业3——案例分析
    结对编程
    201521123058 软工阅读第二次作业
    软工阅读作业1(201521123058 李绍乐)
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/13408784.html
Copyright © 2020-2023  润新知