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 =10:Lead和Follower初始通信时限
//集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。(即默认初始通信时限2s * 10 = 20s)
//超过这个时间则认为Lear和Follower连不上
3.syncLimit =5:Lead和Follower同步通信时限
//集群中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