起源
早期需求:能实现大量数据的存储和计算。(能实现即可)
现在需求:大数据要达到一个实时应用的效果,实时推荐系统、实时监控、机器学习
规则:数据的价值会随着时间而逐渐流失,要想追求数据价值的最大化,必须构建实时。
实时采集:Flume、Canal
实时存储:Kafka
实时计算:Flink、StructStreaming
实时应用:Redis【数据量小】、Hase【数据量大】
ps :一般分布式架构会采用下面两种:
(1)Lambda 架构:离线、实时、服务层
(2)Kappa架构:实时
Hbase :Hadoop database 的简称
Google :前三篇论文(谷歌的 21 世纪的前三驾马车):
GFS : HDFS
MapReduce :MapReduce
BigTable【Chubby】: Hbase + Zookeeper
官网链接:
https://hbase.apache.org/
官网介绍:
当您需要对大数据进行随机、实时的读/写访问时,请使用 Apache HBase™。该项目的目标是在商用硬件集群上托管非常大的表——数十亿行 X 数百万列。Apache HBase 是一个开源、分布式、版本化、非关系型数据库,模仿 Google 的Bigtable: Chang 等人的结构化数据的分布式存储系统。正如 Bigtable 利用 Google 文件系统提供的分布式数据存储一样,Apache HBase 在 Hadoop 和 HDFS 之上提供了类似 Bigtable 的功能。
小结:
(1)应用场景:当你需要随机地实时地读写访问你的大数据的时候
(2)可以基于一个通用化的集群来实现管理一个大表
(3)特点:开源、分布式、多版本、非关系型,基于 HDFS
问题0:HDFS 明明是一个离线分布式文件系统, Hbase 基于 HDFS 实现存储,那为什么 Hbase 能实现实时呢?
写:只写分布式内存
读:先读内存,如果内存中没有,就读HDFS,通过很多的设计保证读HDFS也很快。这些设计包含但不限于以下几种方式:
(1)索引:基于索引加快查询
(2)分区:按照一定规则存储文件的数据,可以基于规则快速定位在哪个文件中
(3)二进制文件
(4)缓存机制
简单介绍
定义:分布式的实时随机的大数据读写的NoSQL数据库系统
(1)可扩展的大数据存储:分布式
(2)随机实时的访问大数据:基于内存存储
功能:提供分布式的实时随机的大数据持久性存储【读写】
(不适合做缓存。像 Redis 做读缓存、Kafka 做写缓存,而 Hbase 是做持久性存储)
应用:大数据量、高并发、高性能的结构化数据列存储【读写】
· 电商:订单
· 交通:实时监控、实时车辆轨迹
· 金融:交易信息
· 工作:
(1)实时:可以用于实时处理中间结果的存储、实时计算的最终结果的存储【数据量大】;
(2)离线:用于离线系统中与Hive集成,将Hive表的数据存储在Hbase,提升查询性能
问题1:为什么Hbase读写速度比较快?
· Hbase使用内存提供数据存储和读写;
问题2: 为什么Hbase 可以支持大数据量?
· Hbase 基于分布式磁盘来存储和读写:直接依赖于 HDFS
核心思想:
数据存储:分布式内存+分布式磁盘
问题:写入数据的时候,到底是写内存还是写磁盘呢?
应用场景:实时,数据一产生写入,就立即要被读取计算
· 刚产生的数据:大概率需要用到的数据;
· 已经产生很久的数据:大概率很少会用到【冷热分离】
思想:将刚产生的数据写入分布式内存,内存存储达到一定阈值,将内存中的数据写入分布式磁盘。
写:只写内存,内存如果达到阈值,自动将内存的数据写入磁盘
读:先读内存,实时场景下,刚写入就会被读取,读写只经过内存,速度很快
Hbase 与 HDFS 有什么区别?
HDFS:分布式文件系统【文件】、离线、分布式磁盘、大数据量永久性存储
Hbase:分布式NoSQL数据库【表】、实时、分布式内存+分布式磁盘【HDFS】、大数据量永久性存储
Hbase 与 MySQL 有什么区别?
· Hbase : NoSQL【非关系型】,不支持SQL语句,仅支持单行事务操作,分布式存储,存储是结构化和半结构化数据【每一行拥有不同的列】,不支持join,面向列【最小操作单元】的NoSQL数据库
面向列存储工具:最小操作单元为列
每一行的列可以不固定,不同的行可以拥有不同的列
实现:物理层是怎么实现的?实际上,Hbase表中的每一列对应一个KeyValue,而每一行对应多个KeyValue
# Hbase 中行是逻辑的概念,对应着物理上的多行,有几列就有几行
# Hbase 中列是逻辑的概念,对应着物理上的的一行,是一个 KV
K V
表名+行号+id 1
表名+行号+name laoda
表名+行号+age 18
· MySQL:RDBMS【关系型】,支持SQL语句,支持多行事务操作,中心化存储,存储主要是以结构化数据为主,支持join,面向行【最小操作单元】的数据库
面向行存储工具:最小操作单元为行
每一行的列都是固定的,哪怕这一行的列没有值,它有这一列,默认为null。
Hbase 与 Hive 有什么区别?
共性:底层都基于HDFS,都做为 Hadoop 系列的存储
Hbase:基于 Hadoop 的软件,数据库工具,hbase 是NoSQL存储容器,延迟性较低,接入在线实时业务
Hive :基于 Hadoop 的软件,数仓工具,Hive 延迟较高,接入离线业务,用于OLAP 操作.
Hbase中的对象概念
Hbase中的数据库概念 NameSpace
NameSpace:命名空间,等同于数据库的的Database的概念
Hbase 中的任何一张表都必须属于某个NameSpace
使用:Hbase 没有切换 NameSpace的命令,访问所有表只能使用Namespace:TableName方式来访问表
· MySQL : 访问一张表,有两种方式
方式一:先切换数据库:user dbname; 再访问表:select * from tbname;
方式二:绝对路径访问:select * from dbname.tbname
· Hbase:只支持绝对路径访问
scan nsname:tbname
理解:把Namespace当做表名的前缀来看,只要访问表名必须加ns
特例:Hbase 中默认自带了一个 default 的数据库,如果访问这个数据库中的表不用加,可以直接给表名
Hbase中表的概念Table
概念:表的概念,等同于数据库中的表的概念
使用:
Hbase中的表是分布式的:表的数据分布式存储在不同的机器上
· 数据存在表中,Hbase 是分布式存储
· Hbase 的表是一个分布式逻辑对象:一个表可以划分多个分区Region存储,默认情况下一张表只有一个分区
· 写入这张表的数据根据分区规则写入不同的分区
类似于HDFS中的文件,类似于Kafka的 topic
· Hase是分布式存储【读写】,读写是操作表
小结:
(1)Hbase 功能:分布式的基于Hadoop的NoSQL数据库,提供大数据量的持久性存储,以及分布式实时、随机的大数据量的读写
(2)场景:大数据量实时数据读写,目前实时场景中用于存储实时处理的数据;离线场景中搭配 Hive 来实现,提高离线的性能。
(3)设计:分布式大数据量实时数据读写、面向列存储
大数据量怎么能提供实时?基于HDFS来实现大数据量,基于分布式内存来提供实时效果
读写到底读HDFS还是内存?写只写内存【进程内存】,内存达到阈值刷写到HDFS,读先读内存,内存没有再读HDFS。【为了保证内存数据的安全性,Hbase会在写数据到内存的过程中,同时构建内存操作日志,类似于 Redis 的AOF,也类似于HDFS的 edits 文件,以及MySQL的binlog】
面向列存储:Hbase中数据表的最小操作单元为列。本质上表的列是逻辑的,物理上每一列就是一个KV.
网友评论