HBase 是一个分布式的, 面向列的, 能存储并处理海量数据存储的非关系型开源nosql 数据库, 物理结构存储结构(k-v)
Hbase 强读写一致, 但是不是 最终一致性的数据存储, 这使得它非常适合高速的计算聚合,能够对大型数据提供随机,实时的读写访问
HBase适应场景: 对象存储, 时序数据, 推荐画像, 时空数据, 在线报表查询, 消息/订单, 朋友圈等
HBase 体系架构
1个多个master 服务器(主备)
多个regionserver服务器
zookeeper服务器
master服务器负责
1. 集群管理节点, 负责维护表结构(DDL create drop alter) ,不负责存储数据
2. 控制regionserver的故障转移, 监控regionserver状态, 负责分配regions 到 regionserver
3. 如果所有的master 都宕机, 仍然可以查询,存储 删除数据,但是不能新建表
reginserver 服务器:
1. 数据存储节点, 数据存储在HDFS中
2.负责响应用户I/O请求(get, put, delete), 实时向master 报告数据存储信息
3. 管理region的切分与合并
hbase 分为 HMaster 与 HRegionServer
230.121 namenode1 HMaster resourcemanager zkfc
230.122 namenode2 HMaster resourcemanager zkfc
230.123 datanode1 HRegionServer zk nodemanager journalnode
230.124 datanode2 HRegionServer zk nodemanager journalnode
230.125 datanode3 HRegionServer zk nodemanager journalnode
下载:
wget https://mirrors.bfsu.edu.cn/apache/hbase/2.2.6/hbase-2.2.6-bin.tar.gz
解压
[hadoop@namenode1 tools ]$ tar -zxvf hbase-2.2.6-bin.tar.gz
[hadoop@namenode1 tools ]$ mv hbase-2.2.6 ../
[hadoop@namenode1 tools ]$ cd /data/
[hadoop@namenode1 data ]$ ln -s hbase-2.2.6 hbase
需要修改配置文件
hbase-env.sh hbase-site.xml regionservers
backup-masters 默认不存在,手动创建
hbase-env.sh
#注释掉,使用G1 #export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC" export JAVA_HOME=/data/jdk #关闭自带的zk export HBASE_MANAGES_ZK=false export HADOOP_home=/data/hadoop export HBASE_MASTER_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/hadoop -XX:ErrorFile=/data/logs/hadoop/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hadoop/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_MASTER_OPTS}" export HBASE_REGIONSERVER_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/hadoop -XX:ErrorFile=/data/logs/hadoop/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hadoop/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_REGIONSERVER_OPTS}" export HBASE_SHELL_OPTS="-server -Xms1G -Xmx1G -Xmn400m -Xss228k -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/hadoop -XX:ErrorFile=/data/logs/hadoop/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/data/logs/hadoop/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m ${HBASE_SHELL_OPTS}"
hbase-site.xml
<configuration> <!--这个目录是region服务器共享的目录,用来持久化存储hbase的数据--> <property> <name>hbase.rootdir</name> <value>hdfs://Abcns/hbase</value> <!--- 指定hadoop master服务器的写法,hbse监听hdfs的端口是900
<value>hdfs://namenode1:9000/hbase</value> --> </property> <!--指定hbase集群为分布式集群--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>datanode:2181,datanode2:2181,datanode3:2181</value> </property> <!-- zookeeper 元数据快照的存储目录 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/data/zookeeper/data</value> </property> <property> <name>hbase.replication</name> <value>3</value> </property>
<!-- 指定hbase master web访问端口, 默认16010 --> <property> <name>hbase.master.info.port</name> <value>16010</value> </property>
<!--指定hbase regionserver web访问端口 默认16030 --> <property> <name>hbase.regionserver.info.port</name> <value>16030</value> </property> <!--解决启动hmaster 无法初始化wal问题--> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property> </configuration>
regionservers 配置文件
vim /data/hbase/conf/regionservers
datanode1
datanode2
datanode3
添加备份master
vim /data/hbase/conf/backup-masters
namenode2
拷贝/data/hbase 到各个节点
for i in {122..125}; do scp -r /data/hbase 172.16.230.$i:/data/ done
启动停止
集群整体启动
172.16.230.121 start-hbase.sh stop-hbase.sh 单独hmaster启动 hbase-daemon.sh start master hbase-daemons.h stop master 单独启停 regionserver hbase-daemon.sh start regionserver hbase-daemons.h stop regionserver
hbase使用
hdfs dfs -ls /
hbase shell
status
页面:
HMaster 页面: 172.16.230.121:16010 172.16.230.121:16010 regionserver页面: 172.16.230.121:16030 172.16.230.121:16030
hbase 分布式集群扩容与收缩
要先扩 hadoop datanode节点, 然后才能扩 hbase的对应节点
172.16.230.121 主节点
# 添加新节点 vim /data/hadoop/conf/regionservers datanode1 datanode2 datanode3 datanode4 ###新加节点
拷贝/data/hbase 目录到 datanode4
启动进程
单独启停 regionserver
hbase-daemon.sh start regionserver
vim /data/hbase/conf/hbase-env.sh