Hadoop学习笔记—15.HBase框架学习(基础知识篇)

Hadoop学习笔记—15.HBase框架学习(基础知识篇)

HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是松散型数据。

一、HBase:BigTable的开源实现

1.1 HBase出现的背景

  (1)随着数据规模越来越大,大量业务场景开始考虑数据存储水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器。

  (2)海量数据量存储成为瓶颈,单台机器无法负载大量数据。

  (3)单台机器IO读写请求成为海量数据存储时候高并发,大规模请求的瓶颈。

  (4)当数据进行水平扩展时候,如何解决数据IO高一致性问题。结合Map/Reduce计算框架进行海量数据的离线分析。

1.2 BigTable成就了HBase

  Google这个神奇的公司以其不保守的态度以学术论文的方式公开了其云计算的三大法宝:GFS、MapReduce和BigTable,其中对于BigTable的开源实现HBase则是由Doug Cutting完成的。

  HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

  HBase中的表一般有这样的特点:

  (1) 大:一个表可以有上亿行,上百万列

  (2) 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

  (3) 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

PS:什么是列存储?

列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数 据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为 这种聚集存储设计更好的压缩/解压算法。下图讲述了传统的行存储和列存储的区别:

1.3 HBase在Hadoop项目中的位置

  与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应

  下图展示了HBase在Hadoop生态系统体系结构中所处的位置:

  上图描述了Hadoop生态系统中的各层系统。其中,HBase位于结构化存储层Hadoop HDFS为HBase提供了高可靠性的底层存储支持Hadoop MapReduce为HBase提供了高性能的计算能力Zookeeper为HBase提供了稳定服务和失效转移(FailOver)机制

  此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

二、HBase的数据模型

  HBASE中的每一张表,就是所谓的BigTable,一张稀疏表。RowKeyColumnKey 是二进制值byte[],按字典顺序排序;Timestamp 是一个 64 位整数;value 是一个未解释的字节数组byte[]。表中的不同行可以拥有不同数量的成员。即支持“动态模式“模型。

2.1 逻辑模型

  Table & Column Family

  HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family),如下图所示:

  Ø  Row Key: 行键,Table的主键,Table中的记录按照Row Key排序

  Ø  Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number

  Ø  Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。

2.2 物理模型

 (1)物理存储表示

  将逻辑模型中的一个Row分割为根据Column family存储的物理模型,如下图所示:

 (2)Table & Region

  当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理,如下图所示:

  由上可知,HBase的伸缩性主要依赖于其可分裂的HRegion可伸缩的分布式文件系统HDFS,下面介绍一下HBase如何实现伸缩性:

  ①HBase中数据以HRegion为单位进行管理,也就是说应用程序如果想要访问一个数据,必须先找到HRegion,然后将数据读写操作提交给HRegion,由HRegion完成存储层面的数据操作。

  ②每个HRegion中存储一段Key区间(例如:[Key1,Key2))的数据,HRegionServer是物理服务器,每个HRegionServer上可以启动多个HRegion实例。当一个HRegion中写入的数据太多,达到配置的阀值时,HRegion会分裂成两个HRegion,并将HRegion在整个集群中进行迁移,以使HRegionServer的负载均衡。

  ③所有的HRegion的信息都(例如:存储的Key值区间、所在HRegionServer的IP地址和端口号等)记录在HMaster服务器上。 同时为了保证高可用,HBase启动了多个HMaster,并通过ZooKeeper(一个支持分布式一致性的数据管理服务)选举出一个主服务器,通过这 个主HMaster服务器获得Key值所在的HRegionServer,最后请求该HRegionServer上的HRegion实例,获得需要的数 据。其具体的数据寻址访问流程如下图所示:

hbase scuduling

三、HBase的系统架构

3.1 Client

  包含访问hbase的接口,Client维护着一些cache来加快对hbase的访问,比如regione的位置信息。

3.2 ZooKeeper

  (1) 保证任何时候,集群中只有一个master

  (2) 存贮所有Region的寻址入口。

  (3) 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master

  (4) 存储Hbase的schema,包括有哪些table,每个table有哪些column family

3.3 HMaster

  (1)为Region Server分配Region

  (2)负责Region Server的负载均衡

  (3)发现失效的Region Server并重新分配其上的Region

  (4)GFS上的垃圾文件回收

  (5)处理Schema更新请求

  HMaster主要作用在于,通过HMaster维护系统表-ROOT-,.META.,记录regionserver所对应region变化信息。此外还负责监控处理当前hbase cluster中regionserver状态变化信息。

