Hbase2.0.5、zookeeper3.5.7安装(基于Flink电商项目实战)

1.介绍

本文中的Hbase和Zookeeper安装方法不仅适用于此版本,至少Hbase2.3之前的版本我装过好几个,都没问题,zookeeper3.6以上的版本也适用,文章介绍版本仅仅是为了契合项目所定。
Flink实时电商项目实战
默认已安装hadoop、java环境;
hadoop3.1.3搭建

2、Hbase安装和Zookeeper安装

2.1、配置文件修改:

解压和基本安装后:

进入Hbase的conf目录下:

修改三个文件:

hbase-env.sh:

echo $JAVA_HOME查看当前java的环境值:/opt/module/jdk1.8.0_212

修改

export JAVA_HOME=/opt/module/jdk1.8.0_212
修改:
# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
    把这两个都注释掉;
修改
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false

hbase-site.xml:

<configuration>
<!-- hbase.root.dir 将数据写入哪个目录 如果是单机版只要配置此属性就可以,
value中file:/绝对路径,如果是分布式则配置与hadoop的core-site.sh服务器、端口以及zookeeper中事先创建的目录一致 -->        
  <property>
    <name>hbase.rootdit</name>
    <value>hdfs://hadoop102:8020/hbase</value>
  </property>
       <!-- 单机模式不需要配置,分布式配置此项,value值为true,多节点分布-->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
      <!-- master的节点端口,0.98之前的版本没有,默认端口时60000,设为16000,master的web ui页面的端口号为16010 -->
  <property>
    <name>hbase.master.port</name>
    <value>16000</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop102,hadoop103,hadoop104</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <property>
    <name>hbase.wal.provider</name>
    <value>filesystem</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/module/zookeeper/zkData</value>
   </property>
</configuration>

regionservers:

hadoop102
hadoop103
hadoop104

软连接hadoop配置文件到HBase;

ln -s /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml

ln -s /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
(关于这个软连接的问题,我要着重说明一下,这里不是必要的
,可以把hdfs的文件复制过来,但我不推荐这么做)

远程发送至其他集群
xsync hbase/

配置环境变量

cd /etc/profile.d/

进入my_env.sh

添加
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin

激活配置
source /etc/profile

2.2、启动和关闭:

先启动hadoop集群和Zookeeper;

进入hbase:

先进入bin目录下:

rm -rf *.cmd
    //删除cmd后缀文件,不会在windows种使用hbase;
单节点启动:
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver
    
启动命令行:
hbase
    
群起和群关:
start-hbase.sh以及stop-hbase.sh

访问hadoop102:16010;
出现3个regionserver而且不挂,才是安装成功,如果有问题,输入date检查你的三台虚拟机的时间是否一致,不一致的话下载ntpd服务,把虚拟机时间与外网同步;
​ 这里的hbase:namespace,这里的hbase是真正的命名空间,存储着表的信息,这里的namespace可以换一个名字,因为这只是一张表的名字,和前面所提到的命名空间不是一个东西;

启动出现问题,查看日志文件,文件在logs目录下;

2.3脚本

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit;
fi

case $1 in
"start")
    echo "=============启动 Hbase集群 ============="
    echo " --------------启动Hbase102 --------------"
    ssh hadoop102 "/opt/module/hbase/bin/hbase-daemon.sh start master"
    ssh hadoop102 "/opt/module/hbase/bin/hbase-daemon.sh start regionserver"
    ssh hadoop103 "/opt/module/hbase/bin/hbase-daemon.sh start regionserver"
    ssh hadoop104 "/opt/module/hbase/bin/hbase-daemon.sh start regionserver"
;;
"stop")
    echo "=============关闭 Hbase集群 ============="
    echo "------------关闭Hbase102 ----------------"
    ssh hadoop102 "/opt/module/hbase/bin/stop-hbase.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
                        

zookeeper安装

本地模式部署

tar -zxvf正常安装完毕后,创建zkDATA目录,并修改conf目录系啊zoo_sample.cfg为zoo.cfg;

打开zoo.cfg文件,修改dataDir路径:

dataDir=/opt/module/zookeeper/zkData

启动zookeepers:

bin/zkServer.sh start

查看状态:

bin/zkServer.sh status

启动客户端:

bin/zkCli.sh

退出客户端:

quit

停止zookeeper:

bin/zkServer.sh stop

配置参数

1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
    //Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔tickTime时间就会发送一个心跳,时间单位为毫秒。
	//它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
    
2.initLimit =10LeadFollower初始通信时限  
    //集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。(即默认初始通信时限2s * 10 = 20s)
    //超过这个时间则认为Lear和Follower连不上
    
3.syncLimit =5LeadFollower同步通信时限
	//集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。(默认同步时限 2s * 5 = 10s)(这里是已经初始化连接之后的时限判断)  
    
4.dataDir:数据文件目录+数据持久化路径 dataDir=/opt/module/zookeeper/zkData
	//主要用于保存Zookeeper中的数据。
    
5.clientPort =2181:客户端连接端口
	//监听客户端连接的端口。    

这里备注一下:如果zookeeper出现问题,或者说是hbase、kafka这样的框架出现问题,通过zkCli.sh进入客户端后,把对应的框架文件删掉,然后去zkData目录下,把version文件删掉,再重启;而且关闭kafka的时候要注意,要等一会再关闭zk,用jps检查一下,是不是kafka都关掉, 因为kafka关闭要一段时间,如果kafka没关,zk就先关了,很容易下次kafka直接起不来;

实战(开发重点)

分布式安装

先将zookeeper分发至其他服务器中;

在zkData目录下创建一个myid文件:

添加与server对应的编号:三台服务器分别配置2、3、4;

进入conf目录下的zoo.cfg文件中,配置参数为

server.A=B:C:D

A是刚才写的数字,B是服务器的IP地址,C是这个服务器与七群的Leader服务器交换信息的端口,D是万一集群的Learer服务器挂了,需要一个接口来重新进行选举;

server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888

分别启动Zookeeper:

bin/zkServer.sh start

脚本编写

#!/bin/bash

case $1 in
"start"){
	
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "*********$i**********"
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh start"
	done
};;
"stop"){
	
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "*********$i**********"
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh stop"
	done
};;
"status"){
	
	for i in hadoop102 hadoop103 hadoop104
	do
		echo "*********$i**********"
		ssh $i "/opt/module/zookeeper/bin/zkServer.sh status"
	done
};;
esac

集群分发脚本

#!/bin/bash

#1.判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2.遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
    echo ====================  $host  ====================
    #3.遍历所有目录,挨个发送


    for file in $@
    do
        #4.判断文件是否存在
        if [ -e $file ]
            then
                #5.获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6.获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值