分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生网关 MSE Higress,422元/月
简介: 分布式NoSQL列存储数据库Hbase(一)Hbase的功能与应用场景、基本设计思想

分布式NoSQL列存储数据库Hbase(一)

知识点01:回顾

  1. 离线项目为例
  • 数据生成:用户访问咨询数据、意向用户报名信息、考勤信息
  • 数据采集
  • Flume:实时数据采集:采集文件或者网络端口
  • Sqoop:离线数据同步:采集数据库的数据
  • 数据存储
  • HDFS:分布式离线文件存储系统
  • Hive:离线数据仓库
  • 将HDFS上的文件映射成了表的结构,让用户可以通过数据库和表的形式来管理大数据
  • 数据计算
  • MapReduce+YARN:分布式离线数据计算
  • Hive:通过SQL进行分布式计算
  • 将SQL语句转换为MapReduce程序,提交给YARN运行
  • 数据应用:通过对数据进行分析
  • 提高转化率:访问与咨询转化率、报名转换率
  • 考勤分析:通过考勤分析来把握所有人学习的情况
  1. 离线与实时
  • 离线:数据从产生到最后被使用,时效性比较低,时间比较长
  • 实时:数据从产生到最后被使用,时效性比较高,时间比较短
  • 方向:所有数据的价值会随着时间的流逝,价值会越来越低,希望所有数据都能被实时的计算以及处理
  • 实现实时:所有环节都必须是实时环节
  • 数据生成:实时的
  • 数据采集:实时的,Flume、Canal……
  • 数据存储:实时的,Hbase、Kafka、Redis……
  • 数据计算:实时的,Spark、Flink……
  • 数据应用:实时应用:风控系统、实时推荐、精准分析
  1. 学习知识的逻辑
  • step1:先了解基本的功能与应用场景
  • step2:基本的使用
  • step3:深入了解原理

知识点02:目标

  1. Hbase的功能与应用场景、基本设计思想【重点掌握】
  • 这玩意有什么用?解决什么问题?
  • 这玩意为什么能实现这样的功能?
  • 什么时候需要用这个玩意?
  • 这个玩意中的一些特殊的概念
  1. 搭建Hbase分布式集群环境
  • 分布式架构【重点】

知识点03:HBASE诞生

1、问题

  • 随着大数据的发展,大数据的应用场景越来越多,有了实时性的需求
  • HDFS、MapReduce:都只能实现离线的处理以及计算
  • 想做实时推荐
  • 实时的采集用户的数据,实时分析,根据用户画像给用户推荐合适的商品
  • 实时采集:Flume
  • 实时存储:存储读写的性能在毫秒级别
  • 实时计算:计算处理的性能在毫秒级别

2、需求

  • 需要一项技术能实现大量的数据实时数据读写
  • HDFS已经满足不了:HDFS解决离线大数据存储读写
  • 设计:为了满足怎么存储大数据的问题

3、解决

  • 谷歌的三篇论文
  • GFS:基于文件系统的离线大数据存储平台HDFS
  • MapReduce:基于离线大数据批处理分布式计算平台
  • BigTable:分布式实时随机读写的NoSQL数据库【Chubby】
  • Hbase + Zookeeper
  • 设计:怎么高效的进行大数据读写存储的问题

4、总结

  • Hbase能实现基于海量数据的随机实时的数据存储及读写
  • 与MySQL区别:Hbase实现大数据存储
  • 与HDFS区别:Hbase性能更好,更快

知识点04:Hbase功能及应用场景

Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.
#分布式      可扩展   大数据存储数据库
Use Apache HBase™ when you need random, realtime read/write access to your Big Data. 
#随机的实时的大数据访问
This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- 
#存储非常大的数据表
atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

1、功能

  • Hbase是一个分布式的NoSQL数据库,能实现随机实时的大量数据的读写
  • 大数据存储:分布式 + HDFS
  • 实时数据读写

