【Hadoop入门学习系列之六】HBase基本架构、编程模型和应用案例
2016-10-26 15:40
781 查看
一.HBase概述
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();
步骤2:构建一个HTable句柄
提供Configuration对象
提供待访问Table的名称
HTable table = new HTable(conf, tableName);
步骤3:执行相应的操作
执行put、 get、 delete、 scan等操作
table.getTableName();
步骤4:关闭HTable句柄
将内存数据刷新到磁盘上
释放各种资源
table.close();
实例:
4.2.3 向HBase写入数据
步骤1:创建一个Put对象;Put put = new Put(Bytes.toBytes("rowkey"));
步骤2:设置cell值;
Put.add(family, column, value) Put.add(family, column, timestamp, value) Put.add(KeyValue kv)
步骤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在什么时候使用!三种情况:需要随机访问,批量大数据高并发操作,操作为简单读写访问!相关文章推荐
- 【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型
- 【Hadoop系列第六章】HBase应用场景、原理与基本架构
- 【Hadoop入门学习系列之二】HDFS架构和编程
- 【Hadoop系列第九章】(一)理论:HBase应用场景、原理与基本架构
- hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法
- Hadoop入门进阶课程10--HBase介绍、安装与应用案例
- MapReduce 2.0应用场景和原理、基本架构和编程模型
- 【Hadoop系列第五章】MapReduce2.0应用场景、原理与基本架构
- hadoop学习第十节:HBase介绍、安装与应用案例
- 流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)
- Hadoop系列-MapReduce编程入门案例(八)
- Hadoop入门进阶课程10--HBase介绍、安装与应用案例
- hadoop学习笔记二_MapReduce应用场景、原理、基本架构
- Hadoop入门进阶课程10--HBase介绍、安装与应用案例
- 【Hadoop入门学习系列之五】MapReduce 2.0编程实战
- Sharepoint学习笔记 –架构系列—Sharepoint的客户端对象模型(Client Object Model)
- Sharepoin学习笔记—架构系列-- Sharepoint的处理(Process)与执行模型(Trust Model) 2
- Sharepoint学习笔记 –架构系列—Sharepoint的服务器端对象模型(Server Object Model) 1.物理对象层次结构
- Hadoop基础入门学习笔记(基本概念)
- arm学习笔记一(arm概述及其基本编程模型)