文档章节

(第6篇)大数据发展背后的强力推手——HBase分布式存储系统

隐姓埋名啊
 隐姓埋名啊
发布于 2017/03/22 13:47
字数 2711
阅读 348
收藏 7

分享一套今年最新Hadoop大数据教程和100道Hadoop大数据必会面试题

因为链接经常被和谐,需要的朋友请 加微信 ganshiyun666 来获取最新下载链接,注明“OSC”

 

教程已帮助300+人成功转型Hadoop开发,90%起薪超过20K,工资比之前翻了一倍。

百度Hadoop核心架构师亲自录制

内容包括0基础入门、Hadoop生态系统、真实商业项目实战3大部分。其中商业案例可以让你接触真实的生产环境,训练自己的开发能力。

部分视频截图展示

 

前面的文章我们介绍了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进行操作。

wKioL1jAy-bCpuW1AAGnj_qExNY828.png 

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

Hbase适用场景:

1) 大数据量存储,大数据量高并发操作

2) 需要对数据随机读写操作

3) 读写访问均是非常简单的操作

Hbase与HDFS对比:

wKiom1jAz1XhWEmSAAUSeXKxu8k044.png 

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 上。

wKioL1jAz3vCXiaBAAD2QldJ8C4220.png 

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

wKioL1jAz4qDLi2QAACgTROyDyU987.png 

 

3. Hbase架构基本组件

wKiom1jAz6WiZxgUAALwxWTI95s219.png 

从上图看到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作用

wKioL1jAz_ChqQ4CAADJRAXX0xY881.png 

l 通过选举,保证任何时候,集群中只有一个Master,Master与RegionServers 启动时会向ZooKeeper注册

l 存储所有Region的寻址入口

l 实时监控Region server的上线和下线信息,并实时通知给Master

l 存储HBase的schema和table元数据

l 默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper

Zookeeper的引入使得Master不再是单点故障

4. Hbase容错与恢复

wKioL1jCRdeABkioAAQl9sSsyVA056.png 

每个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定位流程:

wKiom1jCReqR-FGjAACGf_edunI680.png 

寻找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。

 

 

© 著作权归作者所有

隐姓埋名啊
粉丝 155
博文 14
码字总数 33627
作品 0
架构师
私信 提问
中国HBase技术社区第九届meetup(北京站)最全资料下载

2018年12月23日14点,我们在北京朝阳360公司A座一层发布厅举办了中国HBase技术社区第九届meetup-HBase典型应用场景与实践。 沙龙全程视频在线观看:https://yq.aliyun.com/live/715 本期活动...

hbase小能手
2018/12/23
0
0
中国HBase技术社区第八届MeetUp ——HBase应用实践专场

中国HBase技术社区第八届MeetUp ——HBase应用实践专场 HBase—Hadoop Database是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据...

阿里云栖技术沙龙
2018/11/13
36
0
中国HBase技术社区第八届MeetUp ——HBase应用实践专场

中国HBase技术社区第八届MeetUp ——HBase应用实践专场 HBase—Hadoop Database是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据...

阿里云栖开发者沙龙
2018/11/13
22
0
中国HBase技术社区第九届meetup-HBase典型应用场景与实践(北京站)

本期嘉宾介绍 本期活动主题 13:30-14:00 签到 14:00-14:40 HBase 2.0 在360的技术改进与应用实践 讲师:王小勇——360系统部分布式存储方向架构师 介绍内容:HBase在360的使用现状和发展历程...

阿里云栖技术沙龙
2018/12/05
161
0
HBase技术双周刊第1期:HBase 在人工智能场景的使用

精彩直播 HBase多模式 HBase多模式,包括 分析层:支持复杂分析、算子下推;多模式层:提供各种模型转换,贴切业务;索引引擎:提供索引支持,基于 Lucene ;存储引擎:提供 KV 支持,基于L...

萌萌怪兽
2018/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部