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. codeforces721C

    Journey CodeForces - 721C Recently Irina arrived to one of the most famous cities of Berland — the B ...

  2. git生成ssh公钥方法--远程连接github仓库

    先配置全局的用户名和邮箱 $ git config --global user.name "runoob" $ git config --global user.email tes ...

  3. 10.4 Vue 父子传值

    简单示例 APP.vue <template> <div> <img :src="imgSrc"> <!-- 父子传值 --> &l ...

  4. elasticsearch更改mapping(不停服务重建索引)

    转载地址:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearc ...

  5. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)

    礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...

  6. MAC OS进阶必看——这10个技巧让你秒变MAC达人

    文章内容及图片来源于:什么值得买,如果涉及版权问题,请联系作者删除 文章收录于:风云社区(提供上千款各类mac软件的下载) 使用mac系统也有好几个年头,出色的办公效率以及越来越广的兼容性让mac成为 ...

  7. 速查mysql数据大小

    速查mysql数据大小 # 1.查看所有数据库大小 mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data ...

  8. 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。

    一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究 ...

  9. SpringMVC核心类和注解

    springMVC最重要的就是前端控制器DispatchServlet了.他是整个springMVC应用的核心. 需要将它配置在web.xml中. 1.DispatchServlet的配置 <! ...

  10. Coursera, Big Data 1, Introduction (week 3)

    什么是分布式文件系统?为什么需要分布式文件系统? 如果文件系统可以管理用网络连接的很多个存储单元,叫分布式文件系统. 分布式文件系统提供了数据可扩展性,容错性,高并发. 这些是传统文件系统不具有的. ...