Chap 1 认识 HBase
本章重点 :
了解 HBase 概念、发展历史
了解 HBase 基本特性
了解 HBase 在 Hadoop Ecosystem
1-1 HBase 简介
HBase 是 Hadoop Database 高性能、面向列、可伸缩的分布式存储系统
HBase 是 一种 NoSql (Not only SQL) 存储系统, 专门用来快速随机读写大规模数据
HBase 弥补了 Hadoop 只能离线批处理的不足,同时能够存储小文件
HBase 提供海量数据的随机检索, 并保证一定的性能
1-2 HBase 历史
2008.01 HBase 列为 Hadoop 的顶级项目
2008.10 HBase 0.89.20100621
......
HBase 0.98
HBase 1.0.0 里程碑
1-3 HBase 特性
HBase 作为典型的 NoSQL 数据库, 可以通过 行键 (Rowkey) 检索数据, 仅支持单行事务, 主要用于存储 非结构化 和 半结构化 的松散数据。
容量巨大
面向列
稀疏列
扩展性
高可靠性
高性能
面向列
列式数据库优点:
数据按列存储, 即 每一列单独存放
数据即索引
只访问查询涉及的列, 可以大量降低系统 IO
每一列由线索来处理, 即查询的并发处理性能高
数据类型一致, 数据特性相似, 可以高效压缩
列式数据库缺点:
不适合扫描小量数据
不适合随机的更新
批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
不适合做含有删除和更新的实时操作。
稀疏列
行式存储, 大量未 NULL 的列,占用存储空间
HBase 列式存储, 为 空 的列并不占用存储空间, 因此表可以设计的非常稀疏
扩展性
HBase 底层依赖 HDFS, 基因上扩展性就好.
HBase 的 Region 和 RegionServer 的概念对应到数据分区, 分区后数据可以位于不同的机器, 所以 HBase 的核心架构也具备扩展性.
HBase 的扩展性是热扩展, 可以随时添加或者减少节点
高可靠性
HBase 提供 WAL 和 Replication 机制.
协调服务 ZooKeeper 组件经过工业验证的。
高性能
底层的 LSM 数据结构和 Rowkey 有序排列等架构, 具备写高性能
Region 切分、主键索引 和 缓存机制使得 HBase 具有随机读高性能
1-4 HBase 核心模块
Hadoop 框架两大核心组件
HDFS
MapReduce
HBase 四大核心模块
客户端 Client
协调服务模块 ZooKeeper
主节点 HMaster
Region节点 RegionServer
HBase架构图
1). Client
整个 HBase 系统的入口, 使用 RPC 机制与 HMaster 和 RegionServer 通信
管理类操作 : Client 与 HMaster 进行 RPC 通信
数据读写操作 : Client 与 RegionServer 进行 RPC 交互
2). ZooKeeper
ZooKeeper Quorum(队列) 负责管理 HBase 中 多 HMaster 的选举, 保证HBase集群中只有一个正常运行提供服务的 HMaster 节点。
还有 存储HBase元数据信息、实时监控RegionServer、Region寻址入口等
3). 主节点 HMaster
HMaster 主要负责 Table 和 Region 的管理工作
管理用户对 Table 的增、删、改、查 操作。
管理 RegionServer 的负载均衡, 调整 Region 分布。
在 Region 分裂后, 负责新 Region 的分配。
在 RegionServer 死机后, 负责失效 RegionServer 上的 Region 迁移
4). HRegionServer
HRegionServer 主要负责响应用户 I/O 请求, 向 HDFS 文件系统中读写数据, 是 HBase 最核心的模块。
HRegionServer 的组成结构
1-5 HBase Hadoop_Eco
HBase社区信
应该怎样设计模式来存储复杂的数据以保证读写性能的均衡?
应该怎样规划数据的访问方式来保证最大限度地发挥 HBase 集群的威力?
1-6 Hive & HBase
Hive
Hive 是一种类 SQL 的引擎,并且运行 MapReduce 任务.
Hive 可以用来进行统计查询
HBase
HBase 可以用来进行实时查询
HBase 是一种在 Hadoop之上的 NoSQL 的 Key/vale 数据库。
数据也可以从Hive写到HBase,设置再从HBase写回Hive
Chap 2 HBase架构组件
本章重点 :
了解 HBase 架构组件
2-1 HBase 核心组件
HBase 利用 MapReduce 来处理 HBase 中的海量数据
HBase 利用 HDFS 作为文件存储系统
HBase 利用 ZooKeeper 作为协同服务 (为HBase提供 服务和失败恢复机制)
HBase 功能
HBase 主要用来存储非结构化和半结构化的 松散数据
HBase 仅能通过 row key 和 row key 值 range 来检索数据,仅支持单行事务(可通过 Hive 支持来实现多表连接等复杂操作)
HBase 依靠横向扩展, 需要通过增加廉价服务器来 增加计算和存储能力
HBase 的目的 是处理非常庞大的 table
2-2 HBase 部件的支持
Hadoop部件 | function |
---|---|
HDFS | 高可靠的底层存储支持 |
MapReduce | 高性能的计算能力 |
Zookeeper | 稳定服务和failover机制 |
Pig&Hive | 高层语言支持,便于数据统计 |
Sqoop | 提供RDBMS数据导入,便于传统数据库向HBase迁移 |
2-3 HBase 的访问接口
方式 | 特点 | 场合 |
---|---|---|
Native Java API | 最常规和高效 | Hadoop MapReduce Job并行处理HBase表数据 |
HBase Shell | 最简单接口 | HBase管理使用 |
Thrift Gateway | 利用Thrift序列化支持多种语言 | 异构系统在线访问HBase表数据 |
Rest Gateway | 解除语言限制 | Rest风格Http API访问 |
Pig | Pig Latin六十编程语言处理数据 | 数据统计 |
Hive | 简单,SqlLike | 场合 |
2-4 HBase Table 数据模型
HBase Table 的特点
大 (一个table可以上亿行)
面向列 (族) 的存储和权限控制,列(族)独立检索;
稀疏 (对于未null的列,并不占用空间)
数据类型单一 : HBase中的数据都是字符串,没有类型。
HBase Table 介绍
Row Key: 行键,Table的主键,Table中的记录按照Row Key排序
Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
Chap 3 HBase安装与配置
本章重点 :
了解 HBase集群 的安装、部署、启动 和 停止
命令行方式对 HBase 进行 插入、查询、删除 数据等
注意
配置 HBase与Hadoop类似, 都是通过安装包的 conf 目录下的配置生效
修改一台机器的配置文件后, 记得要同步到集群中的所有节点
资源限制命令 : ulimit、 nproc (用户打开的文件数、进程数等)
Hadoop 版本2.x, dfs.datanode.max.xcievers 同时处理文件个数参数设置
3-1 HBase 安装条件
JDK、SSH、DNS、LoopbackIP、NTP、ulimit、zookeeper
3-2 HBase 运行模式
单机模式
分布式模式 (HDFS运行良好需要)
Edit conf/hbase-env.sh config
1. 文件告知 HBase Java 安装路径。
2. HBase 运行环境, Heap Size 有关 JVM 选项
3. 日志文件保存目录、进程优先级等
3-2-1 单机模式
这是 HBase 默认的运行模式, 在单机模式中, HBase 使用本地文件系统, 而不是 HDFS, 所有的服务 和 ZooKeeper 都运行在一个 JVM 中。ZooKeeper 监听一个端口, 这样客户端就可以连接 HBase 了。
配置 JDK
-
HBase 安装 (需修改 hbase-site.xml)
hbase.rootdir 代表 HBase 数据存放的位置 hbase.zookeeper.property.dataDir zk数据存放的位置
-
启动 HBase
bin/start-hbase.sh bin/hbase shell
3-2-2 伪分布式模式
伪分布式模式 (所有进程运行在一台机器上)
编辑 conf/hbase-site.xml, 整个配置会覆盖 HBase 的默认配置(hbase-default.xml)
配置 hbase.rootdir HBase在HDFS中使用的目录位置。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
注意
需要将 localhost 设置成主机名, 其他机器才能访问它
启动 HBase
bin/start-hbase.sh
HMaster...
RegionServer...
3-2-3 分布式模式
分布式模式 整个服务分布在各个节点上
3-3 HBase 的 Web UI
http://node190:60010/
3-4 HBase Shell 使用
命令行工具连接到 HBase
[hdfs@node196 ~]$ hbase shell
16/03/02 14:03:16 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.6-cdh5.3.6, rUnknown, Tue Jul 28 15:19:46 PDT 2015
hbase(main):001:0>
hbase(main):018:0> list 'table'
TABLE
0 row(s) in 0.0050 seconds
=> []
hbase(main):017:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0080 seconds
hbase(main):017:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0080 seconds
hbase(main):017:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0080 seconds
hbase(main):019:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=1456900507721, value=value1
1 row(s) in 0.0070 seconds
hbase(main):021:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1456900507721, value=value1
row2 column=cf:b, timestamp=1456900829731, value=value2
row3 column=cf:c, timestamp=1456900535757, value=value3
3 row(s) in 0.0080 seconds
3-5 停止 HBase 集群
bin/stop-hbase.sh