Storm1.1.0 版本安装过程总结

本文分享了作者在部署Storm集群过程中的经验教训,包括解决scp命令未找到、远程传输、JDK安装、telnet组件安装、Zookeeper及Storm的安装配置等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先还是要自我检讨一下,最近太懒了,关于Storm的书虽然看了不少,可是时间久了,加之没有机会实战,很多知识都忘记了。以至于现在回想起来,很多都犹如新知识,不禁身出冷汗,作为一个技术狗,这样怎可了得,故此这周开始再厉学习,咱们的老祖宗,朱熹(宋)说得好啊“学习知之愈明,则行之愈笃。行之愈笃,则知之益明。” 俗话也说 “有知识的人不实践,等于一只蜜蜂不酿蜜。”

这Storm看似简单的部署,可是折腾了我好半天,安装配置过程也真是苦尽甘来,借鉴了网上很多细心的人,安装过程足够详尽,可是到了自己这里还是各种问题,以致于用了两天时间才彻底搞定Storm集群部署。还是记录下来一些踩过的“坑”,一来加深印象,二来也是感激那些细心的人,前人栽树,后人乘凉!

由于本次安装完全是基于一套纯净的Linux Redhat 64bit机器,很多基础组件都没有,所以稍显麻烦,但是这也验证了能够运行Storm需要的基础组件都有哪些。我的本地是一台MacBook Pro,也需要安装一些组件来才能完成目标机器上Storm的安装部署。那就先从本地机器装起吧!!!

因为我需要向远程的三台Linux 机器传输下载的安装包,那么最简单的办法是利用scp命令,这是一个Linux平台的远程传输工具,相信大家都很熟悉,但如果在本地命令终端窗口输入scp命令,提示的是:
-bash: scp: command not found。 而你简单的认为yum install scp 那就错了,结果会提示:
No package scp available.
 由上可见提供的软件包一定不是叫scp
, 一般情况下服务器都有scp ,可以找一台以前有scp 的机器查看一下 此命令由哪个软件包提供
,

[root@localhost ~]# which scp
/usr/bin/scp


[root@localhost ~]# rpm -qf /usr/bin/scp
openssh-clients-5.3p1-94.el6.x86_64


于是可见scp这东西应该属于openssh-clients这个包。那么你需要运行:
yum install openssh-clients -y


再运行scp就可以了,再次运行:
如果输入密码后又再次提示:
bash: scp: command not found
。那可能就是你的目标主机也要安装一下了,如果没有安装的话
在目标主机也同样安装一下openssh-clients,问题就可以解决了。

(1)上面的步骤完成后,基本我们就具备了远程传输功能,这个功能还是比较方便的,建议在部署前将这个工具安装好。接下来我们移师到目标机器上,我们需要

#ssh root@ip address 到目标机器上,然后创建一个一般账户并将其加入root 组。具体我参考了这个文章:

http://www.cnblogs.com/daizhuacai/archive/2013/01/17/2865132.html

如果你执意用root安装那就可以跳过这个步骤。但是生产环境,一起操作需要谨慎,因此还是建议大家用一般账户完成部署。

(2) 上传,安装JDK

 切换到JDK安装包所在的路径,通过scp命令上传。

#scp jdk-7u80-linux-x64.tar.gz root@ip address:/usr/henry/

具体安装过程可以借鉴,但切记要测试,确保java 版本是1.7:

https://jingyan.baidu.com/article/91f5db1bdb7ee41c7e05e373.html

(3)安装telnet 组件

telnet组件会在测试zookeeper安装部署后,用来测试,telnet也只是一种测试手段,其实,你也可以用zookeeper自带的zkCli 来测试,后面我会具体讲到。那么具体安装telnet可以参考:

http://www.tuicool.com/articles/67be6f

(4)安装部署 Zookeeper

其实安装部署Zookeeper是挺简单的,网上搜罗安装部署步骤非常多,随便点一两个就可以完成,那么我在安装部署遇到的问题是什么?

其实我打算安装的目标机器,之前竟然已经有人安装过zookeeper,而且加到默认启动项了,安装部署Zookeeper之前,我并没查看端口使用情况,因此在启动过程中,用zkServer.sh start命令,它竟然显示启动成功,我错以为一切都是正常的,但是用telnet和zkCli -server ip address:2181总是失败,后来尝试改变Zookeeper默认的端口号为2180,结果还是不行,用zkServer.sh status 命令查看状态,也还是提示,即便使用net stats|grep 2180 发现端口没有占用,正常监听也不行,因为zookeepr的进程已经启动在哪里,所以无论如何你都不可能在一台机器上启动多个zookeeper进程。

