最近公司正好准备投入HBase,因此做了一些基础学习准备,所以先暂时停止MySQL的更新,把HBase的学习心得跟大家分享一下,接下来一段时间都会发布HBase相关内容。

在学的过程中,发现跟MySQL相互对比,能更深入地了解存储组件的设计。有任何问题或者想看的知识点,欢迎留言跟我沟通。

1.前言

随着公司业务不断发展,开始遇见越来越多的复杂存储场景。我们在关系型数据库上已经有了比较好的技术积累,但是并不能解决所有问题。

因此,需要对更多存储类型做技术储备。

HBase作为nosql的典型代表,是一个分布式的、面向列的开源数据库,在大数据存储上广受欢迎,因此,第一站就来到这里。

网络上对于HBase的文档有很多,但是看了一圈,没有特别能让一个小白快速入门的介绍。

本文作为一个入门文档,希望能通过自己的理解,来快速认识HBase到底是什么,它的结构、特点、适用场景有哪些,但不会有深入的技术点的说明。

嗯,就是快速,非常快速并且丝滑地去理解HBase到底是啥。

2. 适用场景

一开始,我们肯定需要了解的是,为什么要用HBase。

存储组件比较多,我们就简单谈谈MySQL和HBase的主要对比。

可以看到,在面对海量数据场景时,如果没有较强的事务要求,查询比较简单,那么HBase是非常适合的。

2. 基本概念

2.1 表、行、列和单元格

为什么正文要从这里开始呢?

因为这个是一切的基础,也是我们初次接触HBase最先想到的问题,HBase的数据格式是怎样的?

但是在入门HBase的过程中,发现一个小白想搞明白HBase到底是个什么存储格式还是挺费劲的。

比如给你这样一个HBaes的数据结构,是不是比较难理解是一个怎样的层级概念?

一个好的办法就是做 知识的迁移。所以,从我们熟悉的Mysql来说,是个非常好的方式。

Mysql的表结构我们非常熟悉,所以第一个问题就是,Mysql的表记录在HBase中是如何存储呢?

我们来举个例子,有两张mysql的表,表名叫user和location,表记录如下。

user表

location表

这样的结构,在HBase中的逻辑存储应该是这样的。


抽象出来的概念如下

相信有了这样直接的对比,不用我说,大家也能明白HBase的基本存储概念了。

RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个column family,familyName:columnName,每条记录可动态添加
Value(Cell):Byte array
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义(这个概念在上文的逻辑存储中不太好迁移类比,所以上文的模型中没有给出,可以理解为mysql中的mvcc的版本号)
那么,在HBase中确定一个值的方式就比较清楚了。

通过RowKey-CF-Column-Version我们就能找到Value,这样就明白了KV的查询的结构关系。

如果用代码来简单表示,可以这样显示:

SortedMap<RowKey, List<SortedMap<Column,List<Value,TimeStamp>>>>

做个小结:

最基本的单位是列(column)。一列或者多列形成行(row),并且由唯一的行键(row
key)来确定存储。反过来,一个表(table)中由若干行,其中每列可能由多个版本(version),在每一个单元格(cell)中存储了不同的值。

2.2 分区概念

上面对存储结构做了比较直白的说明,下面介绍HBase另一个比较核心的概念:regin。

HBase中扩展和负载均衡的基本单位称为regin,regin本质上是以行键排序的连续存储的区间。

如果regin太大,系统会自动进行拆分(在中间的行键进行一拆二),反之,会把多个regin合并(非自动),以减少存储文件数量。

如果类比mysql,可以看作是分区表partition的概念。

每一个regin只能由一台regin服务器(region server)加载,每一台region server可以加载多个region。

3. 架构

这张图是HBase非常经典的整体架构图。图中展示了HBase的各种组件。

1)Client
Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息。

2)Zookeeper
Hbase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:

  • 通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
  • 通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
  • 通过Zoopkeeper存储元数据的统一入口地址

3)HMaster

  • master节点为RegionServer分配Region
  • 维护整个集群的负载均衡
  • 维护集群的元数据信息
  • 发现失效的Region,并将失效的Region分配到正常的RegionServer上
    当RegionSever失效的时候,协调对应Hlog的拆分

4)HReginServer
HregionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:

  • 管理master为其分配的Region 处理来自客户端的读写请求
  • 负责和底层HDFS的交互,存储数据到HDFS
  • 负责Region变大以后的拆分
  • 负责Storefile的合并工作

