小白学hadoop日记day14——hbase

1 hbase的来源
1、hdfs的数据读写延迟高
2、不能近实时更新删除局部数据
3、hive的数据必须要指定的列或者字段,必须要格式化的数据。
4、hbase来源于google的bigtable。
2 hbase的定义
Hbase是一个基于Hadoop的开源, 分布式的,多版本的,可扩展的,非关系型数据库,能够处理海量数据(数十亿行和百万列)。
Hbase特点

habse类似于:Redis、clickhouse、mongoDB、canssdra等。uid  <name:zs,age:18,score:22>
- HBase的表模型与关系型数据库的表模型不同:
- HBase的表没有固定的字段定义;
- HBase的表中每行存储的都是一些key-value对
- HBase的表中有列簇的划分,用户可以指定将哪些kv插入哪个列族
- HBase的表在物理存储上,是按照列簇来分割的,不同列簇的数据一定存储在不同的文件中
- HBase的表中的每一行都固定有一个行键,而且每一行的行键在表中不能重复
- HBase中的数据,包含行键,包含key,包含value,都是byte[ ]类型,HBase不负责为用户维护数据类型
- HBase对事务的支持很差
- HBase支持稀疏存储
HBase的表数据存储在HDFS文件系统中。
从而,hbase具备如下特性:存储容量可以线性扩展; 数据存储的安全性可靠性极高!
- hbase的表模型跟mysql之类的关系型数据库的表模型差别巨大
- hbase的表模型中有:行的概念;但没有字段的概念
- 行中存的都是key-value对,每行中的key-value对中的key可以是各种各样,每行中的key-value对的数量也可以是各种各样
3 hbase的表模型
1、一个表,有表名
2、一个表可以分为多个列簇(不同列簇的数据会存储在不同文件中)。列簇一般1-2个即可。
3、表中的每一行有一个“行键rowkey”,而且行键在表中不能重复(重复之后会覆盖,比如更新数据行键一定会重复)。类似于mysql中的主键。
4、表中的每一对kv数据称作一个cell
5、hbase可以对数据存储多个历史版本(历史版本数量可配置)
6、整张表由于数据量过大,会被横向切分成若干个region(用rowkey范围标识),不同region的数据也存储在不同文件中
7、hbase会对插入的数据按顺序存储:
 7.1要点一:首先会按行键排序
 7.2要点二:同一行里面的kv会按列簇排序,再按k排序
- hbase中只支持byte[]
- 此处的byte[] 包括了: rowkey,key,value,列簇名,表名
- HBase基于hadoop : HBase的存储依赖于HDFS

image-20210714112442704

4 Hbase架构
架构图示


组件说明
- Client : hbase客户端,1.包含访问hbase的接口。比如,linux shell,java api。2.除此之外,它会维护缓存来加速访问hbase的速度。比如region的位置信息。
- Zookeeper : 1.监控Hmaster的状态,保证有且仅有一个活跃的Hmaster达到高可用。2.它可以存储所有region的寻址入口。如:root表在哪一台服务器上。3. 实时监控HregionServer的状态,感知HRegionServer的上下线信息,并实时通知给Hmaster。4. 存储hbase的部分元数据。
- HMaster : 1. 为HRegionServer分配Region(新建表等)。2. 负责HRegionServer的负载均衡。3. 负责Region的重新分配(HRegionServer宕机之后的Region分配,HRegion裂变:当Region过大之后的拆分)。4. Hdfs上的垃圾回收。5. 处理schema的更新请求
- HRegionServer :1. 维护HMaster分配给的Region(管理本机的Region)。2. 处理client对这些region的读写请求,并和HDFS进行交互。3. 负责切分在运行过程中组件变大的Region。
- HLog : 1. 对HBase的操作进行记录,使用WAL写数据,优先写入log(put操作:先写日志再写memstore,这样可以防止数据丢失,即使丢失也可以回滚)。
- HRegion : 1. HBase中分布式存储和负载均衡的最小单元,它是表或者表的一部分。
- Store : 1. 相当于一个列簇
- Memstore : 1. 内存缓冲区,用于将数据批量刷新到hdfs中,默认大小为128M
- HStoreFile : 1.不过是一个逻辑概念。HBase中的数据是以HFile存储在Hdfs上。
组件之间的关系

