HBase是谷歌BigTble的开源实现。谷歌的三篇论文拉开了大数据江湖的序幕,铸就了现在以Hadoop为主的大数据技术生态圈。而HBase是开源的大数据数据库,和传统的行式数据库不同的是,HBase是列式数据库。列式数据的特点是开源横向扩展,将一张表的数据存储在hadoop集群的不同datanode中,一张表的存储量可以达到T级别。这是行式关系型数据库无法实现的。本文主要讲解HBase的基本概念,只有概念清楚了才能更好的在我们的系统中使用HBase。

核心组件介绍

Table:可理解为传统数据库中的一个表,但因为SchemaLess的设计,它较之传统数据库的表而言,在设计上更加灵活。

Region:将表横向切割为一个个子表,子表在HBase中被称之为Region。

RegionServer:数据服务进程,Region必须部署在某一个RegionServer上才可以提供读写服务。

HFile:HBase数据库在底层分布式文件系统中的文件组织形式。

Column Family:一些列的集合。不同的Column Family数据被存储在不同的路径中。

MemStore:用来在内存中缓存一定大小的数据,达到设定的阈值后批量写入到底层文件系统中。数据是有序的。

下图清晰的展示了Table,Region,RegionServer,HFile,MemStore,Column Family在HBase的逻辑关系。

下图显示了HBase集群中的关键进程

Zookeeper:HBase集群的调度器,可以用于将HBase RegionServer信息注册到zookeeper中,查询HBase RegionServer状态信息,HMaster启动时会将HBase系统表-ROOT-加载到zookeeper集群中,通过zookeeper集群可以获取当前系统表.META.的存储所对应的RegionServer信息

Master,通过jps命令显示的进程名称是HMaster,在负责表管理操作,Region到各个RegionServer的分配以及RegionServer Failover的处理等。

RegionServer进程提供数据读写服务。

NameNode,Hadoop进程,处理来自Master的请求,H管理DFS文件系统的命名空间NameSpace。

DataNode,Hadoop数据节点进程,HBase的所有数据都存在Hadoop的DataNode中。

KeyValue数据存储结构

HBase所存储的数据是以KeyValue形式存放的,KeyValue有特定的数据结构,如下图所示,一个KeyValue可以理解成HBase表中的一个列,当一行存在多个列时,将包含多个KeyValue,同一行的KeyValue有可能存储在不同的文件中,但在读取时,会按需合并在一起返回给客户端。

用户写数据时,需要定义用户数据的RowKey,指定每一列所存放的Column Family,并且为其定义相应的Qualifier(列名),Value部分存放用户数据。Hbase中每一行可拥有不同的KeyValues,这就是HBase Schema-less的特点。

HBase中支持数据的多版本,通过带有不同时间戳的多个KeyValue版本来实现的,如下图所示。

HBase所保存的版本数据是可配置的,默认存放3个版本。在普通的读取流程中,旧版本的数据时不可见的,但通过制定版本数或者版本号的读取,可以获取旧版本数据。下图是普通读取刘恒与多版本读取流程的对比。

灵活的列定义

用户数据存入到HBase表中时,需要进行Qualifier(KeyValue/列)设计。一个最简单的设计是保持HBase的列与用户数据的列一致,如下图1的设计。这种设计,基本上与关系型数据库的设计是一致的,但这种设计会带来较大的数据冗余(KeyValue结构开销)。但HBase基于KeyValue的接口,决定了这种设计可以是非常灵活的,例如,我们也可以考虑为HBase的每一行只设置两个列,其中,Name为一个列,其他内容合并到一个列中,如下图2所示。

尽管我们在使用HBase表存放数据的时候,需要预先做好列的设计。但这个设计仅仅由应用层感知,HBase并没有存放任何的Schema信息来描述这个设计。也就是说,应用层需要知道为每一个表/每一行设计了什么样的列(KeyValue),然后在地区的时候做相应的解析。既然HBase中并没有Schema信息,name,每一行中的列,也可以是任意添加的。如下图所示,绿色背景的KeyValue为后续增加的。

