【Hadoop入门学习系列之六】HBase基本架构、编程模型和应用案例

转载:https://blog.csdn.net/shengmingqijiquan/article/details/52922009

HBase是一个构建在HDFS上的分布式列存储系统;

HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;

从逻辑上讲, HBase将数据按照表、行和列进行存储。

Hbase是Hadoop生态系统的一个组成部分


Hbase与HDFS对比

共同点:
两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
不同点:
HDFS:
适合批处理场景
不支持数据随机查找
不适合增量数据处理
不支持数据更新
HBase:
大:一个表可以有数十亿行,上百万列;
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的存储和权限控制,列(族)独立检
索;
稀疏:对于空( null)的列,并不占用存储空间,表可以设计
的非常稀疏;
数据多版本:每个单元中的数据可以有多个版本,默认情况
下版本号自动分配,是单元格插入时的时间戳;
数据类型单一: Hbase中的数据都是字符串,没有类型
行存储与列存储


二.HBase模型和基本架构
2.1 HBase数据模型
HBase是基于Google BigTable模型开发的,典型的key/value系统;

Hbase逻辑视图

Rowkey与Column Family

Hbase支持的操作
所有操作均是基于rowkey的;
支持CRUD( Create、 Read、 Update和Delete)和Scan;
单行操作
 Put
 Get
 Scan
多行操作
 Scan
 MultiPut
没有内置join操作,可使用MapReduce解决。

2.2 HBase物理模型
每个column family存储在HDFS上的一个单独文件中;
Key 和 Version number在每个 column family中均由一份;
空值不会被保存。
Table中的所有行都按照row key的字典序排列;Table 在行的方向上分割为多个Region;

Region按大小分割的,每个表开始只有一个region,随着数据增多, region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;

Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上;

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


2.3 基本架构


2.3.1Hbase基本组件
Client
包含访问HBase的接口,并维护cache来加快对HBase的访问
Zookeeper
保证任何时候,集群中只有一个master
存贮所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给Master
存储HBase的schema和table元数据
Master
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改查操作
Region Server
Region server维护region,处理对这些region的IO请求
Region server负责切分在运行过程中变得过大的region
2.3.2 Zookeeper作用
HBase 依赖ZooKeeper
默认情况下,HBase管理ZooKeeper实例,比如, 启动或者停止ZooKeeper
Master与RegionServers 启动时会向ZooKeeper注 册
Zookeeper的引入使得 Master不再是单点故障

2.4HBase容错性
Master容错: Zookeeper重新选择一个新的Master
无Master过程中,数据读取仍照常进行;
无master过程中, region切分、负载均衡等无法进行;
RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时 间内未出现心跳
Master将该RegionServer上的Region重新分配到其他RegionServer上;
失效服务器上“预写”日志由主服务器进行分割并派送给新的
RegionServer
Zookeeper容错: Zookeeper是一个可靠地服务
一般配置3或5个Zookeeper实例。
三.HBase应用举例
3.1何时使用HBase?
需对数据进行随机读操作或者随机写操作;
大数据上高并发操作,比如每秒对PB级数据进行上千次操作;
读写访问均是非常简单的操作。
3.2 HBase应用企业

 

四.HBase编程实战
4.1 Hbase 访问方式
Native Java API
 最常规和高效的访问方式;
HBase Shell
 HBase的命令行工具,最简单的接口,适合HBase管理使用;
Thrift Gateway
 利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据;
REST Gateway
 支持REST 风格的Http API访问HBase, 解除了语言限制;
MapReduce
 直接使用MapReduce作业处理Hbase数据;
 使用Pig/hive处理Hbase数据
4.2 Hbase Java编程
4.2.1 Hbase Java API概述
Hbase是用Java语言编写的,支持Java编程是自然而然的事情;
支持CRUD操作;
Create, Read, Update, Delete
 Java API包含Hbase shell支持的所有功能,甚至更多;
Java API是访问Hbase最快的方式。
4.2.2 Java API程序设计步骤
步骤1:创建一个Configuration对象,包含各种配置信息
Configuration conf = HbaseConfiguration.create();
1
步骤2:构建一个HTable句柄
 提供Configuration对象
 提供待访问Table的名称
HTable table = new HTable(conf, tableName);
1
步骤3:执行相应的操作
 执行put、 get、 delete、 scan等操作
table.getTableName();
1
步骤4:关闭HTable句柄
 将内存数据刷新到磁盘上
 释放各种资源
table.close();
1
实例:


4.2.3 向HBase写入数据
步骤1:创建一个Put对象;

Put put = new Put(Bytes.toBytes("rowkey"));
1
步骤2:设置cell值;

Put.add(family, column, value)
Put.add(family, column, timestamp, value)
Put.add(KeyValue kv)
1
2
3
步骤3:调用HTable中的put方法,写入数据;
步骤4:关闭HTable句柄。


4.2.4 从Hbase中读取数据
支持的API类型
 通过rowkey获取一行数据
 通过一个rowkey集合获取多条记录
 扫描整个表或者表的一部分
扫描表
 可指定扫描的范围[startkey endkey)
 表中数据是按照rowkey排序的
API 特点
 数目有限、使用简单

读取数据时注意事项:
 只读取需要的数据
 尽可能增加数据约束条件
 可增加family, column(s), time range 和 max versions等约束条件

接口实例
 get.setTimeRange(minStamp, maxStamp)
 get.setMaxVersions(maxVersions)
 get.addFamily(family)
 get.addColumn(family, column)
4.2.5 从Hbase中删除数据


4.2.6 从Hbase中scan数据


五.总结
本博客是记录了HBase的基础内容,核心掌握HBase的设计思想和java编程,搞清楚HBase在什么时候使用!三种情况:需要随机访问,批量大数据高并发操作,操作为简单读写访问!
————————————————
版权声明:本文为CSDN博主「数据圈」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shengmingqijiquan/article/details/52922009

posted @ 2019-12-31 10:00  小学生II  阅读(211)  评论(0编辑  收藏  举报