PS:两张神奇的表:-ROOT-和.META

① .META.:记录了用户表的Region信息,.META.可以有多个regoin
② -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region

Zookeeper中记录了-ROOT-表的location

Client访问用户数据之前需要首先访问Zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问:

3.4 Region Server

  (1)Region Server维护HMaster分配给它的Region,处理对这些Region的IO请求

  (2)Region Server负责切分在运行过程中变得过大的Region

  可以看出,client 访问hbase 上数据的过程并不需要master 参与,寻址访问zookeeper 和region server,数据读写访问regioneserver。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是 HBase中最核心的模块。

参考资料

  (1)奥特MAN,《HBase入门篇》:http://www.uml.org.cn/sjjm/201212141.asp

  (2)加俊,《HBase简介》:http://jiajun.iteye.com/blog/899632

  (3)百度百科,《HBase》:http://baike.baidu.com/view/1993870.htm

  (4)reck for zhou,《HBase介绍》:http://www.cnblogs.com/reckzhou/archive/2012/03/22/2412002.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

室内地图 - (资料收集)

基于HTML5 Canvas绘制的支持手势缩放的室内地图 https://blog.csdn.net/licaomengRICE/article/details/50116781 室内地图制作流程 https://wenku.baidu.com/view/5dd7d6ba960590c69fc37604.html 使用JOSM绘制室内地图及路径(一) https://blog.csdn.…

C#异常处理机制初步

原地址:http://www.sudu.cn/info/html/edu/net/20071227/50446.html 一、c#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异常。 catch 以控制权更大的方式处理错误,可以有多个catch子句。 finally 无论是…

scss常用(一)

charset "utf-8"; /* 页面中两边留下的空白 */ /* */ //间距 $generalMargin:2.86rem/2; $titleMargin:1.43rem/2; $moreBigMargin:4.29rem/2; $bigMargin:3.57rem/2; $smallMargin:2.14rem/2; $smallerMargin:1.5rem/2;/* *//* */ //尺寸 $bigFont:3.14rem/2; $m…

二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

数组理论基础数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力也就是说,想法很简单,但实现起来 可能就不是那么回事了。首先要知道数组在内存中的存储方式&#xff0c…

TextView显示颜色高亮的问题

TextView textView (TextView) findViewById( R.id.tv );String text "<font color\"#d93b3a\">" "快过年了" "</font>" "<font color\"#666666\">" "哈哈哈哈" "</…

开源GIS解决方案,暨GeoServer+OpenLayer结合开发总结

http://linking123.github.io/2018/07/21/%E5%BC%80%E6%BA%90GIS%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%8C%E6%9A%A8GeoServer-OpenLayer%E7%BB%93%E5%90%88%E5%BC%80%E5%8F%91%E6%80%BB%E7%BB%93/ – 0.感叹 – 1.文档说明 – 2.文档内容 — 2.1 GeoServer - 地图服务 —…

TOJ---2621--全排列

这个方法 是超神教我的 --- 全排列的方法太多种了 感觉他这种写的 字典序法 是最简单的 最容易让人接受的 而且在时间复杂度和空间复杂度上 都可以让人接受 我待会将具体每步做法简要写一下...-> 我现在被一个 三角形给 深深烦死了 。。。。。。贴个代码 来 缓解下..... 1 …

Azure 和 Linux

Azure 正在不断集结各种集成的公有云服务&#xff0c;包括分析、虚拟机、数据库、移动、网络、存储和 Web&#xff0c;因此很适合用于托管解决方案。 Azure 提供可缩放的计算平台&#xff0c;允许即用即付&#xff0c;而无需投资购买本地硬件。 Azure 允许根据客户端所需的任何…

java获取classpath以外的路径

最近在使用以前写过的代码生成器&#xff08;从表名可生成所有的代码&#xff09;的时候&#xff0c;发现生成的文件都在classpath目录下&#xff0c;所有的文件都得自己拷到工程目录下&#xff0c;于是&#xff0c;想优化一下&#xff0c;取得classpath目录以外的路径&#xf…

月份第一天_4月份的第一天,全省迎来晴暖天气~

