【误闯大数据】【从安装到入门】HBase部署

997 阅读4分钟
作者 日期 天气
元公子 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版本或部署有关。

blog.csdn.net/pycrossover…

reviews.apache.org/r/69299/dif…

附录:

官方文档: