| 作者 | 日期 | 天气 |
|---|---|---|
| 元公子 | 2020-01-27(周一) | 冻脚的东莞。。。 |
你知道的越少,你不知道的就越少
没有朋友的点赞,就没法升级打怪
一.序言
下面概括记录下HBase中各项服务的用途定义:
HMaster:主/从集群架构中的中央节点。一个HBase集群存在多个HMaster节点,其中一个为Active Master,其余为Backup Master。它只维护表和region的元数据,不会对外提供数据服务。由region服务器负责所有regions的读写请求及操作。
HRegionServer:维护HMaster分配给他的region,处理对这些region的io请求。负责切分正在运行过程中变得过大的region。一般跟DataNode在同一个节点上,目的是实现数据的本地性,提高读写效率。
Zookeeper:它是集群的协调器。HMaster启动时将系统表加载到Zookeeper。提供HBase RegionServer状态信息。
二.环境准备
- 示例使用Centos7 64位操作系统
- Java jdk1.8以上环境
- 已存在zookeeper集群环境,部署文章
- 已安装hadoop环境
- 准备5台服务器,域名分别设置为hadoop-master,hadoop-master-standby1,hadoop-dn1,hadoop-dn2,hadoop-dn3
三.下载安装包
官方地址:前往下载
下载最新版软件: hbase-2.2.3-bin.tar.gz
四.开始烧脑
安装包放置在根路径下的soft目录下,使用root用户解压缩。
[root@hadoop-master /root]# mkdir /soft
[root@hadoop-master /root]# chown -R hadoop:hadoop /soft
[root@hadoop-master /root]# cd /soft
[root@hadoop-master /soft]$ tar -xvzf hbase-2.2.3-bin.tar.gz
设置用户组和创建软链接
[root@hadoop-master /soft]# chown -R hadoop:hadoop hbase-2.2.3
[root@hadoop-master /soft]# ln -s hbase-2.2.3 hbase
设置环境变量
[root@hadoop-master /soft]# vi /etc/profile
export HBASE_HOME=/soft/hbase
export PATH=$PATH:$HBASE_HOME/bin
export HBASE_CONF_DIR=/soft/hbase/conf
执行保存: Esc :wq
[root@hadoop-master /soft]# source /etc/profile
检查hosts文件,节点信息全部加入到域名映射,请注意要写真实的IP,不要有127.0.0.1、localhost这种,以防开发时遇到连接不到节点的坑
[root@hadoop-master /soft]# cat /etc/hosts
#127.0.0.1 localhost
192.168.146.3 hadoop-master
192.168.146.4 hadoop-master-standby1
192.168.146.5 hadoop-master2
192.168.146.6 hadoop-master2-standby1
192.168.146.7 hadoop-dn1
192.168.146.8 hadoop-dn2
192.168.146.9 hadoop-dn3
本文讲解两种安装模式:pesudo(伪分布式,用于开发调试)和full(集群模式,生产环境),采用软链接配置文件夹的方式。
[root@hadoop-master /soft]# su - hadoop
[hadoop@hadoop-master /home/hadoop]$ cp -fr /soft/hbase/conf /soft/hbase/pesudo
[hadoop@hadoop-master /home/hadoop]$ rm -fr /soft/hbase/conf
(一)伪分布式模式
master和regionserver服务在同一台机器,不需要hdfs。
配置目录切换为pesudo
[hadoop@hadoop-master /home/hadoop]$ ln -fsT /soft/hbase/pesudo /soft/hbase/conf
hbase-env.sh
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/hbase-env.sh
# export JAVA_HOME=/usr/java/jdk1.8.0/
export JAVA_HOME=/soft/jdk
# 不使用hbase自带的zookeeper
# export HBASE_MANAGES_ZK=true
export HBASE_MANAGES_ZK=false
# export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_LOG_DIR=/home/hadoop/hbase-pesudo/logs
# export HBASE_PID_DIR=/var/hadoop/pids
export HBASE_PID_DIR=/home/hadoop/hbase-pesudo/pids
regionservers
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/regionservers
hadoop-master
hbase-site.xml
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>file:///home/hadoop/hbase-pesudo/data</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase-pesudo/data/zookeeper</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/hbase-pesudo/tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop-dn1:2181,hadoop-dn2:2181,hadoop-dn3:2181</value>
</property>
<property>
<name>hbase.master</name>
<value>60000</value>
</property>
<!-- 默认90000,单位毫秒-->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<!-- 启动报错,暂时怀疑版本不兼容,先禁用 -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
启动测试
[hadoop@hadoop-master /home/hadoop]$ hbase version
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/soft/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/soft/hbase-2.2.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase 2.2.3
Source code repository git://hao-OptiPlex-7050/home/hao/open_source/hbase revision=6a830d87542b766bd3dc4cfdee28655f62de3974
Compiled by hao on 2020年 01月 10日 星期五 18:27:51 CST
From source with checksum 097925184b85f6995e20da5462b10f3f
[hadoop@hadoop-master /home/hadoop]$ start-hbase.sh
[hadoop@hadoop-master /home/hadoop]$ jps
4958 HMaster
5118 HRegionServer
# 确认端口前的ip地址不是127.0.0.1(源自上面的hosts文件)
[hadoop@hadoop-master /home/hadoop]$ netstat -ntlvp | grep 16020
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 192.168.146.131:16020 :::* LISTEN 5118/java
[hadoop@hadoop-master /home/hadoop]$ netstat -ntlvp | grep 16000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 192.168.146.131:16000 :::* LISTEN 4958/java
# 停止
# [hadoop@hadoop-master /home/hadoop]$ stop-hbase.sh
根据官方样例测试
[hadoop@hadoop-master /home/hadoop]$ hbase shell
create 'test', 'cf'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
scan 'test'
get 'test', 'row1'
disable 'test'
drop 'test'
#退出shell
hbase(main):001:0> exit
HBase Web UI
http://hadoop-master:16010
(二)集群模式
master和regionserver服务分开部署,以及包括master备份节点,需要hdfs。
配置目录切换为full
[hadoop@hadoop-master /home/hadoop]$ cp -fr /soft/hbase/pesudo /soft/hbase/full
[hadoop@hadoop-master /home/hadoop]$ ln -fsT /soft/hbase/full /soft/hbase/conf
hbase-env.sh
[hadoop@hadoop-master /home/hadoop]$ sed -i 's/hbase-pesudo/hbase-full/' /soft/hbase/conf/hbase-env.sh
regionservers
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/regionservers
hadoop-dn1
hadoop-dn2
hadoop-dn3
backup-masters
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/backup-masters
hadoop-master-standby1
hbase-site.xml
[hadoop@hadoop-master /home/hadoop]$ vi /soft/hbase/conf/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<!-- 参考hdfs ha fs.defaultFS,自测不支持ferderation联邦 -->
<value>hdfs://nns1/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase-full/data/zookeeper</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/hbase-full/tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop-dn1:2181,hadoop-dn2:2181,hadoop-dn3:2181</value>
</property>
<property>
<name>hbase.master</name>
<value>60000</value>
</property>
<!-- 默认90000,单位毫秒-->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<!-- 启动报错,暂时怀疑版本不兼容,先禁用 -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
往其它4个节点拷贝数据
# hadoop用户下
[hadoop@hadoop-master /soft]$ xrsync.sh /soft/hbase
================ dn1 ==================
================ dn2 ==================
================ dn3 ==================
[hadoop@hadoop-master /soft]$ xrsync.sh /soft/hbase-2.2.3
# root用户下
[hadoop@hadoop-master /soft]$ su - root
[root@hadoop-master /root]# xrsync.sh /etc/profile
[root@hadoop-master /root]# xcall.sh source /etc/profile
启动测试:使用start-hbase.sh启动时,非本机的节点会报找不到nns1的错误,每台机器单独启动服务正常。
[hadoop@hadoop-master /home/hadoop]$ hbase-daemon.sh start master
[hadoop@hadoop-master-standby1 /home/hadoop]$ hbase-daemon.sh start master
# 停止的服务
# hbase-daemon.sh stop master
[hadoop@hadoop-dn1 /home/hadoop]$ hbase-daemon.sh start regionserver
[hadoop@hadoop-dn2 /home/hadoop]$ hbase-daemon.sh start regionserver
[hadoop@hadoop-dn3 /home/hadoop]$ hbase-daemon.sh start regionserver
# 停止的服务
# hbase-daemon.sh stop regionserver
五、服务自启动
master节点
[hadoop@hadoop-master /home/hadoop]$ su - root
[root@hadoop-master /root]# vi /etc/systemd/system/hbase-master.service
[Unit]
Description=hbase-master
After=syslog.target network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=HADOOP_HOME=/soft/hadoop
Environment=HADOOP_MAPRED_HOME=/soft/hadoop
Environment=HADOOP_COMMON_HOME=/soft/hadoop
Environment=HADOOP_HDFS_HOME=/soft/hadoop
Environment=HBASE_HOME=/soft/hbase
Environment=HBASE_CONF_DIR=/soft/hbase/conf
ExecStart=/soft/hbase/bin/hbase-daemon.sh start master
ExecStop=/soft/hbase/bin/hbase-daemon.sh stop master
[Install]
WantedBy=multi-user.target
执行保存: Esc :wq
[root@hadoop-master /root]# chmod 755 /etc/systemd/system/hbase-master.service
[root@hadoop-master /root]# systemctl enable hbase-master
[root@hadoop-master /root]# service hbase-master start
regionserver节点
[hadoop@hadoop-dn1 /home/hadoop]$ su - root
[root@hadoop-dn1 /root]# vi /etc/systemd/system/hbase-regionserver.service
[Unit]
Description=hbase-regionserver
After=syslog.target network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=HADOOP_HOME=/soft/hadoop
Environment=HADOOP_MAPRED_HOME=/soft/hadoop
Environment=HADOOP_COMMON_HOME=/soft/hadoop
Environment=HADOOP_HDFS_HOME=/soft/hadoop
Environment=HBASE_HOME=/soft/hbase
Environment=HBASE_CONF_DIR=/soft/hbase/conf
ExecStart=/soft/hbase/bin/hbase-daemon.sh start regionserver
ExecStop=/soft/hbase/bin/hbase-daemon.sh stop regionserver
[Install]
WantedBy=multi-user.target
执行保存: Esc :wq
[root@hadoop-master /root]# chmod 755 /etc/systemd/system/hbase-regionserver.service
[root@hadoop-master /root]# systemctl enable hbase-regionserver
[root@hadoop-master /root]# service hbase-regionserver start
六、偶遇的坑
- 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty
参考这两篇文章,主要思路是修改hbase脚本,实测有效。但此次部署没发现此错误,怀疑与hadoop版本或部署有关。
reviews.apache.org/r/69299/dif…
附录:
官方文档: