(第6篇)大数据发展背后的强力推手——HBase分布式存储系统
摘要: 今天我们介绍可在廉价PC Server上搭建起大规模结构化存储集群的分布式存储系统——HBase。
博主福利 给大家赠送一套hadoop视频课程
授课老师是百度 hadoop 核心架构师
内容包括hadoop入门、hadoop生态架构以及大型hadoop商业实战案例。
讲的很细致, MapReduce 就讲了 15 个小时。
学完后可以胜任 hadoop 的开发工作,很多人学的这个课程找到的工作。
(包括指导书、练习代码、和用到的软件都打包了)
先到先得先学习。联系老师微信ganshiyu1026,备注OSchina。即可免费领取
部分视频截图展示

前面的文章我们介绍了HDFS文件系统、Mapreduce计算框架、Zookeeper协作服务今天我们介绍可在廉价PC Server上搭建起大规模结构化存储集群的分布式存储系统——HBase。
HBase
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
本章内容:
1) Hbase简介
2) Hbase数据模型
3) Hbase基础原理
4) Hbase系统架构
5) Hbase基础操作
1. Hbase简介
HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据存储文件夹的结构,还可以通过Map/Reduce的框架(算法)对HBase进行操作。

上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
Hbase适用场景:
1) 大数据量存储,大数据量高并发操作
2) 需要对数据随机读写操作
3) 读写访问均是非常简单的操作
Hbase与HDFS对比:

l 两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
l HDFS适合批处理场景,但不支持数据随机查找,不适合增量数据处理,不支持数据更新
2. Hbase数据模型
HBase以表的形式存储数据。表由行和列族组成。列划分为若干个列族(row family),其逻辑视图如下:
|
行健 |
时间戳 |
列族contents |
列族anchor |
列族mime |
|
“com.cnn.www” |
T9 |
Anchor:cnnsi.com=“CNN” |
||
|
T8 |
Anchor:my.look.ca=“CNN.com” |
|||
|
T6 |
Contents:html=“<html>……” |
Mime.type=“text/html” |
||
|
T5 |
Contents:html=“<html>……” |
|||
|
T3 |
Contents:html=“<html>……” |
几个关键概念:
1) 行键(RowKey)
l 行键是字节数组, 任何字符串都可以作为行键;
l 表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储;
l 所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)
2) 列族(ColumnFamily)
l CF必须在表定义时给出
l 每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
l 数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计非常适合于数据分析的情形
3) 时间戳(TimeStamp)
l 每个Cell可能又多个版本,它们之间用时间戳区分
4) 单元格(Cell)
l Cell 由行键,列族:限定符,时间戳唯一决定
l Cell中的数据是没有类型的,全部以字节码形式存储
5) 区域(Region)
l HBase自动把表水平(按Row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据;
l 每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;
l 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。

l Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。

3. Hbase架构及基本组件

从上图看到HBase的基本组件:
1) Client:
l 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。
2) Master
l 为Region server分配region
l 负责Region server的负载均衡
l 发现失效的Region server并重新分配其上的region
l 管理用户对table的增删改查操作
3) Region Server
l Regionserver维护region,处理对这些region的IO请求
l Regionserver负责切分在运行过程中变得过大的region
4) Zookeeper作用

l 通过选举,保证任何时候,集群中只有一个Master,Master与RegionServers 启动时会向ZooKeeper注册
l 存储所有Region的寻址入口
l 实时监控Region server的上线和下线信息,并实时通知给Master
l 存储HBase的schema和table元数据
l 默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
Zookeeper的引入使得Master不再是单点故障
4. Hbase容错与恢复

每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复
Hbase容错性:
1) Master容错:Zookeeper重新选择一个新的Master
l 无Master过程中,数据读取仍照常进行;
l 无master过程中,region切分、负载均衡等无法进行;
2) RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
3) Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例
Region定位流程:

