美文网首页Javazookeeper程序员
基于Zookeeper实现分布式爬虫监控

基于Zookeeper实现分布式爬虫监控

作者: 互联网高级架构师 | 来源:发表于2023-02-03 13:51 被阅读0次

    一、Zookeeper是什么啊?

    我们来看一下,Zookeeper的定义:zookeeper是一个分布式的开源的协调服务框架,服务于分布式应用。 它暴露了一系列的原语操作服务,因此分布式应用能够基于这些服务,构建出更高级别的服务,比如同步,配置管理,分组和命名服务。zookeeper设计上易于编码,数据模型构建在我们熟悉的树形结构目录风格的文件系统中。zookeeper运行在Java中,同时支持Java和C 语言。

    二、那么Zookeeper的基本架构与工作原理是啥样的呢?

    Zookeeper 服务自身组成一个集群(2n+1个服务节点最多允许n个失效)。Zookeeper 服务有两个角色:一个是主节点(Leader),负责投票的发起和决议,更新系统状态;另一种是从节点(Follower),用于接收客户端请求并向客户端返回结果,在选主过程(即选择主节点的过程)中参与投票。主节点失效后,会在从节点中重新选举新的主节点。

    zookeeper的数据结构与linux文件系统很类似,与Linux中的文件系统路径不同,Zookeeper中的路径必须是绝对路径,而且每条路径只有唯一的一种表示方式(/app1/p_3)。

    三、如何构建Zookeeper集群?

    安装Zookeeper的预备工作:

    • Linux 系统3节点准备
    • 配置主机名与IP地址映射
    • 配置时钟同步
    • 集群SSH密码登录
    • 集群脚本开发
    • JDK安装

    我们先来看看Zookeeper的分布式集群如何搭建:

    • 下载解压
    • 修改配置文件
    • 同步Zookeeper安装目录
    • 创建数据和日志目录
    • 配置Zookeeper节点服务编号
    • Zookeeper集群服务启停

    3.1 下载并解压zookeeper

    到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的zookeeper-3.4.6.tar.gz安装包,然后上传至hadoop01 节点的/home/hadoop/app目录下并解压,具体操作如下所示。

    #解压Zookeeper
    
    [hadoop@hadoop01 app]$ tar -zxvf zookeeper-3.4.6.tar.gz
    
    #创建Zookeeper软连接
    
    [hadoop@hadoop01 app]$ ln -s zookeeper-3.4.6 zookeeper
    

    3.2 修改zoo.cfg配置文件

    在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。

    [hadoop@hadoop01 app]$ cd zookeeper
    
    [hadoop@hadoop01 zookeeper]$ cd conf/
    
    [hadoop@hadoop01 conf]$ ls
    
    configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
    
    [hadoop@hadoop01 conf]$ vi zoo.cfg
    
    #数据目录需要提前创建
    
    dataDir=/home/hadoop/data/zookeeper/zkdata
    
    #日志目录需要提前创建
    
    dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
    
    #访问端口号
    
    clientPort=2181
    
    #server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
    
    server.1=hadoop01:2888:3888
    
    server.2=hadoop02:2888:3888
    
    server.3=hadoop03:2888:3888
    

    3.3 同步zookeeper安装目录

    使用scp命令将hadoop01节点的Zookeeper安装目录,整体同步到集群的hadoop02和hadoop03节点,具体操作如下所示。

    [hadoop@hadoop01 app]$scp -r zookeeper-3.4.6  hadoop@hadoop02:/home/hadoop/app/
    
    [hadoop@hadoop01 app]$scp -r zookeeper-3.4.6  hadoop@hadoop03:/home/hadoop/app/
    

    然后分别在hadoop02和hadoop03节点上创建Zookeeper软连接,具体操作如下所示。

    [hadoop@hadoop02 app]$ln -s zookeeper-3.4.6 zookeeper
    
    [hadoop@hadoop03 app]$ ln -s zookeeper-3.4.6 zookeeper
    

    3.4 创建数据和日志目录

    在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。

    #创建Zookeeper数据目录
    
    [hadoop@hadoop01 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
    
    [hadoop@hadoop02 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
    
    [hadoop@hadoop03 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
    
    #创建Zookeeper日志目录
    
    [hadoop@hadoop01 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
    
    [hadoop@hadoop02 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
    
    [hadoop@hadoop03 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
    

    3.5 创建各节点服务编号

    分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示:

    #hadoop01节点
    
    [hadoop@hadoop01 zkdata]$ touch myid
    
    [hadoop@hadoop01 zkdata]$ echo 1> myid
    
    #hadoop02节点
    
    [hadoop@hadoop02 zkdata]$ touch myid
    
    [hadoop@hadoop02 zkdata]$ echo 2> myid
    
    #hadoop03节点
    
    [hadoop@hadoop03 zkdata]$ touch myid
    
    [hadoop@hadoop03 zkdata]$ echo 3> myid
    

    注意:每个节点服务编号的值是一个整形数字且不能重复

    3.6 启动Zookeeper集群服务

    在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。

    [hadoop@hadoop01 zookeeper]$ bin/zkServer.sh start
    
    [hadoop@hadoop02 zookeeper]$ bin/zkServer.sh start
    
    [hadoop@hadoop03 zookeeper]$ bin/zkServer.sh start
    

    Zookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。

    [hadoop@hadoop01 zookeeper]$ bin/zkServer.sh status
    
    [hadoop@hadoop02 zookeeper]$ bin/zkServer.sh status
    
    [hadoop@hadoop03 zookeeper]$ bin/zkServer.sh status
    复制代码
    

    如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。

    四、简单了解一下Zookeeper Shell的操作

    客户端连接zk服务
    [hadoop@hadoop1 zookeeper]$ bin/zkCli.sh  -server localhost:2181
    查看znode根目录结构
    [zk: localhost:2181(CONNECTED) 1] ls  /
    创建znode节点
    [zk: localhost:2181(CONNECTED) 2] create /test helloworld
    查看znode节点
    [zk: localhost:2181(CONNECTED) 3] get /test
    修改znode节点
    [zk: localhost:2181(CONNECTED) 4] set /test zookeeper
    [zk: localhost:2181(CONNECTED) 5] get /test
    删除znode节点
    [zk: localhost:2181(CONNECTED) 6] delete /test
    

    五、本文重点来啦-->基于Zookeeper实现分布式爬虫监控

    当我们需要采集一个网上书店的数据,为了提高爬虫效率,现在利用集群多节点并行爬取数据。由于使用集群多节点并行爬虫,难免会出现某些爬虫应用挂掉的状况,为了及时掌握集群节点爬虫应用是否正常运行,现在要求对集群的各爬虫应用进行监控。为了实现对集群各节点爬虫应用的监控,可以利用Zookeeper的监听机制来实现。首先通过Java开发一个监视器来监听Zookeeper的/spider持久节点,然后通过Java实现网上书店的爬虫应用,该应用会获取本地IP地址作为临时节点注册到Zookeeper的/spider节点,最后当集群各节点爬虫应用上线或者下线时都会触发监视器,从而可以精确掌握各爬虫应用的健康状况。

    首先我们先引入项目依赖

    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>2.12.0</version>
    </dependency>
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.7.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.3.1</version>
    </dependency>
    

    在这里,可能会出现

    Error: Could not find or load main class com.bigdata.zookeeper.SpiderWatcher
    

    不用慌,我们切换打包插件即可,打包插件如下:

    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>com.bigdata.zookeeper.StartSpider</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    

    爬虫代码:

    一些爬虫效果be like:

    接下来,对项目进行打包和运行

    项目编译打包
    命令:mvn clean package
    
    启动Zookeeper集群
    启动脚本:bin/zkServer.sh start
    
    启动爬虫监控应用
    启动命令:java -cp bigdata-1.0-SNAPSHOT.jar 包名+监控类名
    
    启动爬虫应用
    启动命令:java -cp bigdata-1.0-SNAPSHOT.jar 包名+爬虫类名
    
    查看爬虫应用节点上下线
    

    监视程序

    拷贝包导其他节点

    爬虫效果:

    作者:陈惜时
    链接:https://juejin.cn/post/7195857732846305341
    来源:稀土掘金

    相关文章

      网友评论

        本文标题:基于Zookeeper实现分布式爬虫监控

        本文链接:https://www.haomeiwen.com/subject/muknhdtx.html