hadoop离线分析(简单版)-zookeeper

爱⌒轻易说出口 提交于 2019-12-19 04:46:09

目录

 

简述

zookeeper安装

zookeeper启动原理


hadoop HA参照:https://blog.csdn.net/qq_36632174/article/details/79794754

简述

zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

zookeeper重在协调,是分布式服务的一个基础;要构建hadoop离线分析,首先要安装zookeeper。

zookeeper安装

安装包:zookeeper-3.4.11.tar.gz        
选择版本:zookeeper--release 3.4.11,修复了53个问题,支持Java9,2017-11月9日发布
1)zookeeper安装包放到:/usr/software/zookeeper-3.4.11.tar.gz目录下,解压:        
tar -zxvf zookeeper-3.4.11.tar.gz        
cd zookeeper-3.4.11/conf        
拷贝 cp zoo_sample.cfg 改名成 zoo.cfg        
cp -r zoo_sample.cfg zoo.cfg        
2)创建data目录:the directory where the snapshot is stored。快照存储地点。        
mkdir /usr/software/zookeeper-3.4.11/data        
创建log路径:mkdir /usr/software/zookeeper-3.4.11/logs        
3)修改zoo.cfg文件:vim zoo.cfg        
tickTime=2000        
initLimit=10        
ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。        
initLimit配置follower与leader之间建立连接后进行同步的最长时间。        
syncLimit=5   #配置follower和leader之间发送消息,请求和应答的最大时间长度。        
dataDir=/usr/software/zookeeper-3.4.11/data        
dataLogDir=/usr/software/zookeeper-3.4.11/logs        
clientPort=2181        
#server.id=host:port1:port2        
server.1=hadoop01:2888:3888   #其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。        
server.2=hadoop02:2888:3888   #host是该zk进程所在的IP地址,        
server.3=hadoop03:2888:3888   #port1表示follower和leader交换消息所使用的端口,
server.4=hadoop04:2888:3888   #port2表示选举leader所使用的端口。        
server.5=hadoop05:2888:3888        
4)在data目录下创建myid文件并添加内容为1        
cd /usr/software/zookeeper-3.4.11/data        
echo 1 > myid        
根据以上步骤在hadoop02~hadoop05节点安装好zookeeper        
注:hadoop02节点上的myid内容为2,hadoop03节点上的myid内容为3。        
echo 2 > myid        
5)启动zookeeper集群        
/usr/software/zookeeper-3.4.11/bin/./zkServer.sh start        
/usr/software/zookeeper-3.4.11/bin/./zkServer.sh stop        
/usr/software/zookeeper-3.4.11/bin/./zkServer.sh restart        
/usr/software/zookeeper-3.4.11/bin/./zkServer.sh status        
启动之后查看

hadoop01

hadoop02

hadoop03

hadoop04

hadoop05

6)设置开机自启            
第一种方法:直接修改/etc/rc.local文件            
在/etc/rc.local文件中需要输入两行,其中export JAVA_HOME=/usr/java/jdk1.8.0_112是必须要有的,            
否则开机启动不成功,大家根据自己JDK安装的位置自行更改。另一行/usr/software/zookeeper-3.4.11/bin/zkServer.sh start
则是我们zookeeper的启动命令。配置好之后,重启虚拟机,会发现已经可以开机自启了。
第二种方法:把zookeeper做成服务            
1、进入到/etc/init.d目录下,新建一个zookeeper脚本            
touch zookeeper            
2、添加执行权限:chmod +x zookeeper            
3、使用命令vim zookeeper进行编辑            
在脚本中输入如下内容,其中同上面注意事项一样要添加export JAVA_HOME=//usr/java/jdk1.8.0_112这一行,否则无法正常启动。            
#!/bin/bash            
#chkconfig:2345 20 90            
#description:zookeeper            
#processname:zookeeper            
export JAVA_HOME=//usr/java/jdk1.8.0_112            
case $1 in            
        start) su root /usr/local/zookeeper-3.4.5/bin/zkServer.sh start;;            
        stop) su root /usr/local/zookeeper-3.4.5/bin/zkServer.sh stop;;            
        status) su root /usr/local/zookeeper-3.4.5/bin/zkServer.sh status;;            
        restart) su /usr/local/zookeeper-3.4.5/bin/zkServer.sh restart;;            
        *) echo "require start|stop|status|restart" ;;            
esac            
4、使用service zookeeper start/stop命令来尝试启动关闭zookeeper,使用service zookeeper status查看zookeeper状态。
5、添加到开机自启            
chkconfig --add zookeeper            
zookeeper       0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭            
chkconfig --list        查看所有服务    
本次实验采取第一种方法
如果zookeeper,服务器重启需要按照一定次序重启,否则容易出现连接不上错误·

zookeeper启动原理

QuorumPeerMain是zookeeper集群的启动入口类,是用来加载配置启动QuorumPeer线程的。
QuorumPeer,谷歌翻译quorum是法定人数,定额的意思,peer是对等的意思,那么QuorumPeer中quorum代表的意思就是每个zookeeper集群启动的时候集群中zookeeper服务数量就已经确定了,zookeeper是基于paxos算法实现的,那是一个唯一的分布式集群一致性算法,在zookeeper中将这一算法演绎为集群分布式协调可持续服务。在每个zookeeper的配置文件中配置集群中的所有机器配置中每个server.X记录代表集群中的一个服务,QuorumPeerConfig会构建一个QuorumServer对象,其中的server.X中的X代表zookpeer的sid,每个zookeeper都会编辑自己的sid在dataDir目下的myid文件中,sid标记每个服务,在快速选举中起作用。所以对这个进程不应该陌生,如果你要关闭,就直接zkServer.sh stop 就可以了。

1.通过zkServer.sh启动zookeeper时,正常指定的QuorumPeerMain作为启动主类。
2.QuorumPeerMain执行main方法,里面主要逻辑是执行initializeAndRun方法。
 public static void main(String[] args) {
        QuorumPeerMain main = new QuorumPeerMain();
        try {
            main.initializeAndRun(args);
        ....
    }
3.initializeAndRun方法
(1)通过QuorumPeerConfig.parse方法,解析配置文件
(2)通过DatadirCleanupManager.start方法,启动清除调度任务
(3)runFromConfig或ZooKeeperServerMain.main来启动zookkeeper
protected void initializeAndRun(String[] args)
        throws ConfigException, IOException, AdminServerException
    {
        QuorumPeerConfig config = new QuorumPeerConfig();
        if (args.length == 1) {//如果指定的配置文件
            config.parse(args[0]);//解析配置文件
        }
        // Start and schedule the the purge task
        //启动安排清除任务
        DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config
                .getDataDir(), config.getDataLogDir(), config
                .getSnapRetainCount(), config.getPurgeInterval());
        purgeMgr.start();
        if (args.length == 1 && config.isDistributed()) {
            runFromConfig(config);//启动zookeepeer集群
        } else {
            LOG.warn("Either no config or no quorum defined in config, running "
                    + " in standalone mode");
            // there is only server in the quorum -- run as standalone
            ZooKeeperServerMain.main(args);
        }
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!