赞
踩
离线项目为例
离线与实时
学习知识的逻辑
step1:先了解基本的功能与应用场景
step2:基本的使用
step3:深入了解原理
Hbase的功能与应用场景、基本设计思想【重点掌握】
搭建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.
Hbase是一个分布式的NoSQL数据库,能实现随机实时的大量数据的读写
大数据存储:分布式 + HDFS
实时数据读写
为什么Hbase既能存储大数据,也能很高的性能:冷热数据分离
最新的数据写入内存,大概率也是读内存
将老的数据写入磁盘,被读的概率相对较低
新的问题:Hbase数据如何能保证安全?
RDBMS:一般是为了解决数据管理问题
NoSQL:一般是为了解决性能问题
数据安全性相对没有那么高、不支持完善是事务,数据量比较大、性能比较高
Hbase、Redis、MongoDB……
都不支持SQL语句,存储的数据也有固定的格式
每种数据库都有自己的API方式
NameSpace:命名空间,类似于MySQL中的数据库概念,Namespace中有多张表,Hbase中可以有多个Namespace
直接把它当做数据库来看
Hbase自带了两个Namespace
注意
Hbase中的每张表都必须属于某一个Namespace,将namespace当做表名的一部分
如果在对表进行读写时,必须加上namespace:tbname方式来引用
例如:namespace叫做itcast,里面有一张表叫做heima
itcast:heima
如果不加namesp引用表的操作,这张表就默认为default的namespace下的表
heima
Table:表,Hbase中的每张表都必须属于某一个Namespace
注意:在访问表时,如果这张表不在default的namespace下面,必须加上namespace:表名的方式来引用
ColumnFamily:列族,对除了Rowkey以外的列进行分组,将列划分不同的组中
注意:任何一张Hbase的表,都至少要有一个列族,除了Rowkey以外的任何一列,都必须属于某个列族,Rowkey不属于任何一个列族
分组:将拥有相似IO属性的列放入同一个列族【要读一起读,要写一起写】
原因:划分列族,读取数据时可以加快读取的性能
如果没有列族:找一个人,告诉你这个人就在这栋楼
如果有了列族:找一个人,告诉你这个人在这栋楼某个房间
Column:列,与MySQL中的列是一样
注意
Hbase除了rowkey以外的任何一列都必须属于某个列族,引用列的时候,必须加上列族
basic:name
basic:age
Hbase中每一行拥有的列是可以不一样的
功能:某一行的任何一列存储时,只能存储一个值,Hbase可以允许某一行的某一列存储多个版本的值的
级别:列族级别,指定列族中的每一列最多存储几个版本的值,来记录值的变化的
区分:每一列的每个值都会自带一个时间戳,用于区分不同的版本
Hbase的表如何实现分布式设计
Region:分区,Hbase中任何一张都可以有多个分区,数据存储在表的分区中,每个分区存储在不同的机器上
HDFS设计
Hbase设计
对比
分布式概念 | HDFS | Hbase |
---|---|---|
对象 | 目录 + 文件 | Namespace + Table |
分布式 | Block | Region |
划分规则 | 按照大小划分:128M | 按照范围划分 |
概念 | MySQL | Hbase |
---|---|---|
数据库 | DataBase | NameSpace |
数据表 | Table | Table【分布式的】 |
数据分区 | - | Region |
数据行 | 主键+其他列 | Rowkey+其他列 |
列族 | - | ColumnFamily |
数据列 | 普通列与对应的值 | 列【timestamp】与对应的值【支持多版本】 |
思想:通过细化了操作的颗粒度,来提高读的性能
如果按行存储:找一个人,告诉你这个人就在这栋楼某个房间的某一排
如果按列存储:找一个人,告诉你这个人在这栋楼某个房间的某一排的某一列
Hbase集群:分布式架构集群,主从架构
HMaster:主节点:管理节点
HRegionServer:从节点:存储节点
如果HRegionServer的内存达到一定阈值,就会将内存中的数据写入HDFS,实现数据持久化存储
用于存储冷数据的:大部分的数据都在HDFS中
上传HBASE安装包到第一台机器的/export/software目录下
cd /export/software/
解压安装
tar -zxvf hbase-2.1.0.tar.gz -C /export/server/
cd /export/server/hbase-2.1.0/
切换到配置文件目录下
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
分发
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
访问Hbase Web UI
node1:16010
Apache Hbase 1.x之前是60010,1.x开始更改为16010
CDH版本:一直使用60010
关闭Hbase所有节点
stop-hbase.sh
创建并编辑配置文件
vim conf/backup-masters
node2
启动Hbase集群
启动两个Master,强制关闭Active Master,观察StandBy的Master是否切换为Active状态
【测试完成以后,删除配置,只保留单个Master模式】
参考虚拟机导入文档,实现虚拟机导入配置
所有软件的安装目录
/export/server
hbase shell
help
create_namespace 'itcast'
create 'itcast:heima',{NAME =>'cf1',VERSIONS=> 3},{NAME =>'cf2'}
#往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'
scan 'itcast:heima'
创建Table
create 'itcast:heima',{NAME =>'cf1',VERSIONS=> 3},{NAME =>'cf2'}
#往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'
scan 'itcast:heima'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。