Hbase-优化
hbase
google: gfs -》 hdfs
mapreduce -》 mapreduce
bigtable -》 hbase
Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储。
当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™。该项目的目
标是托管非常大的表 - 数十亿行X百万列 - 在商品硬件集群上。Apache HBase是一
个开源的,分布式的,版本化的非关系数据库nosql,模仿Google的Bigtable: Cha
ng等人的结构化数据分布式存储系统。正如Bigtable利用Google文件系统提供的分布
式数据存储一样,Apache HBase在Hadoop和HDFS之上提供类似Bigtable的功能。
hbase集群角色
hdfs:NameNode datanode
yarn:ResourceManager NodeManager
hbase:HMaster RegionServer
主从结构
HMaster:对RegionServer监控
处理一些元数据的变更
对RegionServer进行故障转移
空闲时对数据进行负载均衡
对region进行管理
发布位置到客户端借助于zookeeper
RegionServer:存储hbase实际的数据
刷新缓存数据到hdfs
处理Region
可以进行压缩
对Hlog进行维护
对region分片
hbase集群安装部署
1)需要安装好zookeeper集群
2)需要安装好hadoop集群
hdfs
yarn
3)解压hbase压缩包
tar -zxvf hbase.tar.gz
4)修改配置hbase-env.sh
export JAVA_HOME=
export HBASE_MANAGES_ZK=false
5)配置hive-site.xml
见笔记文件
6)解决依赖问题
见笔记文件
7)软连接core-site.xml hdfs-site.xml
ln -s /root/hd/hadoop-2.8.4/etc/hadoop/hdfs-site.xml
ln -s /root/hd/hadoop-2.8.4/etc/hadoop/core-site.xml
8)访问ui界面
http://192.168.20.101:16010/master-status
hbase设计架构
Rowkey行键 类似 id
列式存储
hbase操作
1)查看表操作
list
2)显示当前服务器状态
status 'hd-01'
1 active master, 0 backup masters, 4 servers, 0 dead, 0.5000 ave
rage load
1 active master:一个存活的master
0 backup masters:0个备份master
4 servers:r个regionserver
0 dead:没有挂掉的
0.5000 average load:平均加载
3)显示当前用户
whoami
4)创建表
create '表名','列族'
5)添加数据
put '表名','rowkey','列族:列','值'
6)全表扫描
scan '表名'
7)hbase没有修改,只有覆盖
put 'lovereba','1011','info1:name','mimi'
只要对应上表名、rowkey、列族、列即可
8)查看表结构
describe 'lovereba'
9)变更表结构信息
alter 'lovereba',{NAME => 'info1',VERSIONS=>'8'}
10)查看指定的数据信息
指定具体的rowkey
get 'lovereba','1011'
指定具体的列
get 'lovereba','1011','info1:name'
11)清空表
truncate 'lovereba'
12)删除表
需要先指定不可用
disable '表名'
drop '表名'
13)扫描指定范围
scan 'user',{STARTROW =>'2202'}
scan 'user',{STARTROW =>'2202',STOP =>'2204'}
14)统计rowkey的个数
count 'user'
15)退出hbase shell
quit
hbase读取数据流程
见图
hbase写数据流程
见图
hbaseAPI
core-site.xml
hbase-site.xml
hdfs-site.xml
hbasemr
hbase主要擅长的领域是存储数据,不擅长分析数据。
hbase如果想计算的话需要结合hadoop的mapreduce。
hbase-mr所需的jar包查看
bin/hbase mapredcp
配置临时环境变量
export HBASE_HOME=/root/hd/hbase-1.3.0
export HADOOP_HOME=/root/hd/hadoop2.8.4
export HADOOP_CLASSPATH= ${HBASE_HOME}/bin/hbase mapredcp
跑hbase-mr程序
bin/yarn jar /root/hd/hbase-1.3.0/lib/hbase-server-1.3.0.jar row
counter user
hbasemr2
hbase优化
1)预分区问题
region分片?表很大 bigtable
分布式?数据量大
region存储数据,如果有多个region,每个region负责维护一部分的rowkey{start
rowkey,endrowkey}
1~10001
1~2001 1980
2001~40002
分多少片?提前规划好,提高hbase的性能。
进行存储数据前做好rowkey的预分区优化hbase。
实操:create 'user_pp','info','partition',SPLITS =>
['201','202','203','204']
-∞ 201
201 202
202 203
203 204
204 +∞
create 'user_pppp','partition',SPLITS_FILE => 'partitions.txt'
hbase-shell路径下
2)rowkey如何设计?
rowkey是数据的唯一标识,这条数据存储在哪个分区由预分区范围决定。
合理设计rowkey?
一份数据分为5个region存储
但是我们需要尽可能的保持每个rogion中的数据量差不多
尽可能的打散数据,平均分配到每个region中即可。
解决方案:
生成随机数、hash/散列值
原本的rowkey是201,hash后 dwqdqdwqqf1231412dqaqdadd
202变为:
21dqddwdqqwdqdqfqfwqeqe12
字符串拼接:
20190316_a3d4
20190316_jl4f
反转字符串:
201903161->161309102
201903162->261309102
3)hbase基础优化
hbase用的hdfs存储
datanode允许最大文件打开数
默认4096 调大
dfs.datanode.max.transfer.threads
hdfs-site.xml
优化等待时间
dfs.image.transfer.timeout
默认60000毫秒
调大
内存优化:
hadoop-env.sh设置内存的堆大小
2G
512m
export HADOOP_PORTMAP_OPTS='-Xmx512m $HADOOP_PORTMAP_OPTS'