1、HBase简介
HBase hadoop database 是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
利用hadoop hdfs作为其文件存储系统
利用hadoop MapReduce来处理HBase中的海量数据
利用Zookeeper作为分布式协同服务
主要用来存储非结构化和半结构化的松散数据 比如图片、文件等
2、架构
各个环节的作用大体介绍:
zookeeper
维护region入口
维护集群 保证任何时候集群中都有一个活跃的master
实时监控region server健康 并实时通知master
存储hbase中的schena和table元数据
hmaster
为regionserver分配region
负责region server的负载均衡
region server再分配
某个region server宕机 重新分配到其他region
hregionserver table
维护region
切分region
hregion 表
store 代表cf colum family
memstore 内存(写缓存)存储
storeFile 缓存数据溢写到storefile
region
hbase自动把表水平划分成多个region,每个region会保存包里面一部分连续的数据
每一个表开始只有一个region,随着数据的不断增多,region不断增大,当达到一个阈值时,region会等分成两个新的region(裂变)
当table中的值继续不断增大,就会有越来越多的region,并分布到不同的region server上
Memstore 与 storefile
一个region由多个store组成,一个store对应一个CF(列族)
store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile,对于大范围合并,自动触发需要控制。
当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
客户端检索数据,先在memstore找,找不到再找storefile
文件合并
minor 小文件合并不需要控制
major 大文件合并 需要控制 比如时间控制
3、环境
4、hdfs搭建
请参阅我的hdfs搭建文章,这里就不在赘述了 https://blog.csdn.net/chuanxincui/article/details/83546344/
5、hbase搭建
5、1 准备工作:
(1)网络配置 hdfs搭建时已经完成,参阅hdfs搭建
(2)配置hosts文件 hdfs搭建时已经完成,参阅hdfs搭建
(3)免密登录
hdfs中已经配置:(hadoop01免密登录自己和其他机器;且与hadoop02相互免密登录)
在hbase中还需要配置:
hadoop04免密登录 hadoop01 hadoop02 hadoop03 hadoop04
(4)时间同步 hdfs搭建时已经完成,参阅hdfs搭建
(5)jdk安装 hdfs搭建时已经完成,参阅hdfs搭建
5、2 配置免密登录
hadoop04免密登录 hadoop01 hadoop02 hadoop03
登录hadoop04
生成秘钥 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
配置免密登录自己:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
mv ~/.ssh/id_dsa.pub ~/.ssh/hadoop04.pub
将公钥添加到hadoop01 hadoop02 hadoop03节点的authorized_keys中
ssh-copy-id -i ~/.ssh/hadoop04.pub hadoop01
ssh-copy-id -i ~/.ssh/hadoop04.pub hadoop02
ssh-copy-id -i ~/.ssh/hadoop04.pub hadoop03
登录hadoop01 hadoop02 hadoop03 验证公钥是否已经添加成功。以hadoop02为例:
验证免密登录
5、3 上传压缩包并解压
登录hadoop04
cd /opt
ll
yum install -y lrzsz
rz
tar -zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /usr/local
重新命名包名,
cd /usr/local
mv hbase-0.98.12.1-hadoop2/ hbase
5、4配置hbase环境变量
vi /etc/profile
source /etc/profile
验证环境变量配置是否成功
echo $HBASE_HOME
5、5 修改配置文件
修改配置文件 hbase-env.sh
cd /usr/local/hbase/conf
配置hbase的环境(配置jdk,关闭hbase默认的zookeeper)
vi hbase-env.sh
修改配置文件 hbase-site.xml
在configuration中添加
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop02,hadoop03,hadoop04</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/var/sxt/zk_data</value>
</property>
配置regionservers节点
编辑regionservers文件
vi regionservers
配置备节点hmaster
创建一个文件backup-masters,并将从节点添加到该文件中
vi backup-masters
HDFS客户端配置 一定要注意 注意 注意 重要的事情说3遍
官网给出了3中方法如下:
大体上意思就是:
方法1 将hdfs中的环境变量信息,都要添加到hbase-env.sh这个配置你文件中
方法2 将hdfs中的hdfs-site.xml文件复制到hbase的conf下
方法3 将hdfs-site.xml中的所有配置,添加到hbase-site.xml中
综上可以看出 方法2是最简单
cp /usr/local/hadoop-2.6.5/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf/
5、6 分发
将hadoop04上面配置好的hbase 分发到hadoop01、hadoop02 hadoop03节点上
cd /usr/local
scp -r hbase/ hadoop01:`pwd`
scp -r hbase/ hadoop02:`pwd`
scp -r hbase/ hadoop03:`pwd`
因为hadoop01是备节点,所以需要配置一下hbase的环境变量,hadoop02、hadoop03无需配置
登录hadoop01节点
vi /etc/profile
添加hbase环境变量,添加完毕之后,重新加载配置文件
source /etc/profile
6、启动测试
6、1 启动 zookeeper
登录hadoop02 hadoop03 hadoop04执行启动命令
zkServer.sh start
6、2 启动hdfs
登录hdfs的namenode的主节点hadoop01,启动hdfs
start-dfs.sh
验证hdfs是否启动成功
浏览器登录 http://hadoop01:50070 http://hadoop02:50070/
6、3 启动hbase
登录hbase主节点hadoop04,执行命令start-hbase.sh
start-hbase.sh
验证是否启动成功
6、4 验证高可用
关闭主master中的hbase服务,验证备节点hadoop01是否变为master
hbase-daemon.sh stop master
然后再启动 hadoop04中的hbase服务
hbase-daemon.sh start master
7 最后 搭建过程中遇到的几个问题请参阅
https://blog.csdn.net/chuanxincui/article/details/88052835
https://blog.csdn.net/chuanxincui/article/details/88052797