在hadoop环境下安装zookeeper和hbase

zookeeper,hbase环境搭建

1 运行环境

虚拟机: VMware Workstation Pro 14
系统 : CentOS-7-x86_64-Minimal-1708.iso
Hadoop: Hadoop 2.8.1
使用三个节点作为集群环境:

Master: 192.168.23.131
Slave1: 192.168.23.129
Slave2: 192.168.23.130

hbase:16010截得的配置
配置后的./bashrc文件如下(Master)

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151-2.6.11.1.el7_4.x86_64
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar
export HBASE_HOME=/usr/local/hbase

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:.
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:.

export DERBY_HOME=/usr/local/derby
export PATH=$PATH:$DERBY_HOME/bin
export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar

/etc/hosts 文件(三台机器该配置相同 不需要保留127.0.0.1和::1否则zookeeper启动会报错,连接不上其他服务器

192.168.23.131  Master
192.168.23.129  Slave1
192.168.23.130  Slave2

2 zookeeper搭建

2.1 下载,提取,创建data文件

wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
tar -zxf zookeeper-3.4.13.tar.gz
cd zookeeper-3.4.13
mkdir data

2.2 创建配置文件

  • 三台不同机器的一般如下,每台机器上的配置文件可以一模一样
tickTime = 2000
clientPort = 2181
initLimit = 5
syncLimit = 2
# dataDir = /path/to/zookeeper/data
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/dataLog
server.1=Master:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888
  • data下面我们需要新建一个myid,用来存放server.=中第一个*的数据,那么我们在Master中就存放的为1,在Slave1中放2,在Slave2中放3
    查看版本号
    查看版本号
    查看版本号

2.3 复制到其他机器上

使用scp

2.4 启动

cd /usr/local/zookeeper/bin
./zkServer.sh start
  • Master

查看版本号

  • Slave1

查看版本号

  • Slave2

查看版本号

  • 三台机器都要启动

2.5 启动成功

  • 执行jps
  • Master

jps

  • Slave1

jps

  • Slave2

jps

2.6 查看集群状态

./bin/zkServer.sh status

  • Master

查看集群状态

  • Slave1

查看集群状态

  • Slave2

查看集群状态

2.7 调试

  • zookeeperlog文件默认是放在zookeeper文件目录下,比如我的zookeeper所在路径是/usr/local/zookeeperlog文件在/usr/local/zookeeper/zookeeper.log
  • 由于log文件通常比较大,可以使用tail命令查看,tail -f zookeeper/zookeeper.log,使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。参考https://www.2cto.com/os/201111/110143.html

3 在模拟分布式模式Hbase搭建

参考HBase安装 https://www.yiibai.com/hbase/hbase_installation.html

  • 需安装与hadoop兼容的hbase版本

hadoop,hbase兼容表(图片来自https://www.jianshu.com/p[768e6fb5]
但是我的Hadoop是2.8.1,Hbase是1.4.9,欸,这个我不太能解释

3.1 下载 解压

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.9/hbase-1.4.9-bin.tar.gz
tar -zxvf hbase-1.4.9-bin.tar.gz
mv hbase-1.4.9-bin /usr/local
mv /usr/local/hbase-1.4.9-bin /usr/local/hbase

3.2 配置

3.2.1 hbase-env.sh

找到 export,添加以下内容,需要添加自己相应文件的位置,可以查看自己之前在~/.bashrc文件中的配置,如HADOOP_HOME,JAVA_HOME,可得知相应的位置

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151-2.6.11.1.el7_4.x86_64
export HADOOP_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase/
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_PID_DIR=/usr/local/hbase/pids
export HBASE_MANAGES_ZK=false #不使用自带的zookeeper

3.2.2 hbase-site.xml

  • hbase-site.xml在几个机器中的配置都是一样的
  • hbase.rootdir在分布式中各个机器的配置都是一样的,master即可
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://Master:9000/hbase</value>
        <description>The directory shared byregion servers.</description>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/usr/local/zookeeper/data</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
        <description>Property from ZooKeeper's config zoo.cfg. The port at which the clients will connect.
        </description>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>120000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>Master,Slave1,Slave2</value>
    </property>
    <property>
        <name>hbase.tmp.dir</name>
        <value>/usr/local/hbase/tmp</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

</configuration>

3.2.3 regionservers

Slave1
Slave2

3.3 启动hbase

  • 启动的顺序

    hadoop->zookeeper->hbase

  • 只需要master节点启动hbase,即可全部启动
  • 关闭的顺序

    hbase->zookeeper->hadoop

  • 先查看jps查看hadoop,zookeeper是否只有正常启动,再启动hbase
./hbase/bin/start-hbase
  • 1 2 3指的是 Master,Slave1,Slave2
  • jps查看
  • Master

查看集群状态

  • Slave1

查看集群状态

  • Slave2

查看集群状态

  • 查看网页接口
  • 16010端口

16010

  • 16030端口

16030

  • 如果是用Vmware,不需要进行端口映射

3.4 进入hbase shelll验证

./usr/local/hbase/bin/hbase shell

hbase

  • list

hbase

  • 命令行测试
create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test'

hbase

4 一些坑

  • 文件配置,路径要一致,文件配置出错通常会报,master is initializing,之类
  • 同步时间,多个服务器之间的时间不同步也会报错
  • 报错要学会看log文件,在log文件变多的情况下,可以先把hbase暂停,zookeeper暂停,先rm清空log(logs)目录下的文件,然后在启动,用taillog文件,如果用vim,需要一直往下翻ctrl+F/ctrl+B,hbaselog文件一般在其相对目录下logs
  • 正常来说,zookeeper,hbase的启动不需要root权限,如果提示permission denied,需要考虑是否端口占用
sudo netstat -atunlp | grep 2181
sudo kill -9 端口号