2、应用场景

  • 电商:实时推荐
  • 金融:实时风控、实时征信统计
  • 交通:实时车辆监控
  • 游戏:实时记录所有操作
  • ……

知识点05:HBASE设计思想

1、问题

  • 对于计算机而言,数据的存储只会在两个地方
  • 内存:读写比较快
  • 硬盘:读写相对慢一些
  • 为什么Hbase可以实现大量数据的实时的读写?
  • 问题1:为什么Hbase能存储大量数据?
  • 问题2:为什么Hbase能读写很快?

2、需求

  • 需求1:必须实现分布式存储,利用多台机器的硬件资源从逻辑上整合为一个整体
  • 类似于HDFS设计思想
  • 需求2:必须实现将数据存储在内存中,读写速度才能很快
  • 为什么HDFS也是分布式,但是慢:HDFS所有的数据是存储在磁盘中

3、实现

  • 实现1:Hbase做了分布式结构,利用多台机器组合成一个整体,多台机器的内存和磁盘进行逻辑合并了
  • 实现2:Hbase优先将数据写入内存,读取数据时,如果数据在内存中,可以被直接读取
  • 新的问题:内存的空间是比较小的,能存储的数据量不大,违背了Hbase能存储大数据吗?
  • 内存的特点:内存容量小、数据易丢失、读写速度快
  • 磁盘的特点:容量空间大、数据相对安全、速度相对慢
  • Hbase如何能实现容量大和速度快的问题?
  • 设计思想:冷热数据分离,实时计算中,对当前最新的数据进行读取处理应用
  • 冷:大概率不会被用到的数据
  • 在实时架构中,已经产生很久的数据
  • 热:大概率会被用到的数据
  • 在实时架构中,刚产生的数据
  • 解决:Hbase将数据写入内存中,如果内存中存储的数据满了,就将内存的数据写入磁盘
  • 热:写内存,大概率的情况下,可以直接从内存中读取
  • 冷:将内存中产生很久的数据写入磁盘中

4、总结

  • 为什么Hbase既能存储大数据,也能很高的性能:冷热数据分离
  • 最新的数据写入内存,大概率也是读内存
  • 构建分布式内存:数据优先写入分布式内存
  • Hbase集群
  • 将老的数据写入磁盘,被读的概率相对较低
  • 构建分布式磁盘:老的数据写入分布式磁盘
  • HDFS集群
  • 新的问题:Hbase数据如何能保证安全?
  • HDFS保证数据安全机制:副本机制,每个数据块存储3份,存储在不同的机器上
  • 内存:本身就是容易丢失的,如果断电
  • 一般内存中数据不能通过副本机制来保证
  • 因为内存空间小、内存都是易丢失的
  • 一般内存的数据安全都选择写WAL的方式来实现的【记住这是保证内存数据安全的方式】
  • 磁盘:Hbase将数据从内存写入HDFS,由HDFS的保障机制来保证磁盘数据安全

知识点06:HBASE中的对象概念

0、NoSQL数据库与RDBMS数据库

  • RDBMS:一般是为了解决数据管理问题
  • 数据安全性高、支持事务特性、数据量比较小、数据相对比较差
  • MySQL、Oracle……
  • 都支持SQL语句,存储固定的行列数据
  • 数据库、表、行、列
  • NoSQL:一般是为了解决性能问题
  • 数据安全性相对没有那么高、不支持完善是事务,数据量比较大、性能比较高
  • Hbase、Redis、MongoDB……
  • 都不支持SQL语句,存储的数据也有固定的格式
  • 每种数据库都有自己的API方式

1、数据库设计

  • NameSpace:命名空间,类似于MySQL中的数据库概念,Namespace中有多张表,Hbase中可以有多个Namespace
  • 直接把它当做数据库来看
  • Hbase自带了两个Namespace
  • default:默认自带的namespace
  • hbase:存储系统自带的数据表
  • 注意
  • Hbase中的每张表都必须属于某一个Namespace,将namespace当做表名的一部分
  • 如果在对表进行读写时,必须加上namespace:tbname方式来引用
  • 例如:namespace叫做itcast,里面有一张表叫做heima
itcast:heima
  • 如果不加namesp引用表的操作,这张表就默认为default的namespace下的表
heima

2、数据表设计

  • Table:表,Hbase中的每张表都必须属于某一个Namespace
  • 注意:在访问表时,如果这张表不在default的namespace下面,必须加上namespace:表名的方式来引用
  • Hbase中的表时分布式结构,写入Hbase表的数据,会分布式存储到多台机器上

知识点07:HBASE中的存储概念

1、数据行设计

  • Rowkey:行健,这个概念是整个Hbase的核心,类似于MySQL主键的概念
  • MySQL主键:可以没有,唯一标记一行、作为主键索引
  • Hbase行健:自带行健这一列【行健这一列的值由用户自己设计】,唯一标识一行,作为Hbase表中的唯一索引
  • Hbase整个数据存储都是按照Rowkey实现数据存储的

2、列族设计

  • ColumnFamily:列族,对除了Rowkey以外的列进行分组,将列划分不同的组中
  • 注意:任何一张Hbase的表,都至少要有一个列族,除了Rowkey以外的任何一列,都必须属于某个列族,Rowkey不属于任何一个列族
  • 分组:将拥有相似IO属性的列放入同一个列族【要读一起读,要写一起写】
  • 原因:划分列族,读取数据时可以加快读取的性能
  • 如果没有列族:找一个人,告诉你这个人就在这栋楼
  • 如果有了列族:找一个人,告诉你这个人在这栋楼某个房间

3、数据列设计

  • Column:列,与MySQL中的列是一样
  • 注意
  • Hbase除了rowkey以外的任何一列都必须属于某个列族,引用列的时候,必须加上列族
  • 如果有一个列族:basic
  • 如果basic列族中有两列:name,age
basic:name
basic:age
  • Hbase中每一行拥有的列是可以不一样的
  • 每个Rowkey可以拥有不同的列

4、版本设计

  • 功能:某一行的任何一列存储时,只能存储一个值,Hbase可以允许某一行的某一列存储多个版本的值的
  • 级别:列族级别,指定列族中的每一列最多存储几个版本的值,来记录值的变化的
  • 区分:每一列的每个值都会自带一个时间戳,用于区分不同的版本
  • 默认情况下查询,根据时间戳返回最新版本的值

5、分布式设计

  • Hbase的表如何实现分布式设计
  • Region:分区,Hbase中任何一张都可以有多个分区,数据存储在表的分区中,每个分区存储在不同的机器上
  • 非常类似于HDFS中Block的概念
  • 划分规则:范围分区
  • HDFS设计
  • 文件夹
  • 文件
  • 划分Block:根据每128M划分一个块
  • 每个Block存储在不同的机器上

  • Hbase设计
  • Namespace
  • Table:分布式表
  • 划分Region/Part
  • 存储在不同的机器上:RegionServer

  • 对比
分布式概念 HDFS Hbase
对象 目录 + 文件 Namespace + Table
分布式 Block Region
划分规则 按照大小划分:128M 按照范围划分

6、概念对比

概念 MySQL Hbase
数据库 DataBase NameSpace
数据表 Table Table【分布式的】
数据分区 - Region
数据行 主键+其他列 Rowkey+其他列
列族 - ColumnFamily
数据列 普通列与对应的值 列【timestamp】与对应的值【支持多版本】

知识点08:HBASE中的按列存储

1、功能

  • Hbase的最小操作单元是列,不是行,可以实现对每一行的每一列进行读写

2、问题

  • Hbase性能很好原因
  • 读写内存
  • 思考问题:依旧存在一定的概率会读HDFS文件,怎么能让读文件依旧很快?
  • 列族的设计:加快数据的读取性能
  • Rowkey构建索引,基于有序的文件数据
  • 按列存储

