大数据组件知识点总结(2) - HBase

  • 主从架构的非关系型数据库;
  • 面向列簇存储,每个列簇内部数据以key-value格式存放;
  • 支持水平扩展、容错性良好;
  • 随机读写性能好、数据扫描慢,不适合用作OLAP。

数据模型

每个Namespace包含一组Table,默认有两个Namespace,hbase(如Meta表)、default;

  • rowkey:类似主键(但没有数据类型,字符数组保存),唯一标识一行、按序排列。
  • column family:定义表时需要指定好,可包含统一存放的无数个动态列(于一个文件);
  • column qualifier:可动态指定的列;
  • cell:通过rowkey-column family-column qualifier定位一个cell,内有多个timestamp版本、以数组存放的值;
  • timestamp:cell内的值的版本号,访问cell时默认只取timestamp最新的值,超过最大版本数时最旧的版本会被剔除。

可看作一个多维映射表:

{
    "rowkey_1": {
        "column_family_1": {
            "column_1": {
                "timestamp_1": "value_1",
                "timestamp_1": "value_2",
                ...
            }
        }
    }
}

而在实际存储中,不同版本的数据会重复保存rowkey(为节省空间,应尽可能短):

    key     CF      qualifier       timestamp       value
    -----------------------------------------------------
    tom    data       city       20180101000000      GZ
    tom    data      country     20180101000000      GD
    tom    data       city       20180102000000      SZ

基本架构

  • 主从架构,Master与Slave通过ZooKeeper解耦而非直接相连(Master宕机也不至于停止服务);
  • HMaster:ZooKeeper选举产生,可多个,无状态(状态信息保存在ZK):
    • 协调Region Server:分配Region给Region Server并调整负载、发现失效Region Server并重新分配;
    • 元信息管理:管理Region Server的元数据,提供Table的增删改查操作;
    • 不参与数据I/O过程。
  • Region Server:负责单个Region的存储管理(如按rowkey切分Region),处理Client读写请求;
  • ZooKeeper:HMaster与Region Server之间的协调者,存放HBase关键元信息和状态信息:
    • 主HMaster选举(并确保只有一个);
    • 存储Region寻址入口(Meta表所在Region Server);
    • 实时监控Region Server状态并通知HMaster;
    • 存储HBase的Schema和Table元数据;
  • Client:提供HBase访问接口,与Region Server交互,维护Cache(加快访问速度)。

内部原理

Region定位

HBase的put、get、delete、scan操作基础是Region定位:

  • Client访问ZooKeeper,查找Meta表所在的Region Server(rowkey区间与Region存放位置的映射关系);
  • Client访问Meta表所在Region Server,获取rowkey所在的Region Server;
  • Client访问rowkey所在Region Server,执行rowkey相关操作;
  • 首次定位后会缓存Meta表位置,直到Region发生移动。

Region Server

  • BlockCache:读缓存(LRU策略);
  • MemStore:写缓存(每个Region的每个Column Family都有一个);
  • HFile:(支持多级索引)存放实际数据于HDFS;
  • WAL:暂存未持久化到HDFS的数据用于错误恢复(先写入内存、再写入HLog)。

模块协作

HBase启动

  • HMaster启动,注册到ZooKeeper,等待Region Server汇报;
  • Region Server注册到ZooKeeper,并向HMaster汇报;
  • HMaster对各个Region Server(包括失效的)数据进行整理,分配Region和Meta信息。

Region Server失效

  • HMaster将失效的Region Server上的Region分配给其他节点;
  • HMaster更新Meta表以保证数据正常访问。

HMaster失效

  • (已配置HA)处于Standby状态的其他HMaster节点选出一个、转为Active状态;
  • (未配置HA)数据能正常读写,但不能创建、删除、更改表(Meta表不能更新)。

读写操作

  • Region Server接收写请求,将数据追加到HDFS上的日志文件(WAL);
  • Region Server将数据写入内存MemStore中,更新到HLog,并通知客户端写入成功;
  • MemStore内存达到一定阈值就将数据顺序写入HDFS保存成HFile(多级索引支持);
  • HFile达到一定阈值,会触发Split机制,Region重新分配;
  • HFile小文件太多,会触发Compact机制进行合并(每个Store仅包含一个文件时查询效率才是最高)。

需要依次从读缓存BlockCache(最近读取)、写缓存MemStore(最近写入,每个column family都有一个MemStore)、磁盘HFile文件(已持久化)中查找数据,合并返回用户。

Compact

  • Minor Compaction:选取一些小的、相邻的StoreFile合并成更大的;
  • Major Compaction:将所有StoreFile合并成一个StoreFile,清理无意义数据(被删除、TTL过期、版本号超出范围)。

执行Compact检查:

  • 当MemStore被Flush到磁盘;
  • 用户执行Shell命令或调用API:compact、major_compact;
  • HBase后台线程周期性触发检查。

设计原则

HBase最好看作一个巨大的哈希表,基于键取值,更适用于迭代访问(范围扫描)。

Rowkey

  • 基于行键查询,因此使用宽表(包括尽可能多的信息)更有优势;
  • 数据按行键排序按范围存储在不同的Region(一个Region Server),可利用时间戳将put、get请求集中在单一Region上(反模式设计),为了使负载分布均匀,进行Salt处理;
  • 数据块缓存(最近最少使用LRU),对行键第一部分进行salt处理(对原来的键获其中一部分做Hash取模),同一个数据块中同时获取的数据之间按行键有序排列,数据块缓存中记录相关、命中率更高;
  • 行键越短存储消耗越小、读写性能越高,但行键较长时get、scan性能更好;同时也需要顾及可读性(便于发现问题);
  • 行键选择不合理可能导致一次查找需要访问多个Region Server,过滤不相关的记录。