Column Family

假设为表设置了两个列族,而且,定义了每一个列簇中要存放的列,如下图所示:
{Name} -> Column Family - A, {City,Phone,Gender} -> Column Familly-B。不同列簇的数据会被存储在不同的路径中。即,设置多个列簇时一行数据可能存在于两个路径中。整行读取的时候,需要将两个路径中的数据合并在一起蔡可以获取完整的一行记录。但如果仅仅读取Name一列的话,只需要读取Column Family-A即可。

一起学HBase——简单介绍HBase各种组件的更多相关文章

  1. Phoenix(sql on hbase)简单介绍

    Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...

  2. Hbase:简单介绍一下Hbase表的结构

    HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面我就和大家分享一下数据是如何存放在HBase表中的 为了更好的理解HBase表的思路,先回顾一下关系数据库中表的 ...

  3. springmvc的简单介绍以及springmvc组件的介绍

    Spring web mvc框架 什么是springmvc Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合 Springmvc是一个基于mvc的we ...

  4. Hadoop集群中Hbase的介绍、安装、使用

    导读 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. 一.Hbase ...

  5. HBase技术介绍

    HBase简介 HBase - Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HB ...

  6. 【转】HBase技术介绍 转载自 http://www.searchtb.com/2011/01/understanding-hbase.html

    HBase简介 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HB ...

  7. Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍

    一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...

  8. client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法

    [本文源址:http://blog.csdn.net/q1056843325/article/details/54729657 转载请加入该地址] 明天就是除夕了 预祝大家新春快乐 [ ]~( ̄▽ ̄) ...

  9. 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹

    <PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...

随机推荐

  1. docker的安装,升级,与删除(最新版)

    docker安装在ubuntu上 以前叫做 Docker engine安装现在叫做docker-ce的 第一种安装办法: root下执行,sudo su - root apt-get update - ...

  2. 初步了解jQuery

    jQuery 库可以通过一行简单的标记被添加到网页中. jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多"的JavaScript库. jQ ...

  3. golang与python多线程的并发速度

    一.golang的代码 package main import ( "fmt" "time" ) func Text_goroute(a int, b int) ...

  4. CNN:Channel与Core的高H、宽W的权值理解

    转自: 知乎问题[能否对卷积神经网络工作原理做一个直观的解释?https://www.zhihu.com/question/39022858]中YJango 的回答; 因总是忘记回答地址,方便以后查阅 ...

  5. PHP之道 - php各方面的知识汇总

    看到一个PHP的知识各方面的汇总,写的很有借鉴意义,搬过来了 转自: https://laravel-china.github.io/php-the-right-way/ 欢迎阅读 其他语言版本 参与 ...

  6. 浏览器开发者工具----F12 功能介绍

    笔者技巧: 看了些其它回答,有些是用来扒图片的,有些是写爬虫的(这个不要看Elements,因为浏览器会对一些不符合规范的标签做补全或者其它处理,最好是Ctrl+U). 图片的话就不要看Network ...

  7. usb驱动程序小结(六)

    title: usb驱动程序小结 tags: linux date: 2018/12/20/ 17:59:51 toc: true --- usb驱动程序小结 linux中为usb驱动也提供了一套总线 ...

  8. MySQL_表锁_lock tables tableName read

    pre.环境准备 1.建立两个表S,T,并插入一些数据 --创建表S create table S(d int) engine=innodb; ); --创建表T create table T(c i ...

  9. CentOS7.2 设置静态ip

    先找到配置文件: [root@localhost bin]# cd /etc/sysconfig/network-scripts [root@localhost network-scripts]# l ...

  10. Nginx web 服务器 安装篇

    Nginx介绍: 静态web服务器有Nginx .Apache .lighttpd等 目前国内用的最常见的就是Nginx 和Apache 是一个开源的.支持高性能.高并发的www服务和代理服务软件,N ...