[root@hdp036186 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/softwares/zookeeper-3.4.9/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

直到输入命令出现如下信息,才表示Zookeeper是ok的。

[root@hdp036185 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/softwares/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower

过程中我还修改了主机名,在Zookeeper的zoo.cfg中都是用机器名关联,各人觉得使用机器名可以避免DNS解析的一些问题。

接下来进入Storm的安装

(1)下载稳定版的Storm(http://storm.apache.org/downloads.html):我下载的是apache-storm-1.1.0.tar.gz,没什么好说的,根据你的喜好下载就好了,我比较喜欢新鲜的,但是后面发现,从0.9版本以后,经过了一些调整,原来ZeroMQ和JMQ,只作为可选组件,不是必选组件,消息处理继承了Netty作为消息传输时设置成了backtype.storm.messaging.netty,Context.   其中参数zmq.threads,在Storm0.9.0.1 也支持基于ZMQ的消息传递机制,默认是不打开的。建议使用默认值。因此整个安装过程只需要JAVA1.7和Python2.6 的支持,这其实大大减少了安装过程的复杂性, 但是需要注意的是,Strom的配置文件为yaml文件,它位于storm压缩包中的conf 目录下,配置项前后都必须跟一个空格才能跟配置值!!切记!!!!!

要部署Storm,需要部署以下几个相关组件。
JDK:可以到Oracle官网下载并部署,设置环境变量(JAVA_HOME、PATH和CLASSPATH)并使之生效;JDK部署完成后通过java -version命令可以查看到对应的JDK版本。

ZooKeeper:Storm本身重度依赖于ZooKeeper,同时在我们线上的环境中还有其他依赖于ZooKeeper的服务,因此单独部署一个专门用于流式计算的ZooKeeper是非常有必要的。
Storm:Storm可以从其官方地址http://storm.apache.org/下载。
http://www.apache.org/dyn/closer.lua/storm/apache-storm-1.1.0/apache-storm-1.1.0.tar.gz
若部署0.9版本之前的Storm,还需要安装ZMQ和JZMQ(除非作为研究之用,否则不推荐)。Storm在0.9之前使用的消息传输机制是 ZMQ,从0.9开始引入Netty(也还支持ZMQ)。相比ZMQ的C实现,纯Java实现的Netty能够提供更好的性能和可管理性(ZMQ不能通过 -Xmx等对内存进行管理)。
在Yahoo!中运行着一个超过250个节点的Storm集群,雅虎改进了Storm对ZooKeeper的依赖,使得0.9.2版本时一个ZooKeeper集群已经能够支持2000个节点,而他们的目标是到2015年一个Storm集群支持超过4000个节点。

如下是我的Storm.yaml配置,需要空格的地方我标识出来了,大家在对应修改的时候请参看空格的位置。

<万恶的空格> storm.zookeeper.servers:
     - <万恶的空格>"hdp036184"
     -<万恶的空格> "hdp036185"
     - <万恶的空格>"hdp036186"

<万恶的空格> storm.zookeeper.port:
     - <万恶的空格>2181

<万恶的空格> storm.local.dir: <万恶的空格>"/usr/henry/components/apache-storm-1.1.0/workdir"
 <万恶的空格>nimbus.host:<万恶的空格> "hdp036184"
 <万恶的空格>nimbus.seeds<万恶的空格> ["hdp036184",<万恶的空格> "hdp036185", <万恶的空格>"hdp036186"]
 <万恶的空格>supervisor.slots.ports:
     - <万恶的空格>6700
     -<万恶的空格> 6701
     - <万恶的空格>6702
     - <万恶的空格>6703

完成以上步骤,我们就可以启动Storm了,进入Storm安装目标的bin目录中,依次执行如下命令:在没有运行任务时,我们必须应该要看到5个进程:QuorumPeerMain、nimbus、core、Jps、supervisor。否则就需要检查是否正确地启动,如果启动之后没有过多久就停止了,我们就需要查看~/storm-1.1.0/logs下面的对应的log文件,查看引起异常的原因是什么,然后解决后再次启动。

[root@localhost bin]# ls
flight.bash  storm  storm.cmd  storm-config.cmd  storm-local  storm.py
# 启动nimbus
[root@localhost bin]# ./storm nimbus >/dev/null 2>&1 &
[1] 49953
# 启动supervisor
[root@localhost bin]# ./storm supervisor >/dev/null 2>&1 &
[2] 49978
# 启动 stormUI
[root@localhost bin]# ./storm ui >/dev/null 2>&1 &
[3] 50051

同时,我们可以在虚拟机浏览器中输入http://localhost:8080来进入Storm UI的界面,可以查看Storm运行期间的相关信息。

通过jps 命令可以查看进程是否启动成功

  Storm 启动后进程对应关系
  core   对应的进程是Storm UI 341

  Jps     对应的进程是Java jps

  nimbus 对应的进程是Storm nimbus

 supervisor 对应的进程是Storm supervisor 

 worker 对应的线程,所以你要想运行15个worker,那么Storm main函数里面设置 的 conf.setNumWorkers(15) ,

QuorumPeerMain对应的进程是zkServer.sh  其中在nimbus上nimbus、 core和QuorumPeerMain这三个进程必须启动,如果启动失败,需要研究一下日志中失败的原因,按照上述的顺序再启动一次。否则会导致下一步的topology提交失败,切记。

错误记录:
这里在启动numbus时候,遇到一个错误,
java.lang.RuntimeException: Something wrong with network/dnsconfig, host cant figure out its name 需要修改hostname 
需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常。首先切换到root用户。 
/etc/sysconfig/network
用任一款你喜爱的编辑器打开该文件,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。 
/etc/hosts
打开该文件,会有一行 127.0.0.1 localhost.localdomainlocalhost 。其中 127.0.0.1 是本地环路地址, localhost.localdomain 是主机名(hostname),也就是你待修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。将第二项修改为你的主机名,第三项可选。
将上面两个文件修改完后,并不能立刻生效。如果要立刻生效的话,可以用 hostname your-hostname 作临时修改,它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面两个文件是永久的,重启系统会得到新的主机名。

关闭防火墙

systemctl stop firewalld.service #停止 systemctl disable firewalld.service #禁用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值