Region

  • Region数量越多、平均每个Region的memstore空间越少,磁盘冲刷越小,导致更小、更多的HFile和更多较小的合并而性能降低,memstore分区(每个100M);
  • Region越大,合并花费时间越多(最大为20G~120G);
  • 建议建表时指定Region数量,将Region大小设置为足够大的值,避免自动分片范围不理想影响性能(但数据集只更新最新记录时建议自动分片)。

Column、Column Family

  • 列的数量决定了:数据块缓存记录数、进入WAL的数据量、memstore一次冲刷写入记录数、合并所需时间;
  • 一个表包括一或多个列簇,列簇有自己的HFile集合,同一个表不同列簇合并其他列簇不受影响;
  • 一般不使用多个列簇,除非:一张表中的一部分列操作完成不会改变,或者变化频率与其他列存在显著不同(降低合并成本、更好利用数据块缓存)。

过滤器

为筛选数据提供的过滤器,可以在HBase中的数据的多个维度(行、列、版本)上对数据进行筛选。

  • 基于行:PrefixFilter、PageFilter;
  • 基于列:ColumnPrefixFilter、FirstKeyOnlyFilter;
  • 基于单元值:KeyOnlyFilter、TimestampsFilter;
  • 基于列和单元值:SingleColumnValueFilter、SingleColumnValueExcludeFilter。
  • 比较过滤器:RowFilter、FamilyFilter、QualifierFilter、ValueFilter。

常用的:

  • RowFilter
  • PrefixFilter
  • KeyOnlyFilter
  • ColumnPrefixFilter
  • ValueFilter
  • TimestampsFilter
  • FilterList

(支持自定义过滤器,但不建议使用)

协处理器

  • HBase协处理器受BigTable协处理器的启发,为用户提供类库和运行时环境,使得代码可以在HBase Region Server和Master上处理;
  • 分为系统协处理器(全局加载到Region Server托管的所有表和Region上,针对整个集群)和表协处理器(用户可以指定一张表使用协处理器,针对表);
  • 两种插件:Observer(类似触发器,实现安全性检查、完整性约束、二级索引)和Endpoint(类似存储过程)。

Observer

  • RegionObserver:提供客户端的数据操纵事件钩子:Get、Put、Delete、Scan等;
  • MasterObserver:提供DDL类型的操作钩子,如创建、删除、修改数据表等;
  • WALObserver:提供WAL相关操作钩子。

Endpoint

  • 动态RPC插件的接口,它的实现代码被安装在服务器端,从而能够通过HBase RPC唤醒;
  • 调用接口,实现代码会被目标的Region Server远程执行;

如对于较大的表(上百个Region)计算某列平均值、求和等操作,使用Endpoint可减少耗时。

加载协处理器

  • 配置文件加载:修改配置文件hbase-site.xml加载,系统级别;
  • Shell加载:alter命令对表进行Schema修改来加载协处理器;
  • 通过API代码加载。

卸载/更新协处理器

必须重启Region Server,即重启JVM;否则重复加载的协处理器实例不会起作用。

容灾

  • CopyTable:支持时间区间、Row区间,改变表名称,改变列簇名称,制定是否copy已经被删除的数据等功能;工具采用Scan查询,写入新表时采用put和delete的API(全部是基于Client API进行读写);
  • Export/Import:Export将数据到处到目标集群(HDFS)、再用Import导入数据(可指定开始时间与结束时间、作增量备份);
  • Snapshot:作用在表上,修改配置文件hbase-site.xml实现,可通过快照迅速修复数据,但会丢失快照之后的数据;
  • Replication:通过Replication机制实现HBase主从模式。

监控

  • 保证系统的稳定性、可靠性、可运维性;

  • 了解集群性能表现,及时做出针对性调整;

  • 出现问题时及时报警,快速定位解决问题。

  • 利用Hadoop生态圈开源的专业监控工具(Ambari、Cloudera Manager);

  • 调用Hadoop和HBase的JMX接口获取检测数据。

Phoenix

  • 构建在Apache HBase上的SQL中间层,具备完善的查询支持,且查询效率高;
  • 具备完整的ACID事务功能的SQL和JDBC API的强大功能(多租户,二级索引,用户自定义函数,行时间戳列,分页查询,视图);
  • 可以与Spark、Hive、Pig、Flume、MR集成;
  • 通过HBase协处理器,在服务端进行操作,最大限度减少客户端与服务的的数据传输;
  • 通过定制的过滤器对数据进行处理;
  • 通过本地HBase API(而非Hive的MR),最大限度降低启动成本。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • 本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理...
    达微阅读 2,735评论 1 13
  • 一、简介 Hbase:全名Hadoop DataBase,是一种开源的,可伸缩的,严格一致性(并非最终一致性)的分...
    菜鸟小玄阅读 2,388评论 0 12
  • Hbase是什么? 其源于 Google 三大论文之一的 bigtable ,是一个具有高可靠性、高性能、面向列、...
    code_solve阅读 753评论 0 5
  • HBase Architectural Components(HBase架构组件) HBase架构也是主从架构,由...
    陌上疏影凉阅读 2,397评论 0 7
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 3,944评论 3 17