Hadoop大数据实战系列文章之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 对比:

 两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;

 HDFS 适合批处理场景,但不支持数据随机查找,不适合增量数据处理,不支持数

据更新

2. Hbase 数据 模型

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

几个关键概念:

1) 行键(RowKey)

 行键是字节数组, 任何字符串都可以作为行键;

 表中的行根据行键进行排序,数据按照 Row key 的字节序(byte order)排序存储;

 所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)

2) 列族(ColumnFamily)

 CF 必须在表定义时给出

 每个 CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入

 数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个 Store),这种设计非常适合于数据分析的情形

3) 时间戳(TimeStamp)

 每个 Cell 可能又多个版本,它们之间用时间戳区分

4) 单元格(Cell)

 Cell 由行键,列族:限定符,时间戳唯一决定

 Cell 中的数据是没有类型的,全部以字节码形式存储

5) 区域(Region)

 HBase 自动把表水平(按 Row)划分成多个区域(region),每个 region 会保存一个表里面某段连续的数据;

 每个表一开始只有一个 region,随着数据不断插入表,region 不断增大,当增大到一个阀值的时候,region 就会等分会两个新的 region;

 当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个 Region 上。

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

3. Hbase 架构 及 基本组件

从上图看到 HBase 的基本组件:

1) Client:

 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。

2) Master

 为 Region server 分配 region

 负责 Region server 的负载均衡

 发现失效的 Region server 并重新分配其上的region

 管理用户对 table 的增删改查操作

3) Region Server

 Regionserver 维护 region,处理对这些 region 的 IO 请求

 Regionserver 负责切分在运行过程中变得过大的 region

4) Zookeeper 作用

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

 存储所有 Region 的寻址入口

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

 存储 HBase 的 schema 和 table 元数据

 默认情况下,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

 无 Master 过程中,数据读取仍照常进行;

 无 master 过程中,region 切分、负载均衡等无法进行;

2) RegionServer 容错:定时向 Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master 将该 RegionServer 上的 Region 重新分配到其他 RegionServer 上,失效服务器上“预写”日志由主服务器进行分割并派送给新的 RegionServer

3) Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例

Region 定位流程:

寻找 RegionServer 过程:ZooKeeper--> -ROOT-(单 Region)--> .META.--> 用户表

1) -ROOT-

 表包含.META.表所在的 region 列表,该表只会有一个 Region;

 Zookeeper 中记录了-ROOT-表的 location。

2) .META.

 表包含所有的用户空间 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'

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • 一、HBase简介 1.1 HBase是什么 HBase是一个分布式的、面向列的开源数据库,Hadoop 数据库。...
    这一刻_776b阅读 926评论 0 0
  • 什么是HBase? 是⼀个分布式、海量、列式、⾮关系型 数据库系统,可以提供超⼤规模数据集的实时随机读写 列存储的...
    啦啦啦喽啰阅读 344评论 0 0
  • 1. 简答说一下hadoop的map-reduce编程模型 首先map task会从本地文件系统读取数据,转换成k...
    什锦甜阅读 3,435评论 3 42
  • 上一篇:101-BigData-29Azkaban 一、HBaes介绍 1.1、HBase简介HBase是一个分布...
    AncientMing阅读 656评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,522评论 16 22