3、设计

  • MySQL:按行存储,最小的操作单元是行
  • insert:插入一行
  • delete:删除一行
  • ……
  • Hbase:按列存储,最小操作单元是列
  • 插入:为某一行插入一列
  • 读取:只读某一行的某一列的
  • 删除:只删除这一行的某一列

4、举例

  • MySQL中读取数据
  • 查询【id,name,age,addr,phone……100列,每一列10M】:select id from table ;
  • 先找到所有符合条件的行,将整行的数据所有列全部读取:1000M数据
  • 再过滤id这一列:10M
  • Hbase中读取数据
  • 查询【id,name,age,addr,phone……100列,每一列10M】:select id from table ;
  • 直接对每一行读取这一列的数据:10M

5、总结

  • 思想:通过细化了操作的颗粒度,来提高读的性能
  • 如果按行存储:找一个人,告诉你这个人就在这栋楼某个房间的某一排
  • 如果按列存储:找一个人,告诉你这个人在这栋楼某个房间的某一排的某一列

知识点09:HBASE集群架构

1、分布式主从架构

  • Hbase集群:分布式架构集群,主从架构
  • HMaster:主节点:管理节点
  • 负责所有从节点的管理
  • 负责元数据的管理
  • HRegionServer:从节点:存储节点
  • 负责存储每张表的数据:Region
  • Region存储在RegionServer中
  • 对外提供Region的读写请求
  • 用于构建分布式内存:每台RegionServer有10GB内存存储空间,100台RegionServer
  • Hbase可以存储的总内存空间:1000G
  • 数据写入Hbase,先进入分布式内存

2、HDFS的设计

  • 如果HRegionServer的内存达到一定阈值,就会将内存中的数据写入HDFS,实现数据持久化存储
  • 用于存储冷数据的:大部分的数据都在HDFS中

3、Zookeeper的设计

  • Zookeeper在大数据工具中的作用
  • 功能一:用于存储元数据:Hbase、Kafka……
  • 功能二:用于解决主节点的单点故障问题HA,辅助选举Active的Master

知识点10:集群部署【自己部署】

1、解压安装

  • 上传HBASE安装包到第一台机器的/export/software目录下
cd /export/software/
  • 解压安装
tar -zxvf hbase-2.1.0.tar.gz -C /export/server/
cd /export/server/hbase-2.1.0/

2、修改配置

  • 切换到配置文件目录下
cd /export/server/hbase-2.1.0/conf/
  • 修改hbase-env.sh
#28行
export JAVA_HOME=/export/server/jdk1.8.0_241
#125行
export HBASE_MANAGES_ZK=false
  • 修改hbase-site.xml
cd /export/server/hbase-2.1.0/
mkdir datas
vim conf/hbase-site.xml
<property >
    <name>hbase.tmp.dir</name>
    <value>/export/server/hbase-2.1.0/datas</value>
  </property>
    <property >
    <name>hbase.rootdir</name>
    <value>hdfs://node1:8020/hbase</value>
  </property>
  <property >
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node1:2181,node2:2181,node3:2181</value>
  </property>
  • 修改regionservers
vim conf/regionservers
node1
node2
node3
  • 配置环境变量
vim /etc/profile
#HBASE_HOME
export HBASE_HOME=/export/server/hbase-2.1.0
export PATH=:$PATH:$HBASE_HOME/bin
source /etc/profile

3、分发启动

  • 分发
cd /export/server/
scp -r hbase-2.1.0 node2:$PWD
scp -r hbase-2.1.0 node3:$PWD
  • 启动
  • step1:启动HDFS
start-dfs.sh
  • step2:启动ZK
/export/server/zookeeper-3.4.6/bin/start-zk-all.sh
#!/bin/bash
ZK_HOME=/export/server/zookeeper-3.4.6
for number in {1..3}
do
        host=node${number}
        echo ${host}
        /usr/bin/ssh ${host} "cd ${ZK_HOME};source /etc/profile;${ZK_HOME}/bin/zkServer.sh start"
        echo "${host} started"