2019年4月1日早上好北方新农村准时准点播报~▼▼▼今天是2019年4月1日星期一辽宁的天气小孩的脸说变就变上周末突如其来的一场雪&#xff0c;让辽宁大部分地区“措手不及”已经开始回升的温度瞬间跌落到谷底。但不管怎样&#xff0c;随着节气的更迭&#xff0c;冷空气终究大势已…

Windows系统下搭建Git本地代码库

近由于工作需要&#xff0c;要把工作代码做一下版本管理。工作代码也不方便放到github上&#xff0c;也不想付费建私密库&#xff0c;公司也没几个人&#xff0c;所以就想着搭建一个本地Git版本库&#xff0c;来做版本管理。搭建过程如下。 系统环境&#xff1a;Dell OptiPlex…

mac 下终端 操作svn命令 以及出现证书错误的处理方法

首先&#xff0c;转载地址&#xff1a;http://hi.baidu.com/zhu410289616/item/eaaf160f60eb0dc62f4c6b0e 还有一个地址&#xff1a;http://www.cnblogs.com/heiniuhaha/archive/2011/11/11/2245594.html 解决证书出错&#xff0c;错误见下图&#xff1a; 解决方法&#xff1a;…

Linux shell multifile content replace with sed

#!/bin/bash# Linux shell multifile content replace with sed # 声明&#xff1a; # 本源代码主要是利用两份&#xff08;中、英文&#xff09;具有相同键值对的json数据&#xff0c;对html内的中文进行 # 自动化文本替换的代码。 # # …

jquery实时监听输入框值变化

在做web开发时候很多时候都需要即时监听输入框值的变化&#xff0c;以便作出即时动作去引导浏览者增强网站的用户体验感。而采用onchange时间又往往是在输入框失去焦点&#xff08;onblur&#xff09;时候触发&#xff0c;有时候并不能满足条件。 首先看一下dom中元素事件&…

文件过滤_jmeter(七)-BeanShell对数据过滤保存文件

在测试中有时需要对参数化数据进行过滤&#xff0c;实现保存到一个文件。如&#xff1a;某项目&#xff0c;从数据库查询到10万条用户数据&#xff0c;因为有的用户没有权限或者过期了&#xff0c;需要对这份数据筛选出来能正常使用的用户。如下使用beanshell实现此功能。原文件…

如何在mac系统下搭建git服务器

https://zhidao.baidu.com/question/1823748339128066228.html 第一步,下载gitblit http://gitblit.com/ 这里当然是选择linux/osx的版本。下载下来是一个.tar.gz的压缩文件&#xff0c;我下载时最新版本是gitblit-1.7.1.tar.gz 第二步&#xff0c;配置gitblit 创建目录&…

高级开发面试题

1.以前公司做过哪些项目&#xff1b; 2.这些项目都用到哪些技术&#xff1b; 3.redis里有哪些数据类型&#xff0c;对比memcache和redis&#xff1b; 4.目前平台的系统架构&#xff1b; 5.dubbo的server分了几个&#xff0c;怎么分的&#xff1b; 6.集群的负载策略&#xff1b;…

部品se分析_汽车储物箱部品模具,二色产品模具专业厂

汽车储物箱部品模具PVC塑料型材挤出模具是挤出生产线的核心部分&#xff0c;它包括口模(又称模头)、定型模、冷却水箱等。口模通过法兰盘与挤出机机头上的法兰盘组装在一起&#xff0c;安装加热圈、加热板&#xff0c;接通电源和热电偶。定型模和冷却水箱装用螺钉固定在定型台&…

WordPress二次开发经验简短总结

1.建议直接在客户给的服务器环境上安装WordPress程序再二次开发&#xff0c;如果在自己的开发机上安装好后再迁移过去&#xff0c;不同版本数据库或不同版本PHP环境可能会砸出坑。 2.由于国情原因&#xff0c;大陆访问googleapis.com呈现龟速特征&#xff0c;参考我之前的文章…

【Lucene4.8教程之五】Luke

一、Luke基本内容 1、Luke简介 Luke可用于查看Lucene创建的索引&#xff0c;并对其进行基本操作。 2、创建Luke &#xff08;1&#xff09;从Github上下载源文件 https://github.com/tarzanek/luke &#xff08;2&#xff09;解压文件后&#xff0c;打开DOS窗口&#xff0c;进入…