HBase 和 Phoenix 的结构

HBase 结构



可以看到 HBase 集群由 Master、Region Server、ZooKeeper、HDFS 组成

Master
  • 协调管理多个 Region Server,侦测各 Region Server 之间的状态,平衡 Region Server 之间的负载,负责分配 Region 给 Region Server,在 Region Split 后,负责新 Region 的分配,在 Region Server 停机后,负责失效 Region Server 上的 Region 迁移
  • 负责表的创建、修改、删除等
  • 维护 .META. 表和 -ROOT- 表的信息
  • 管理对 Table 的 CRUD 操作
  • 允许多个 Master 共存
Region Server
  • 管理多个 Region
  • 管理 BlockCache
  • 管理 WAL(HLog)
  • 响应客户端的读写请求
Region
  • 每张表都由 Region 组成
  • 每个 Region 管理一段按 RowKey 排序的数据,记录 StartKey/EndKey 以快速定位
  • 每个 Region 又由多个 Store 组成,每个 Store 对应表中的一个 Column Family
  • Store 包括 MemStore 和 StoreFile,一个 StoreFile 又包含一个或多个 HFile
  • MemStore 在内存, HFile 在 HDFS
  • 数据先写入 MemStore,达到阀值后 flush 到 HDFS 的 HFile,这样一张表就会存在很多个小的 HFile,需要手动或者自动做 Compact 操作进行合并,不然会影响数据读取的性能,而当合并后的文件太大时,又会进行 Region 的拆分,拆分后可以将部分 Region 分配给其他 Region Server 管理
  • 数据的改动只会在做 Compact 的时候才真正执行,之前只会做个标记 (HDFS 是不允许改文件内容的)
  • Compact 包括 Minor Compact 和 Major Compact,Minor 只合并不删数据,Major 会删数据
BlockCache

BlockCache 是读缓存,将数据预读到内存 (引用局部性:下一条指令或数据很大概率就在附近)

WAL (Write Ahead Log)

HDFS 上的文件,所有写操作都会先记到这个文件后,才会将数据写入数据表,目的是系统崩溃后可以从 WAL 恢复数据

ZooKeeper
  • 作为集群节点间的协调器,可以使用 HBase 自带的 ZooKeeper,也可以使用系统的 ZooKeeper
  • 作为 Master 的 HA 解决方案,通过 ZooKeeper 保证至少有一个 Master 处于运行状态
  • 负责 Region 和 Region Server 的注册
  • Java 程序读写 HBase 不是连接 Master,而是连接 ZooKeeper,从 ZooKeeper 中取出相应的 Region Server 信息,然后直接和 Region Server 通信
-ROOT- 表和 .META. 表
  • -ROOT- 和 .META. 也是 HBase 表
  • 用户表所有 Region 的元数据被存储在 .META. 表中
  • 随着 Region 的增多 .META. 表的数据也会增大,.META. 表的 Region 也会分裂
  • .META. 表所有 Region 的元数据保存在 -ROOT- 表中,-ROOT- 表只有一个Region
  • ZooKeeper 记录 -ROOT- 表的位置信息
  • 客户端首先访问 ZooKeeper 获得 -ROOT- 表位置,然后访问 -ROOT- 表获得 .META. 表位置,最后根据 .META. 表中的信息确定用户数据存放的 Region 位置
  • 可以看到客户端不需要和 Master 交互,而是通过 ZooKeeper 直接和 Region 交互
  • 为了加快访问速度,.META. 表的 Region 全部保存在内存中,客户端会将查询过的位置信息缓存起来,因此,当客户端第一次进行数据查询的时候,响应会比较慢
High Availability 机制

WAL 保障数据高可用

  • HBase中的 HLog 机制是 WAL 的一种实现,而 WAL 是事务机制中常见的一致性的实现方式
  • 每个 Region Server 中都会有一个 HLog 的实例,Region Server 会将更新操作 (如 Put,Delete) 先记录到 WAL (也就是 HLog) 中,然后将其写入到 Store 的 MemStore,最终 MemStore 会将数据写入到持久化的 HFile 中
  • 这样就保证了 HBase 的写的可靠性,如果没有 WAL,当 Region Server 宕掉的时候,MemStore 还没有写入到 HFile,或者 StoreFile 还没有保存,数据就会丢失

Master 容错

  • ZooKeeper 会重新选择一个新的 Master
  • 无 Master 过程中,数据读取仍照常进行,但是 Region 的切分、负载均衡等无法进行

Region Server 容错

  • 定时向 ZooKeeper 汇报心跳
  • 如果一段时间内未出现心跳,Master 将该 Region Server 上的 Region 重新分配到其他 Region Server
  • 失效服务器上 WAL 日志由主服务器进行分割并派送给新的 Region Server

ZooKeeper 容错

  • ZooKeeper 是一个可靠的服务,一般配置 3 或 5 个 ZooKeeper 实例
Phoenix
  • 支持 SQL
  • 支持二级索引
  • 支持撒盐
  • 支持 JDBC
  • 没有一个单独的 Phoenix 组件,而是把 Phoenix 嵌入到了 HBase
  • Phoenix 元数据存在 HBase 表 SYSTEM.TABLE
  • 提供 Phoenix Query Server 给不是 Java 的程序通过 HTTP 的方式查询



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 初次接触HBase的读者,建议先阅读浅析HBase:为高效的可扩展大规模分布式系统而生 HBase的构成 物理上来...
    耀凯考前突击大师阅读 5,246评论 0 12
  • 我没有爱好,没有脾气,不喜欢追星,没有太大的追求,这样的我好像一杯白开水,什么味道都没有,就好像突然有一天我消失了...
    章鱼小豆阅读 192评论 0 0
  • 有几本书忘了带了,让爸爸给我邮过来。 今天早上,他在邮局,我在图书馆,他20分钟之内给我打了五个电话。 第一次打电...
    小烨烨儿阅读 199评论 0 1
  • 序 quartz是java里头定时任务的经典开源实现,这里讲述一下如何在springboot中集成quartz。 ...
    go4it阅读 3,170评论 3 6
  • 挥笔写心情,开窗望月明。 愁思难以诉,今夜梦不成。
    蛮力阅读 691评论 9 11