2022-10-30 398
1、hbase概述
1.1 hbase是什么
hbase是基于hdfs进行数据的分布式存储,具有高可靠、高性能、列存储、可伸缩、实时读写的nosql数据库。
hbase可以存储海量的数据,并且后期查询性能很高,可以实现上亿条数据的查询秒级返回结果。
1.2 hbase表的特性
1、大
2、无模式
3、面向列
4、稀疏
5、数据的多版本
6、数据类型单一
1.3 hbase表的逻辑视图
2、hbase的集群结构
1、client
2、zookeeper
客户端操作hbase表数据需要一个zk集群
作用
1、zk保存了hbase集群的元数据信息
存储 Hbase 的 schema,包括有哪些 table,每个 table 有哪些 column family
2、zk保存所有hbase表的寻址入口
后期通过客户端接口去操作hbase数据的时候,需要连接上zk集群
存贮所有 Region 的寻址入口—-root 表在哪台服务器上
3、通过引入了zk之后,实现了整个hbase集群高可用
4、zk保存了HMaster和HRegionServer它们的注册和心跳信息
后期哪一个HRegionServer挂掉之后,zk也会感知到,然后把这个信息通知给老大HMaster
3、HMaster
它是整个hbase集群老大
作用
1、它接受客户端创建表、删除表的请求。处理 schema 更新请求
2、它会给HRegionServer分配对应的region,进行数据的管理
3、它会把挂掉的HRegionServer所管理的region重新分配给其他的活着的HRegionServer
4、它会实现HRegionServer负载均衡,避免某一个HRegionServer管理的region过多。
4、HRegionServer
它是整合hbase集群的小弟
作用
1、负责管理HMaster老大给它分配的region
2、它会接受到客户端的读写请求
3、它会把在运行过程中,变得过大的region数据进行切分
5、Region
它是整个hbase表中分布式存储的最小单元
它的数据是基于hdfs进行存储
3、hbase集群安装部署
前提条件
1、下载对应的安装包
2、规划安装目录
3、上传安装包到服务器中
4、解压安装包到指定的规划目录
5、重命名解压目录
6、修改配置文件
需要把hadoop安装目录下/etc/hadoop文件夹中
需要把以上2个hadoop的配置文件拷贝到hbase安装目录下的conf文件夹中
1、vim hbase-env.sh
#配置java环境变量
export JAVA_HOME=/export/servers/jdk
#指定hbase集群由外部的zk集群去管理,不在使用自带的zk集群
export HBASE_MANAGES_ZK=false
2、vim hbase-site.xml
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
3、vim regionservers
#指定哪些节点是HRegionServer
node2
node3
4、vim backup-masters
#指定哪些节点是备用的Hmaster
node2
7、配置hbase环境变量
vim /etc/profile
export HBASE_HOME=/export/servers/hbase
export PATH=$PATH:$HBASE_HOME/bin
8、分发hbase目录和环境变量
scp -r hbase node2:/export/servers
scp -r hbase node3:/export/servers
scp /etc/profile node2:/etc
scp /etc/profile node3:/etc
9、让所有hbase节点的环境变量生效
在所有节点上执行
4、hbase集群的启动和停止
1、启动hbase集群
先启动zk和hadoop集群
然后通过hbase/bin
start-hbase.sh
2、停止hbase集群
通过hbase/bin
stop-hbase.sh
hbase集群web管理界面
1、启动好hbase集群之后
访问地址
HMaster主机名:16010
5、hbase shell 命令行操作
hbase/bin/hbase shell 进入到hbase shell客户端命令操作
1、创建一个表
create 't_user_info','base_info','extra_info'
create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
2、查看有哪些表
list
类似于mysql表中sql:show tables
3、查看表的描述信息
describe 't_user_info'
4、修改表的属性
#修改列族的最大版本数
alter 't_user_info', NAME => 'base_info', VERSIONS => 3
5、添加数据到表中
put 't_user_info','00001','base_info:name','zhangsan'
put 't_user_info','00001','base_info:age','30'
put 't_user_info','00001','base_info:address','beijing'
put 't_user_info','00001','extra_info:school','shanghai'
put 't_user_info','00002','base_info:name','lisi'
6、查询表的数据
//按照条件查询
get 't_user_info','00001'
get 't_user_info','00001', {COLUMN => 'base_info'}
get 't_user_info','00001', {COLUMN => 'base_info:name'}
get 't_user_info','00001',{TIMERANGE => [1544243300660,1544243362660]}
get 't_user_info','00001',{COLUMN => 'base_info:age',VERSIONS =>3}
//全表查询
scan 't_user_info'
7、删除数据
delete 't_user_info','00001','base_info:name'
deleteall 't_user_info','00001'
8、删除表
disable 't_user_info'
drop 't_user_info'
6、hbase的内部原理
7、hbase的寻址机制
寻找 RegionServer
-ROOT-表
.META.表
联系 regionserver 查询目标数据
regionserver 定位到目标数据所在的 region,发出查询请求
region 先在 memstore 中查找,命中则返回
如果在 memstore 中找不到,则在 storefile 中扫描(可能会扫描到很多的 storefile—-bloomfilter 布隆过滤器)布隆过滤器可以快速的返回查询的rowkey是否在这个storeFile中, 但也有误差, 如果返回没有,则一定没有,如果返回有, 则可能没有
8、Hbase高级应用
建表
BLOOMFILTER 默认是 Row 布隆过滤器
VSRSIONS 默认是 1 数据版本
COMPRESSION 默认值是 NONE 压缩
disable_all ‘toplist.*’ disable_all 支持正则表达式,并列出当前匹配的表 drop_all也相同
hbase 表预分区—-手动分区
一种可以加快批量写入速度的方法是通过预先创建一些空的 regions,这样当数据写入 HBase时,会按照 region 分区情况,在集群内做数据的负载均衡。减少数据达到 storefile 大小的时候自动分区的
时间消耗,并且还有以一个优势,就是合理设计 rowkey 能让各个 region 的并发请求平均分配(趋于均匀) 使 IO 效率达到最高,
行键设计
列族尽量少, 一般2-3个
rowkey
尽量减少行键和列族的大小在 HBase 中,value 永远和它的 key 一起传输的
HFile中每个cell都会存储rowkey, rowkey过大会影响存储效率
MemStore 将缓存部分数据到内存,如果 rowkey 字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。
建议将 rowkey 的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个 RegionServer,以实现负载均衡的几率。( 盾 )
rowkey矛盾
热点解决
可以用 Long.Max_Value – timestamp 追加到 key 的末尾,例如 [key][reverse_timestamp] ,[key] 的最新值可以通过 scan [key]获得[key]的第一条记录,因为 HBase 中 rowkey 是有序的,第一条记录是最后录入的数据。
总结
以上所述是小编给大家介绍的Hbase入门详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://77isp.com/post/5297.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态