done
  • step3:启动Hbase
start-hbase.sh
  • 关闭
stop-hbase.sh

4、测试

  • 访问Hbase Web UI
node1:16010
Apache Hbase 1.x之前是60010,1.x开始更改为16010
CDH版本:一直使用60010

5、搭建Hbase HA

  • 关闭Hbase所有节点
stop-hbase.sh
  • 创建并编辑配置文件
vim conf/backup-masters
node2
  • 启动Hbase集群

6、测试HA

  • 启动两个Master,强制关闭Active Master,观察StandBy的Master是否切换为Active状态
  • 【测试完成以后,删除配置,只保留单个Master模式】

知识点11:集群部署【导入虚拟机】

  • 参考虚拟机导入文档,实现虚拟机导入配置
  • 所有软件的安装目录
/export/server

知识点12:HBASE集群测试

1、启动Hbase Shell

hbase shell

2、查看帮助命令

help

3、创建NameSpace

create_namespace 'itcast'

4、创建Table

create 'itcast:heima',{NAME =>'cf1',VERSIONS=> 3},{NAME =>'cf2'}

5、插入数据

#往itcast:heima表中的这一行20210301_001中插入一列cf1列族下,插入name这一列,列的值为laoda
put  表名       rowkey    列族:列    值
put 'itcast:heima','20210301_001','cf1:name','laoda'
put 'itcast:heima','20210301_001','cf1:age',20
put 'itcast:heima','20210301_001','cf2:phone','110'
put 'itcast:heima','20210201_002','cf1:name','laoer'
put 'itcast:heima','20210201_002','cf2:phone','120'
put 'itcast:heima','20210301_003','cf1:name','laosan'

6、查询数据

scan 'itcast:heima'

练习作业

1、简答题

  • 简述Hbase的功能、应用场景及其设计思想
  • 简述NameSpace、Table、Rowkey、ColumnFamily、VERSIONS概念的含义及与MySQL中概念的区别
  • 简述Hbase集群的架构组成及角色功能

2、操作题

创建Table

create 'itcast:heima',{NAME =>'cf1',VERSIONS=> 3},{NAME =>'cf2'}

5、插入数据

#往itcast:heima表中的这一行20210301_001中插入一列cf1列族下,插入name这一列,列的值为laoda
put  表名       rowkey    列族:列    值
put 'itcast:heima','20210301_001','cf1:name','laoda'
put 'itcast:heima','20210301_001','cf1:age',20
put 'itcast:heima','20210301_001','cf2:phone','110'
put 'itcast:heima','20210201_002','cf1:name','laoer'
put 'itcast:heima','20210201_002','cf2:phone','120'
put 'itcast:heima','20210301_003','cf1:name','laosan'

6、查询数据

scan 'itcast:heima'

练习作业

1、简答题

  • 简述Hbase的功能、应用场景及其设计思想
  • 简述NameSpace、Table、Rowkey、ColumnFamily、VERSIONS概念的含义及与MySQL中概念的区别
  • 简述Hbase集群的架构组成及角色功能

2、操作题

  • 基于知识点11,导入虚拟机并测试Hbase集群读写成功


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
15天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
66 15
|
1月前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
48 2
|
1月前
|
NoSQL Java API
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
本文详细解析了分布式锁的实现原理与应用场景,包括线程锁、进程锁和分布式锁的区别,以及分布式锁的四种要求和三种实现方式(数据库乐观锁、ZooKeeper、Redis)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
|
2月前
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
126 2
|
2月前
|
存储 SQL NoSQL
数据库技术深度探索:从关系型到NoSQL的演变
【10月更文挑战第21天】数据库技术深度探索:从关系型到NoSQL的演变
86 1
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
2天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
10 3
|
2天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
13 3
|
2天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
18 2