寻找RegionServer过程:ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表
1) -ROOT-
l 表包含.META.表所在的region列表,该表只会有一个Region;
l Zookeeper中记录了-ROOT-表的location。
2) .META.
l 表包含所有的用户空间region列表,以及RegionServer的服务器地址。
5. Hbase基础操作
1) 进入hbase shell console
|
$HBASE_HOME/bin/hbase shell |
表的管理:
2) 查看有哪些表
|
list |
3) 创建表
|
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>} # 例如:创建表t1,有两个family name:f1,f2,且版本数均为2 > create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2} |
4) 删除表
|
# 分两步:首先disable,然后drop # 例如:删除表t1 > disable 't1' > drop 't1' |
5) 查看表的结构
|
# 语法:describe <table> # 例如:查看表t1的结构 > describe 't1' |
6) 修改表结构
|
# 修改表结构必须先disable # 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'} # 例如:修改表test1的cf的TTL为180天 > disable 'test1' > alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'} > enable 'test1' |
权限管理:
1) 分配权限
|
# 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔 # 权限用五个字母表示: "RWXCA". # READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A') # 例如,给用户‘test'分配对表t1有读写的权限, > grant 'test','RW','t1' |
2) 查看权限
|
# 语法:user_permission <table> # 例如,查看表t1的权限列表 > user_permission 't1' |
3) 收回权限
|
# 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier> # 例如,收回test用户在表t1上的权限 > revoke 'test','t1' |
表数据的增删改查:
1) 添加数据
|
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp> # 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认 > put 't1','rowkey001','f1:col1','value01' |
2) 查询数据——查询某行记录
|
# 语法:get <table>,<rowkey>,[<family:column>,....] # 例如:查询表t1,rowkey001中的f1下的col1的值 > get 't1','rowkey001', 'f1:col1' # 或者: > get 't1','rowkey001', {COLUMN=>'f1:col1'} # 查询表t1,rowke002中的f1下的所有列值 hbase(main)> get 't1','rowkey001' |
3) 查询数据——扫描表
|
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num} # 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能 # 例如:扫描表t1的前5条数据 > scan 't1',{LIMIT=>5} |
4) 查询表中的数据行数
|
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum} # INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度 # 例如,查询表t1中的行数,每100条显示一次,缓存区为500 > count 't1', {INTERVAL => 100, CACHE => 500} |
5) 删除数据——删除行中的某个列值
|
# 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名 # 例如:删除表t1,rowkey001中的f1:col1的数据 > delete 't1','rowkey001','f1:col1' |
6) 删除数据——删除行
|
# 语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据 # 例如:删除表t1,rowk001的数据 > deleteall 't1','rowkey001' |
7) 删除数据——删除表中的所有数据
|
# 语法: truncate <table> # 其具体过程是:disable table -> drop table -> create table # 例如:删除表t1的所有数据 > truncate 't1' |
Region管理:
1) 移动Region
|
# 语法:move 'encodeRegionName', 'ServerName' # encodeRegionName指的regioName后面的编码,ServerName指的是master-status的Region Servers列表 # 示例 >move '4343995a58be8e5bbc739', 'db-41.xxx.xxx.org,60020,139' |
2) 开启/关闭region
|
# 语法:balance_switch true|false hbase(main)> balance_switch |
3) 手动split
|
# 语法:split 'regionName', 'splitKey' |
4) 手动触发major compaction
|
#语法: #Compact all regions in a table: > major_compact 't1' #Compact an entire region: > major_compact 'r1' #Compact a single column family within a region: > major_compact 'r1', 'c1' #Compact a single column family within a table: > major_compact 't1', 'c1' |
此时你已经学会了安装hadoop集群,了解了HDFS文件系统,MapReduce计算框架和Zookeeper协作服务(Zookeeper数据模型、访问控制、应用场景),今天学完了HBase,下一篇我们介绍hadoop的数据库工具——Hive。
(第6篇)大数据发展背后的强力推手——HBase分布式存储系统的更多相关文章
- CentOS6安装各种大数据软件 第六章:HBase分布式集群的配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- CentOS6安装各种大数据软件 第四章:Hadoop分布式集群配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 图解大数据 | 海量数据库查询-Hive与HBase详解
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...
- 大数据攻城狮之Hadoop伪分布式篇
对于初学大数据的萌新来说,初次接触Hadoop伪分布式搭建的同学可能是一脸萌笔的,那么这一次小编就手把手的教大家在centos7下搭建Hadoop伪分布式. 底层环境: VMware Workstat ...
- 大数据组件原理总结-Hadoop、Hbase、Kafka、Zookeeper、Spark
Hadoop原理 分为HDFS与Yarn两个部分.HDFS有Namenode和Datanode两个部分.每个节点占用一个电脑.Datanode定时向Namenode发送心跳包,心跳包中包含Datano ...
- 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- 大数据入门第十四天——Hbase详解(一)入门与安装配置
一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...
- 大数据时代的结构化存储--HBase
迄今,相信大家肯定听说过 HBase,但是对于 HBase 的了解可能仅仅是它是 Hadoop 生态圈重要的一员,是一个大数据相关的数据库技术. 今天我带你们一起领略一下 HBase 体系架构,看看它 ...
随机推荐
- Hystrix介绍以及服务的降级限流熔断
(dubbo熔断,Hystrix问的少) 无论是缓存层还是存储层都会有出错的概率,可以将它们视同为资源.作为并发量较大的系统,假如有一个资源不可用,可能会造成线程全部 hang (挂起)在这个资源上, ...
- 转--python 黑魔法2
Python 高效编程小技巧 个人博客:临风|刀背藏身 Python 一直被我拿来写算法题,小程序,因为他使用起来太方便了,各种niubi闪闪的技能点也在写算法的过程中逐渐被挖掘到,感谢万能的谷哥度娘 ...
- 第16月第15天 glut
1. https://tokoik.github.io/opengl/libglut.html https://github.com/wistaria/wxtest/tree/master/C htt ...
- Native、Web App、Hybrid、React Native(简称RN)、Weex 间的异同点。
App常用开发模式简介 此处App为应用application,并非我们通常讲的手机App. 常用的几种APP开发模式-脑图 Native App 传统的原生App开发模式,有iOS和aOS两大系统, ...
- 基于神经网络的颜色恒常性—Fully Convolutional Color Constancy with Confidence-weighted Pooling
论文地址: http://openaccess.thecvf.com/content_cvpr_2017/papers/Hu_FC4_Fully_Convolutional_CVPR_2017_pap ...
- Java中在特定区间产生随机数
生成指定范围内的随机数 这个是最常用的技术之一.程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例.问题往往类似于: 如何随机生成 1~100 ...
- JavaScript对象复制(一)(转载)
在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ...
- OA协同办公软件
OA协同办公软件: 泛微软件. 九思软件. 华天动力. 万户OA.:北京万户网络技术有限公司创立于1998年2月,是北京华宇软件股份有限公司(股票简称:“华宇软件”,股票代码:300271)的全资子公 ...
- springboot系列二、springboot项目搭建
一.官网快速构建 1.maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本2.1.1以及一些工程基本信息, ...
- R-TREE
原文地址:http://blog.csdn.net/sunmenggmail/article/details/8122743 1984年,加州大学伯克利分校的Guttman发表了一篇题为“R-tree ...