zoukankan      html  css  js  c++  java
  • 【HBase】底层原理


    系统架构

    在文章【HBase】基本介绍和基础架构中已经有简单介绍
    在这里插入图片描述
    Client —— 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如region的位置信息。
    Zookeeper:
    1.保证任何时候,集群中只有一个master
    2.存贮所有Region的寻址入口----root表在哪台服务器上。
    3.实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
    4.存储Hbase的schema,包括有哪些table,每个table有哪些column family
    Master:
    1.为Region server分配region
    2.负责region server的负载均衡
    3.发现失效的region server并重新分配其上的region
    4.HDFS上的垃圾文件回收
    5.处理schema更新请求
    Region Server:
    1.Region server维护Master分配给它的region,处理对这些region的IO请求
    2.Region server负责切分在运行过程中变得过大的region

    client访问HBase数据的过程中并不需要HMaster的参与,是直接通过ZooKeeper读取HRegionServer中Meta表存放的HRegion位置


    表数据模型

    基本介绍在【HBase】表模型和基本操作介绍

    注意:
    1.列族的访问控制、磁盘和内存的使用统计都是在列族层面进行,一般一张表不要设置太多列族,因为列族越多,读取一行数据时所要参与IO、搜寻的文件就越多
    2.每条数据默认3个版本号


    物理存储

    在这里插入图片描述
    1.Table中所有行都按照rowKey的字典顺序排列,并且在行的方向上分割为多个HRegion
    2.HRegion是HBase中分布式存储和负载均衡的最小单元,不同的HRegion可以分布在不同的HRegionServer上,但同一个HRegion不会拆分到不同的HRegionServer
    3.HRegion由多个Store组成,每个Store保存一个列族(Column Family)
    4.HFile是一种文件存储格式,类似于ORC、Parquet

    meta表的数据信息

    ROW                              COLUMN+CELL
                                                                                    
     hbase:namespace,,1557280798528. column=info:regioninfo, timestamp=1557280800325, value={ENCODED => 56c88e849283c869e74095d5
     56c88e849283c869e74095d5bf616b4 bf616b49, NAME => 'hbase:namespace,,1557280798528.56c88e849283c869e74095d5bf616b49.', START
     9.                              KEY => '', ENDKEY => ''}                                                                   
     hbase:namespace,,1557280798528. column=info:seqnumDuringOpen, timestamp=1557280800325, value=x00x00x00x00x00x00x00x
     56c88e849283c869e74095d5bf616b4 02                                                                                         
     9.                                                                                                                         
     hbase:namespace,,1557280798528. column=info:server, timestamp=1557280800325, value=node02.hadoop.com:60020                 
     56c88e849283c869e74095d5bf616b4                                                                                            
     9.                                                                                                                         
     hbase:namespace,,1557280798528. column=info:serverstartcode, timestamp=1557280800325, value=1557280788349                  
     56c88e849283c869e74095d5bf616b4                                                                                            
     9.                                                                                                                         
     myuser,,1557285598626.9a6ee8080 column=info:regioninfo, timestamp=1557285599647, value={ENCODED => 9a6ee8080ee16457bb791a10
     ee16457bb791a10cca6c498.        cca6c498, NAME => 'myuser,,1557285598626.9a6ee8080ee16457bb791a10cca6c498.', STARTKEY => ''
                                     , ENDKEY => ''}                                                                            
     myuser,,1557285598626.9a6ee8080 column=info:seqnumDuringOpen, timestamp=1557285599647, value=x00x00x00x00x00x00x00x
     ee16457bb791a10cca6c498.        02                                                                                         
     myuser,,1557285598626.9a6ee8080 column=info:server, timestamp=1557285599647, value=node02.hadoop.com:60020                 
     ee16457bb791a10cca6c498.                                                                                                   
     myuser,,1557285598626.9a6ee8080 column=info:serverstartcode, timestamp=1557285599647, value=1557280788349                  
     ee16457bb791a10cca6c498.                                                                                                   
     user,,1557283951792.5b54e4569a9 column=info:regioninfo, timestamp=1557284223555, value={ENCODED => 5b54e4569a9e7f541340077f
     e7f541340077ff35c168f.          f35c168f, NAME => 'user,,1557283951792.5b54e4569a9e7f541340077ff35c168f.', STARTKEY => '', 
                                     ENDKEY => ''}                                                                              
     user,,1557283951792.5b54e4569a9 column=info:seqnumDuringOpen, timestamp=1557284223555, value=x00x00x00x00x00x00x00x
     e7f541340077ff35c168f.          05                                                                                         
     user,,1557283951792.5b54e4569a9 column=info:server, timestamp=1557284223555, value=node01.hadoop.com:60020                 
     e7f541340077ff35c168f.                                                                                                     
     user,,1557283951792.5b54e4569a9 column=info:serverstartcode, timestamp=1557284223555, value=1557280783177                  
     e7f541340077ff35c168f.                                                                                                     
    3 row(s) in 0.0500 seconds
    
  • 相关阅读:
    TypeScript完全解读(26课时)_7.ES6精讲
    Flutter实战视频-移动电商-66.会员中心_编写ListTile通用方法
    Residual Networks <2015 ICCV, ImageNet 图像分类Top1>
    Coursera《machine learning》--(14)数据降维
    C# webbrowser遍历网页元素
    查询某表空间被哪些用户所使用
    C 语言运算符优先级(记忆口诀)
    建立简单的哈希表
    【LeetCode-面试算法经典-Java实现】【168-Excel Sheet Column Title(Excell列标题)】
    计算随意无序字符串中的最大有序串
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772430.html
Copyright © 2011-2022 走看看