前言
什么时候用Hbase?Hbase不适合解决所有问题:
- 首先数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态
- 其次,如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。
- 最后,保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。
- Hbase在单机环境也能运行,但是请在开发环境的时候使用。
内部应用: - 存储业务数据:车辆GPS信息,司机点位信息,用户操作信息,设备访问信息。。。
- 存储日志数据:架构监控数据(登录日志,中间件访问日志,推送日志,短信邮件发送记录。。。),业务操作日志信息
- 存储业务附件:UDFS系统存储图像,视频,文档等附件信息
前置环境准备:
- hadoop集群环境
- zookeep集群环境
- centos7
本文介绍安装Hbase版本:hbase-2.2.5-bin.tar.gz,百度网盘链接 提取码:mxbk
Hbase和RDBMS
属性 | Hbase | RDBMS |
---|---|---|
数据类型 | 只有字符串 | 丰富的数据类型 |
数据操作 | 增删改查,不支持join | 各种各样的函数与表链接 |
存储模式 | 基于列式存储 | 基于表结构和行式存储 |
数据保护 | 更新后仍然保留旧版本 | 替换 |
可伸缩性 | 轻易增加节点 | 需要中间层,牺牲性能 |
Hbase简介
Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩,实时读写的分布式数据库。
利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务主要用来存储非结构化和半结构化的松散数据(列存Nosql数据库)
高可用集群搭建
1. 下载安装
创建文件夹:mkdir /usr/local/src/hbase
解压:tar -zxvf hbase-2.2.5-bin.tar.gz
删除压缩文件:rm -rf hbase-2.2.5-bin.tar.gz
2. 修改集群环境
- conf文件夹下 vim hbase-env.sh 添加如下内容:
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export JAVA_HOME=/usr/local/src/jdk/jdk1.8
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/usr/local/src/hadoop/hadoop-3.2.2
- 修改配置文件
vim hbase-site.xml 将自带的几行property覆盖掉
<!--设置HBase表数据,也就是真正的HBase数据在hdfs上的存储根目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://bdp/hbase</value>
</property>
<!--是否为分布式模式部署,true表示分布式部署 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--zk集群的url配置,多个host中间用逗号 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<!--HBase在zookeeper上数据的根目录znode节点 -->
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
<!--本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默认设置成它下面的 -->
<property>
<name>hbase.tmp.dir</name>
<value>/var/bdp/hbase</value>
</property>
<!--使用本地文件系统设置为false,使用hdfs设置为true -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
- vim regionservers 内容如下:
node1
node2
node3
- vim backup-masters
node2
- 拷贝hadoop配置文件
scp /usr/local/src/hadoop/hadoop-3.2.2/etc/hadoop/core-site.xml ./
scp /usr/local/src/hadoop/hadoop-3.2.2/etc/hadoop/hdfs-site.xml ./
- 拷贝其他节点
scp -r /usr/local/src/hbase node2:/usr/local/src/
scp -r /usr/local/src/hbase node3:/usr/local/src/
- 修改环境变量
vim /etc/profile
export HBASE_HOME=/usr/local/src/hbase/hbase-2.2.5
export PATH= H B A S E H O M E / b i n : HBASE_HOME/bin: HBASEHOME/bin:PATH
保存: source /etc/profile
- 传给另外节点
scp /etc/profile node2:/etc/
scp /etc/profile node3:/etc/
ssh root@node2 “source /etc/profile”
ssh root@node3 “source /etc/profile”
- 在一键启动脚本添加
vim /bdp/code/shell/start-bdp.sh
echo -e "\e[1;31m 【START BDP -----------------HBASE】 \e[0m" >> /root/logs/start-bdp.log
start-hbase.sh >> /root/logs/start-bdp.log
sleep 5
jps >> /root/logs/start-bdp.log
echo "=========NODE1==========" >> /root/logs/start-bdp.log
ssh root@node2 "source /etc/profile;jps" >> /root/logs/start-bdp.log
echo "=========NODE2==========" >> /root/logs/start-bdp.log
ssh root@node3 "source /etc/profile;jps" >> /root/logs/start-bdp.log
echo "=========NODE3==========" >> /root/logs/start-bdp.log
- 在一键停止脚本添加
vim /bdp/code/shell/stop-bdp.sh
echo -e "\e[1;31m 【STOP BDP -----------------HBASE】 \e[0m" >> /root/logs/start-bdp.log
stop-hbase.sh >> /root/logs/start-bdp.log
sleep 5
jps >> /root/logs/start-bdp.log
echo "=========NODE1==========" >> /root/logs/start-bdp.log
ssh root@node2 "source /etc/profile;jps" >> /root/logs/start-bdp.log
echo "=========NODE2==========" >> /root/logs/start-bdp.log
ssh root@node3 "source /etc/profile;jps" >> /root/logs/start-bdp.log
echo "=========NODE3==========" >> /root/logs/start-bdp.log
- 启动: ./start-bdp.sh
查看启动状态:
node1:
NameNode
JobHistoryServer
DFSZKFailoverController
NodeManager
JournalNode
ResourceManager
HRegionServer
Jps
QuorumPeerMain
DataNode
HMaster
GetConf
node2
Jps
DataNode
NodeManager
NameNode
QuorumPeerMain
HRegionServer
HMaster
DFSZKFailoverController
JournalNode
node3
JournalNode
QuorumPeerMain
HRegionServer
Jps
DataNode
NodeManager
ResourceManager
访问:node1:16010