最近做个项目,出差到现场后,发现只有裸机,一堆机器裸奔,连个内裤都没穿!哥只能从给它们穿衣服开始,这是名副其实的垦荒啊。垦荒记系列就写写那些垦荒的经历吧。
怎么给机器穿衣服这事这里不讨论了,今天来聊一聊怎么从零开始搭建自己的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集群搭好了,可以喝杯茶歇歇了!
网友评论