专栏首页积累沉淀搭建storm集群

搭建storm集群

搭建storm集群

系统centos7

1、安装Java jdk  1.7

2、安装zookeeper 3.4.8

3、安装Python2.7X

4、安装storm0.9

5、安装git

6、安装maven

所有安装包,等会我会打包上传,地址会放到最后,大家需要可以下载

1、安装jdk很简单

下载jdk压缩包

解压压缩包 ,我的安装目录是/software/

在etc/profile中加入环境变量

JAVA_HOME=/software/jdk1.7.0_80

PATH=$JAVA_HOME//bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib.tools.jar

验证是否安装成功

[root@slave2 software]# java -version

java version "1.7.0_80"

Java(TM) SE Runtime Environment (build 1.7.0_80-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

[root@slave2 software]# javac -version

javac 1.7.0_80

[root@slave2 software]#

2、安装zookeeper集群

下载解压,同样我的安装目录是/software/

准备工作,准备三台机子,我的都是centos7,分别获取IP地址,然后设置主机名

在/etc/hostname中修改为你的主机名

我的分别改为了

192.168.52.142主机名为centos

192.168.52.145主机名为slave1

192.168.52.146主机名为slave2

分别每台机子的/etc/hosts中加入

192.168.52.142  centos

192.168.52.145  slave1

192.168.52.146  slave2

进入zookeeper安装目录的conf下

创建zoo.cfg配置文件

可以复制zoo_sample.cfg得到zoo.cfg

编辑这个文件

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/software/zookeeper-3.4.8/data

clientPort=2181

server.1=centos:8880:7770

server.2=slave1:8881:7771

server.3=slave2:8882:7772

创建zookeeper存放数据的目录   /software/zookeeper-3.4.8/data目录

进入 /software/zookeeper-3.4.8目录,创建

mkdir data

把刚刚安装的zookeeper-3.4.8复制到另外两台机子的/software/下

scp -rp zookeeper-3.4.8 root@slave1:/software

scp -rp zookeeper-3.4.8 root@slave1:/software

分别在三台机子的/software/zookeeper-3.4.8/data下创建myid文件

其中192.168.52.142机子的myid文件内容为1 

其中192.168.52.145机子的myid文件内容为2 

其中192.168.52.146机子的myid文件内容为3

这是对应上面配置文件的server.X

server.1=centos:8880:7770

server.2=slave1:8881:7771

server.3=slave2:8882:7772

zookeeper配置解释:

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。 除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

最重要的一点,关闭防火墙,centos7比较坑,他有双重防火墙

entos 7版本以后默认使用firewalld后,按以前关于iptables的设置方法已经不管用了!!!妈的,用service iptqbles stop 关闭防火墙,以为关了,原来一直没关,害得我搭分布式集群折磨了我十多个小时,IP可以ping通,查看报错日志现实找不到主机路由,用上面那个命令无论怎么关防火墙都没用,以为是直接克隆的centos不行,又重新装了两个系统,装好所有软件,到头来还是同样的问题

正确的关闭和禁用命令是

运行、停止、禁用firewalld

启动:# systemctl start firewalld

查看状态:# systemctl status firewalld 或者 firewall-cmd --state

停止:# systemctl disable firewalld

禁用:# systemctl stop firewalld

然后分别到每台机子的zookeeper安装目录,开启服务

[root@slave1 zookeeper-3.4.8]# bin/zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /software/zookeeper-3.4.8/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@slave2 zookeeper-3.4.8]# bin/zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /software/zookeeper-3.4.8/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@centos zookeeper-3.4.8]# bin/zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /software/zookeeper-3.4.8/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

查看状态

[root@slave1 zookeeper-3.4.8]# bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /software/zookeeper-3.4.8/bin/../conf/zoo.cfg

Mode: leader

开启完zookeeper服务后,再来安装storm ,因为storm依赖于zookeeper,开启storm服务前,必须开启zookeeper服务

安装Python就不讲了,因为centos7已经默认安装了Python2.7.5,所以不用安装了

3、storm安装

下载安装包解压到/software/

进入storm目录,编辑

conf/storm.yaml配置文件

加入

#zookeeper服务节点

storm.zookeeper.servers:

      - "192.168.52.142"

      - "192.168.52.145"

      - "192.168.52.146" 

#nimbus所在机子

nimbus.host: "192.168.52.142"

#supervisor工作进程端口号

supervisor.slots.ports:

    - 6700

    - 6701

    - 6702

    - 6703

#存放数据目录,要自己创建

storm.local.dir: "/software/storm-0.9.1/data"

创建/software/storm-0.9.1/data目录

进入/software/storm-0.9.1/下

mkdir data

把storm-0.9.1安装目录分发到其他机子

scp -cp storm-0.9.1 root@slave1:/software/

scp -cp storm-0.9.1 root@slave2:/software/

分别在三台机子上,把storm加入环境变量

在/etc/profile加入

JAVA_HOME=/software/jdk1.7.0_80

STORE_HOME=/software/storm-0.9.1

PATH=$JAVA_HOME/bin:$STORE_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib.tools.jar

在主机centos上开启nimbus进程

storm nimbus &

在另外两台机子上开启supervisor 进程

storm supervisor &

开启完按Ctrl+c

用jps查看进程是否启动成功

如:

[root@slave1 software]# jps

2792 supervisor

2904 Jps

2655 QuorumPeerMain

在centos主机上开启

storm ui &

storm logviewer &

这样就可以通过web查看storm部署情况了

访问http://192.168.52.142:8080/

如图

4、安装git

查看是否安装git

rpm -qa |grep git

安装命令

yum install git

运行如下命令下载storm-starter测试storm是否安装成功

git clone git://github.com/nathanmarz/storm-starter.git

5、下载maven

下载解压,安装目录/software/

加入环境变量到/etc/profile

JAVA_HOME=/software/jdk1.7.0_80

STORE_HOME=/software/storm-0.9.1

MAVEN_HOME=/software/apache-maven-3.3.9

PATH=$JAVA_HOME/bin:$STORE_HOME/bin:$MAVEN_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib.tools.jar

进入刚刚下载的storm-starter目录下

mv m2-pom.xml pom.xml

修改pom.xml,把这段改为如下:

<dependency>

      <groupId>org.apache.storm</groupId>

      <artifactId>storm-core</artifactId>

      <version>0.9.1-incubating</version>

      <!-- keep storm out of the jar-with-dependencies -->

      <scope>provided</scope>

</dependency>

完整如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>storm.starter</groupId>
  <artifactId>storm-starter</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>


  <name>storm-starter</name>
  <url>https://github.com/nathanmarz/storm-starter</url>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>


  <repositories>
    <repository>
      <id>github-releases</id>
      <url>http://oss.sonatype.org/content/repositories/github-releases/</url>
    </repository>
    <repository>
      <id>clojars.org</id>
      <url>http://clojars.org/repo</url>
    </repository>
  </repositories>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.8.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.9.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easytesting</groupId>
      <artifactId>fest-assert-core</artifactId>
      <version>2.0M8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jmock</groupId>
      <artifactId>jmock</artifactId>
      <version>2.6.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.storm</groupId>
      <artifactId>storm-core</artifactId>
      <version>0.9.1-incubating</version>
      <!-- keep storm out of the jar-with-dependencies -->
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>15.0</version>
    </dependency>
  </dependencies>


  <build>
    <sourceDirectory>src/jvm</sourceDirectory>
    <testSourceDirectory>test/jvm</testSourceDirectory>
    <resources>
      <resource>
        <directory>${basedir}/multilang</directory>
      </resource>
    </resources>


    <plugins>
      <!--
        Bind the maven-assembly-plugin to the package phase
        this will create a jar file without the storm dependencies
        suitable for deployment to a cluster.
       -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass></mainClass>
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>


      <plugin>
        <groupId>com.theoryinpractise</groupId>
        <artifactId>clojure-maven-plugin</artifactId>
        <version>1.3.12</version>
        <extensions>true</extensions>
        <configuration>
          <sourceDirectories>
            <sourceDirectory>src/clj</sourceDirectory>
          </sourceDirectories>
        </configuration>
        <executions>
          <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>test</id>
            <phase>test</phase>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>


      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>exec</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <executable>java</executable>
          <includeProjectDependencies>true</includeProjectDependencies>
          <includePluginDependencies>false</includePluginDependencies>
          <classpathScope>compile</classpathScope>
          <mainClass>${storm.topology}</mainClass>
        </configuration>
      </plugin>


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>


    </plugins>
  </build>
</project>

编译storm.starter

mvn  compile exec:java -Dstorm.topology=storm.starter.WordCountTopology

下载jar包,要一段时间,我家里网速慢,如果显示下载有错误,一般是网址打不开,可能是网速问题,多运行几次

打包上传到storm集群

打包:

mvn package

发现 storm-starter目录下多了两个jar包

再提交到集群 

本地模式  storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar  storm.starter.RollingTopWords

远程模式提交

storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar  storm.starter.ExclamationTopology   ExclamationTopalogy

进程一直在运行,可以在web界面看到运行情况,并且可以杀死该任务

点击进入ExclamationTopalogy,如下图

杀死刚刚运行的topology命令

storm kill ExclamationTopalogy

转载请指明出处http://blog.csdn.net/tanggao1314/article/details/52348632

下载安装包地址http://download.csdn.net/my/uploads/1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • kafka学习之路(二)——提高

    消息发送流程 因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理。为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区。多个生产者和消费...

    汤高
  • linux shell函数定义和调用

    说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自...

    汤高
  • centos7 mysql数据库安装和配置

    一、系统环境 yum update升级以后的系统版本为 [root@yl-web yl]# cat /etc/redhat-release CentOS Li...

    汤高
  • spring boot整合dubbox进行服务拆分

    Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并...

    猿天地
  • CMD批处理——forfiles命令使用,自动删除过期备份文件

    landv
  • 乐观锁常见的两种实现方式

    一般是在数据表中加上版本号字段 version,表示数据被修改的次数。当数据被修改时,这个字段值会加1。

    happyJared
  • rpc框架: thrift/avro/protobuf 之maven插件生成java类

    thrift、avro、probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是...

    菩提树下的杨过
  • 自定义maven项目结构-maven archtype

    背景 经常使用同一套类似的工程结构,就想着能不能自动构建,不用每次都进行工程结构的拷贝,另外呢也是想建立一套项目工程结构的规范,运用技术代替人工

    shengjk1
  • 运维:记录因grpc需求而引发的glibc故障

    提示glibc版本有问题,然后打算升级,glibc.结果把/lib64/libc.so.6 给替换了,造成Linux ssh无法远程登录,bash命令无法执行。

    heidsoft
  • maven项目配置框架

    任何一个maven项目都会继承一个默认的父pom配置:Super POM,详见:https://maven.apache.org/guides/introduc...

    2Simple

扫码关注云+社区

领取腾讯云代金券