Javazookeeper程序员

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

2023-02-03  本文已影响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的预备工作:

我们先来看看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
来源:稀土掘金

上一篇下一篇

猜你喜欢

热点阅读