美文网首页
垦荒记|Storm集群搭建

垦荒记|Storm集群搭建

作者: 翱翔云端 | 来源:发表于2018-02-03 16:38 被阅读0次
    Storm集群一览

    最近做个项目,出差到现场后,发现只有裸机,一堆机器裸奔,连个内裤都没穿!哥只能从给它们穿衣服开始,这是名副其实的垦荒啊。垦荒记系列就写写那些垦荒的经历吧。
    怎么给机器穿衣服这事这里不讨论了,今天来聊一聊怎么从零开始搭建自己的Storm集群。
    一提到搭环境,相信很多朋友都有一把心酸泪啊,所以我称为垦荒。的确,搭环境就像垦荒地,满地荆棘丛生,遍地是坑。可喜的是,像Storm这样站在Hadoop肩膀上成长起来的大数据计算框架,做得简单清爽、玲珑剔透,搭建集群也简单易行。然而,要搭个生产环境中使用的Hadoop集群,难度系数比Storm不知道大多少倍。这主要是由于Storm的复杂性远远比不上Hadoop。
    Storm集群的图纸我已经在上图给出,由图可知,搭建Storm集群分两步走即可。

    01 搭建Zookeeper集群

    Storm集群依靠Zookeeper集群来进行集群管理,因此首先需要搭个Zookeeper集群。Storm集群对Zookeeper集群的压力非常小,因此搭个三台机器组成的集群足够了。
    下面是搭Zookeeper集群的基本步骤。
    1.官网下载相应版本的压缩包。本文使用zookeeper-3.4.6.tar.gz。
    以下步骤在每台机器上执行。那问题来了,我们要依次在不同的机器上去敲相同的命令吗?这样太乏味了,这种体力活,几台机器还好,万一搭个成千上万台机器的集群,估计要疯了!这里有个小技巧,使用一个远程工具,我用的是Xshell,输入一条命令,然后同时发射到各台机器上去执行。具体做法很简单,不会就百度下。
    2.新增个用户,就叫zookeeper吧,方便以后对zookeeper进行管理。
    执行以下命令需要root权限。

    # useradd zookeeper    #新增用户zookeeper
     #修改zookeeper用户密码,回车后输入你想设置的密码即可,光标是不会动的,你直接输入即可
    # passwd zookeeper   
    

    3.注销root用户,使用zookeeper用户登录。
    4.将下载下来的压缩包上传到zookeeper家目录/home/zookeeper下。
    5.解压。

    #此处执行这条命令即可,不推荐重命名解压后的文件夹
    $ tar -zxvf zookeeper-3.4.6.tar.gz
    

    6.配置集群信息。

    #到zookeeper配置文件目录
    $ cd zookeeper-3.4.6/conf/
    #看看该目录下的文件列表
    $ ll
    #这时你应该看到有一个叫zoo_sample.cfg的文件
    #把zoo_sample.cfg复制一份,叫zoo.cfg,它就是zookeeper集群配置文件
    $ cp zoo_sample.cfg zoo.cfg
    #看看zoo.cfg文件内容
    $ cat zoo.cfg
    #这时你应该看到以下内容
    
    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/tmp/zookeeper
    # the port at which the clients will connect
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    
    #以上这些配置项写得很直白,如果看不懂,这里有详细说明:
    #  https://www.cnblogs.com/yangsy0915/p/5932756.html
    

    接下来,我们要修改zoo.cfg,定制我们的配置。
    首先是dataDir这个配置项。这是存放zookeeper运行时数据的目录,如果没有日志存放目录配置dataLogDir,zookeeper运行日志也会到这个目录下。我推荐把dataLogDir也配置上,方便后期维护。
    然后是autopurge.snapRetainCount和autopurge.purgeInterval这两个配置项。这两个配置项的含义看看注释就懂,如果你不想手动去清理zookeeper运行时产生的数据,最好配上,让它自己去清理。
    最后是集群信息配置,就是告诉zookeeper集群中各机器的地址。这个配置项长这样。

    server.x=hostname:port1:port2
    # x是机器编号,从1开始递增,要在dataDir下新建一个文件myid,里面只有一个数字,就是这里的x
    # hostname是机器的主机名
    # port1是zookeeper集群Leader和Follower之间进行数据同步的通信端口
    # port2是zookeeper集群进行Leader选择的通信端口
    

    对zoo.cfg进行以上修改就可以了,其他配置默认就好。参考配置如下。

    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/home/zookeeper/zookeeper-3.4.6/data
    dataLogDir=/home/zookeeper/zookeeper-3.4.6/log
    # The number of snapshots to retain in dataDir
    autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    autopurge.purgeInterval=6
    #the zookeeper cluster information
    server.1=zookeeper01:2888:3888
    server.2=zookeeper02:2888:3888
    server.3=zookeeper03:2888:3888
    

    最后别忘记在各机器的dataDir下新建一个文件myid,里面写上给该机器分配的编号。
    7.启动zookeeper集群。
    控制zookeeper运行状态的操作都在bin/zkServer.sh这个脚本中。

    $ cd zookeeper-3.4.6/bin/
    #启动zookeeper,作为后台进程运行
    $ sh zkServer.sh start &
    

    网上有些人的博客,在执行zookeeper启动命令时,把输出全部扔到Linux黑洞(null)里面,这是我强烈反对的,zookeeper运行时的输出对我们是有用的,初学者在启动zookeeper报错时就可以看它的输出来获得解决办法。
    执行zookeeper启动命令后,可以在bin目录下的zookeeper.out文件中看看运行日志,如果没有ERROR,说明正常,有错误就根据提示解决。
    zookeeper常用控制命令。

    #启动zookeeper服务   
    $ sh zkServer.sh start
    #查看zookeeper服务状态     
    $ sh zkServer.sh status
    #停止zookeeper服务
    $ sh zkServer.sh stop
    #重启zookeeper服务
    $ sh zkServer.sh restart
    

    02 搭建Storm集群

    有了Zookeeper集群,再来搭Storm就简单了。
    1.Storm官网下载相应版本的压缩包。本文使用apache-storm-1.0.0.tar.gz。
    以下步骤在每台机器上执行。
    2.新建storm用户,方便以后对storm进行管理。
    3.使用storm用户登录Linux服务器。
    4.将storm压缩包上传到storm家目录/home/storm下。
    5.解压。

    #此处执行这条命令即可,不推荐重命名解压后的文件夹
    $ tar -zxvf apache-storm-1.0.0.tar.gz
    

    6.配置storm集群信息。

    #到storm配置文件目录
    $ cd apache-storm-1.0.0/conf/
    #看看该目录下的文件列表
    $ ll
    

    这时你可以看到有一个叫storm.yaml的文件,在该文件中加入集群信息即可完成配置。

    #查看storm.yaml文件内容
    $ cat storm.yaml
    #这时你应该看到以下内容
    
    # Licensed to the Apache Software Foundation (ASF) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The ASF licenses this file
    # to you under the Apache License, Version 2.0 (the
    # "License"); you may not use this file except in compliance
    # with the License.  You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ########### These MUST be filled in for a storm configuration
    # storm.zookeeper.servers:
    #     - "server1"
    #     - "server2"
    # 
    # nimbus.seeds: ["host1", "host2", "host3"]
    # 
    # 
    # ##### These may optionally be filled in:
    #    
    ## List of custom serializations
    # topology.kryo.register:
    #     - org.mycompany.MyType
    #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer
    #
    ## List of custom kryo decorators
    # topology.kryo.decorators:
    #     - org.mycompany.MyDecorator
    #
    ## Locations of the drpc servers
    # drpc.servers:
    #     - "server1"
    #     - "server2"
    
    ## Metrics Consumers
    # topology.metrics.consumer.register:
    #   - class: "org.apache.storm.metric.LoggingMetricsConsumer"
    #     parallelism.hint: 1
    #   - class: "org.mycompany.MyMetricsConsumer"
    #     parallelism.hint: 1
    #     argument:
    #       - endpoint: "metrics-collector.mycompany.org"
    

    在storm.yaml文件中,我们修改两个配置项即可。首先是storm.zookeeper.servers这个配置项,它告诉storm Zookeeper服务器的地址。其次是nimbus.seeds这个配置项,它告诉storm Nimbus节点的地址。这两个地址可以直接写ip地址,也可以写主机名,推荐写主机名。还有一个叫supervisor.slots.ports配置项,他是supervisor守护进程工作的端口号,一个supervisor守护进程工作在一个端口上。storm默认配置了4个supervisor守护进程工作端口号,分别是6700、6701、6702和6703。如果你需要起超过四个supervisor进程,在配置文件中加入该配置项即可。本文的storm配置信息如下。

     storm.zookeeper.servers:
         - "zookeeper01"
         - "zookeeper02" 
         - "zookeeper03" 
     nimbus.seeds: ["storm01", "storm02"]
    

    7.启动storm守护进程。
    控制storm各守护进程运行的都是$STORM_HOME/bin下的storm.sh脚本。

    #启动nimbus,作为后台进程运行
    #在各nimbus节点执行
    $ sh storm.sh nimbus &
    
    #启动supervisor,作为后台进程运行
    #在各supervisor节点执行
    $ sh storm.sh supervisor &
    
    #启动storm UI,作为后台进程运行
    #在nimbus节点执行
    $ sh storm.sh ui &
    

    注意输出,如果有报错,根据错误提示去寻找解决办法,如果没有报错,你可以浏览器访问storm UI了,http://{nimbus_host}:8080。
    至此,storm集群搭好了,可以喝杯茶歇歇了!

    相关文章

      网友评论

          本文标题:垦荒记|Storm集群搭建

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