一、HBase简介
(一)Hadoop
- 核心
HDFS分布式存储、MapReduce分布式计算、Yarn资源调度和管理 - 局限性
批量处理(MR)、顺序访问数据(HDFS) 查找数据是必须搜索整个数据集,效率很低
(二)HBase
- HBase是BigTable的开源java版本,建立在hdfs之上,分布式、列存储、支持实时读写、nosql(k-v)的数据库
- 结构:主键(rowKey)、timestamp(时间戳)、column family(列簇)和column(列)
- HBase仅能通过主键(rowkey)和主键的范围(range)检索数据
- 可以存储结构化和半结构化的数据
- HBase中所有的数据用字节数组byte[]来进行存储
- 可以横向扩展,可以不断的增加服务器来提高存储能力,从而实现海量存储
- 数据量很大,可以有十几亿行,几百万列
- 面向列存储
- 稀疏存储(稀疏矩阵:非零元素很少的矩阵,利用三元组(行,列,值)存储非零元素,0元素不存储)
(三)HBase的应用场景
- 对象存储(oss)
新闻、网页、图片、视频等,例如阿里云oss - 时序数据
每个数据都带有时间戳叫做时序数据,比如记录传感器的数据 - 推荐画像
用户画像的数据其实就是一个比较大的稀疏矩阵,比如蚂蚁金服的风控系统 - Olap
在线联机分析系统 注:oltp(在线事务分析系统,建立在关系数据库之上的,支持回滚) - Feeds流
典型的应用就是微信朋友圈类似的应用,发布新内容,对新内容进行点赞评论 - 爬虫数据的存储
(四)HBase的特点
-
强一致性读/写 CAP原则 -
自动分块 通过Region分布在集群上 -
自动故障转移 -
Hadoop/HDFS集成 -
MapReduce -
Java API
(五)HBase的发展过程
(六)RDBMS和HBase的比较
- RDBMS
- RDBMS(关系数据库管理系统,mysql、sqlserver、Oracle)
- 数据库以表的形式独立存在
- 支持FAT(dos)、NTFS(windows)、NXT(linux)
- 主键(primary key)
- 分库分表
- 行、列、单元格
- 支持向上扩展
- 使用sql(增删改查)
- 面向行
- acid特性
- 结构化的数据(二维表格)
- 支持事务(transaction)
- 支持join(连接,全连接、自然连接、左连接、右连接)
- 中心化
- HBase
- 以表的形式存在
- 支持HDFS
- 使用行键(rowkey)
- 分布式存储
- 支持向外扩展
- 使用api和mapreduce、spark、flink来访问HBase表数据
- 面向列
- 不支持acid,但是遵循cap原则
- 结构化和非结构化数据
- 不支持事务
- 不支持join
- 分布式
(七)HBase和HDFS的对比
- HDFS
- 分布式
- 存储系统,不是一个文件系统,无法快速的查询数据
- HBase
- 建立在hdfs上,为大型表提供快速查找和更新
- HBase在hdfs上建立了storefiles的索引,进行快速查询
(八)HBase和Hive的对比
- Hive
- 数据仓库工具:Hive的本质就是相当于将hdfs的文件在mysql中做了一个一一对应的映射关系,以方便HQL(类sql)进行数据的管理
- 用于数据分析、清洗等;适用于离线数据,延迟很高
- 基于HDFS和MapReduce:Hive数据存储在hdfs的DataNode上,HQL转换为MapReduce程序执行
- HBase
- NoSql:面向列的非关系型数据库
- 用于存储结构化和非结构化数据
- 基于hdfs:HBase的存储文件Hfile存放在DataNode上,被RegionServer以region(分区)的形式进行管理
- 延迟较低,适合于olap(实时的在线业务,如天猫双十一实时成交额大屏展示)
- 总结
- Hive和HBase是两种基于Hadoop的不同技术
- Hive是一种类sql的引擎,并运用mapreduce执行任务
- Hbase是一种nosql的key/value数据库,可以使用spark或flink高速执行任务
- 两者可以同时使用,用hive进行统计查询,hbase进行实时查询,数据可以在两者之间进行转换
(九)NoSql非关系型数据库
- Sql数据库:增(insert into)删(delete from)改(update set)查(select)mysql、Oracle、sqlserver
- NoSql:not only sql(不仅仅是sql),key/value格式的数据库,redis(高速缓存比如秒杀抢购)、memcache、mongodb、hbase
二、HBase集群搭建
(一)HBase下载并安装
- 官网下载
百度搜索hbase 点击download,选择自己需要的版本,本次安装选择版本2.4.10 - 上传到服务器
- 解压
tar -xzvf hbase-2.4.10-bin.tar.gz -C ../servers/
- 配置环境变量
- 使环境变量起作用
source /etc/profile
- 测试
说明配置成功 - 修改配置文件
- hbase-env.sh
修改jdk的路径 修改不适用hbase自己的zookeeper,使用外部的zookeeper - hbase-site.xml
- regionservers
- 分发文件
scp -r hbase-2.4.10/ hadoop02:$PWD
scp -r hbase-2.4.10/ hadoop03:$PWD
scp /etc/profile hadoop02:/etc
scp /etc/profile hadoop03:/etc
(二)启动
- 启动hadoop
- 启动zookeeper
- 启动hbase
start-hbase.sh
4. 查看进程
(三)HBase的web UI查看
(四)HBase shell的测试
问题:出现乱码 解决:添加选项{FORMATTER => ‘toString’}
观察hdfs上文件信息,hbase的数据都储存在hdfs上
(五)各种角色服务器参考的硬件配置
推荐:
- Master服务器要运行NN、RM、HM,推荐内存24GB以上
- Slave服务器要运行DN、NM、HR,推荐内存24GB以上
- 根据cpu的核心数来选择在某个节点上运行的进程数,例如,两个4核cpu=8核,每个java进程都可以独立占用一个核
三、HBase原理和数据模型
(一)概述
在hbase中,数据储存在行和列的表中,可以把表看作是多个维度的map(k-v)结构
(二)术语
- 表(table)
- hbase中数据都是以表的形式来组织的
- hbase中的表由多行(几十亿)组成
- 行(rowkey)
- hbase中的行由一个行键(rowkey)和一个或多个列组成
,列的值与rowkey和列关联 - hbase中存在储存时按行键以字典顺序排列
- 行键的排列非常重要
-
列(column) hbase中列由列簇(column famliy)和列名组成,构成列限定符 -
列簇(column family)
- 处于性能的考虑,列簇将一组列及其值组织在一起
- 每个列簇都有一组存储属性,比如是否储存在内存、数据是否被压缩及使用的编码等等
-
- 列限定符
- 列簇中包含一个个的列限定符
- 不同的行可能会存储不同的列限定符
- 单元格
- 单元格是行、列簇和列限定符的组合
- 包含一个值和时间戳(表示该值的版本)
- 单元格的内容以二进制存储即字节数组(byte[])
|