5)HDFS
HDFS为Hbase提供最终的底层数据存储服务,同时为Hbase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:

  • 提供元数据和表数据的底层分布式存储服务
  • 数据多副本,保证的高可靠和高可用性

看到这里了,原创不易,点个赞吧,你最好看了~

知识碎片重新梳理,构建Java知识图谱:https://github.com/saigu/JavaKnowledgeGraph (历史文章查阅非常方便)

扫码关注我的公众号“阿丸笔记”,第一时间获取最新更新。同时可以免费获取海量Java技术栈电子书、各个大厂面试题。

【从零单排HBase 01】从一无所知到5分钟快速了解HBase相关推荐

  1. 「从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)

    1.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Servi ...

  2. 从零单排之玩转Python安全编程(II)

    转自:http://www.secpulse.com/archives/35893.html 都说Python大法好,作为一名合格的安全从业人员,不会几门脚本语言都不好意思说自己是从事安全行业的. 而 ...

  3. (4)风色从零单排《C++ Primer》 变量,引用,指针

    从零单排<C++ Primer> --(4)变量,引用,指针   变量的初始化 所谓变量的初始化,指在创建变量的同时给予值. 初始化方法: int units_sold = 0; int ...

  4. C#从零单排上王者系列---元组

    从零单排系列说明 博主最初的想法是想写个蜕茧成蝶的系列文章,后来觉得博客的表现形式很难做到连贯和系统.所以从本篇博客开始博主会选择书中比较重要和不好理解的知识点并结合自己的实际工作经验来讲解,不再是照 ...

  5. android 从零单排 第一期 按键显示helloworld

    啦啦啦- 我是qscqesze 今天开始android的从零单排啦啦啦- 首先从最简单的开始 要求: 程序运行后,单击屏幕上的按键后可以显示一句话,如"Hello World!" ...

  6. 从零单排学Redis【铂金二】

    前言 好的,今天我们要上[铂金二]了,如果还没有上铂金的,赶紧先去蹭蹭经验再回来(不然不带你上分了): 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redis[黄金] 从零单 ...

  7. 从零单排学Redis【铂金一】

    前言 好的,今天我们要上铂金段位了,如果还没经历过青铜和白银和黄金阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 从零单排学Redis[黄金] 这篇文章主 ...

  8. 从零单排学Redis【黄金】

    前言 好的,今天我们要上黄金段位了,如果还没经历过青铜和白银阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 看过相关Redis基础的同学可以知道Redis ...

  9. 从零单排学Redis【白银】

    前言 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服务器的数据库 Re ...

最新文章

  1. win7系统中给GVim 配置ctags和taglist插件
  2. windows下进程间通信的(13种方法)
  3. linux搭建宝塔重启mysql_宝塔面板安装 重启等命令linux系统重启
  4. python2019慕课答案_中国大学慕课mooc2020Python编程基础章节测试答案
  5. hdu 2136 筛法求素数
  6. linux mysql 指令无效_linux下安装mysql,mysql命令失效的原因
  7. 折线图笔记 -python
  8. ubuntu 14.04安装zabbix3.0以及汉化
  9. Atitit 常见概念与技术 dom及其解析 目录 1.1. Dom概念(文档对象模型(Document Object Model))是什么 1 1.1.1. 节点 2 1.1.2. Node 层次
  10. java2wsdl_Java2WSDL之java实现
  11. 更改google桌面搜索的索引文件位置
  12. ug如何导入excel数据点_ug怎么导入 点数据库
  13. 怎么更改计算机用户开机密码,如何更改Windows开机密码?修改电脑开机密码教程...
  14. 微软ime日文输入法怎么设置切换过来就是输入假名的状态
  15. 怀旧服服务器怎么调整显卡性能,魔兽世界怀旧服排队显卡问题太高怎么回事 显卡温度高解决办法...
  16. 看不懂简明python教程_简明python教程的读书笔记(一)
  17. win10小娜_win10小娜不好用,想禁用或彻底删除Cortana,就用这2招
  18. 华三防火墙Reth链路冗余技术
  19. UEFI下的Gmac驱动实现
  20. bcb 操作 Excel

热门文章

  1. http请求的状态码。100-505
  2. CANoe中使用CAPL实现自动测试
  3. Python课程设计:图书馆管理系统
  4. 华为交换机以及基本配置
  5. Python Flask 路由配置
  6. 【R言R语】202x年,校招算法岗将走向何方
  7. HDMI接口电路设计
  8. ResultSet,PreparedStatement
  9. android bluetooth 阻塞,Android BluetoothSocket.isConnected始终返回false
  10. 客户管理系统 案例分享