hmaster:hregionserver=1:*
hregionserver:hregion=1:*
hregionserver:hlog=1:1
hregion:hstore=1:*
store:memstore=1:1
store:storefile=1:*
storefile:hfile=1:1


术语
rowkey:行键,和mysql的主键同理,不允许重复。
columnfamily: 列簇,列的集合之意。
column:列
timestamp:时间戳,默认显示最新的时间戳,可用于控制k对应的多个版本值,默认查最新的数据
version:版本号,表示记录数据的版本
cell:单元格,kv就是cell
模式:无
数据类型:只存储byte[]
多版本:每个值都可以有多个版本
列式存储:一个列簇存储到一个目录
稀疏存储:如果一个kv为null,不占用存储空间

5 全分布式部署
系统版本:
centOS7.7
HBASE版本:apache-hbase-1.3.6
HADOOP版本:apache-hadoop-2.7.6
JDK版本:jdk-1.8.0_45
单机安装/伪分布式:1台服务器全分布式:3台服务器
全分布式

[root@hadoop01 ~]# tar -zxvf /home/hbase-1.3.6-bin.tar.gz -C /usr/local/
[root@hadoop01 ~]# vi /etc/profile
#my settings
export JAVA_HOME=/usr/local/jdk1.8.0_152/
export HADOOP_HOME=/usr/local/hadoop-2.7.6/
export HIVE_HOME=/usr/local/hive-2.3.7/
export SQOOP_HOME=/usr/local/sqoop-1.4.7/
export HBASE_HOME=/usr/local/hbase-1.3.6/
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SQOOP_HOME/bin:$HBASE_HOME/bin:

[root@hadoop01 ~]# source /etc/profile
[root@hadoop01 ~]# which hbase
/usr/local/hbase-1.3.6/bin/hbase

配置hbase-env.sh

[root@hadoop01 hbase-1.3.6]# vi ./conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_152/

配置hbase-site.xml

<configuration>
    <!-- 指定hbase在HDFS上存储的路径 -->      
    <property>   
        <name>hbase.rootdir</name>                            
        <value>hdfs://hadoop01:8020/hbase</value>            
    </property>
    <!-- 指定hbase是分布式的 --> 
    <property>
        <name>hbase.cluster.distributed</name>          
        <value>true</value>              
    </property>
    <!-- 指定zk的地址,多个用“,”分割 -->     
    <property>
        <name>hbase.zookeeper.quorum</name>           
        <value>hadoop01,hadoop02,hadoop03</value>
    </property>
</configuration>

配置regionservers

hadoop01
hadoop02
hadoop03

配置backup-masters

先创建backup-masters文件

决定你的其他备份的hmasteer启动在什么服务器上。可以写多个,多个换行即可。

hadoop02

分发到hadoop02和03上

[root@hadoop01 hbase-1.3.6]# rm -rf ./docs/
[root@hadoop01 hbase-1.3.6]# scp -r ../hbase-1.3.6/ hadoop02:/usr/local/
[root@hadoop01 hbase-1.3.6]# scp -r ../hbase-1.3.6/ hadoop03:/usr/local/
[root@hadoop01 hbase-1.3.6]# scp -r /etc/profile hadoop02:/etc/
[root@hadoop01 hbase-1.3.6]# scp -r /etc/profile hadoop03:/etc/
[root@hadoop02 ~]# source /etc/profile
[root@hadoop03 ~]# source /etc/profile

i启动hbase
1、保证hadoop和zookeeper提前启动好
2、[root@hadoop01 hbase-1.3.6]# start-hbase.sh
3、查看每台服务器的jps:

1888 QuorumPeerMain
2438 ResourceManager
2822 HMaster
2090 NameNode
2284 SecondaryNameNode
3373 Jps
2943 HRegionServer
4、查看hbase的hmaster的web端口 16010
http://hadoop01:16010
5、出错再habse的按照目录下的logs查看日志。

连接hbase

进入目录 /usr/local/hbase-1.3.6/bin 下
[root@qianfeng01 bin]# hbase shell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值