本文记录了我在centos上安装了storm的过程,主要参考了https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster这篇文章,其中对里面说得不够详细的地方进行了一些补充
1.环境
namenode.hadoop2 192.168.1.230(nimbus)
datanode1.hadoop2 192.168.1.231(supervisor)
datanode2.hadoop2 192.168.1.232(supervisor)
datanode3.hadoop2 192.168.1.233(supervisor)
datanode4.hadoop2 192.168.1.234(supervisor)
该环境中已经安装好了hadoop2.2,其中namenode为hdfs的namenode节点和yarn的ResourceManager节点,这里作为storm的nimbus进程运行节点。其余四个分别为datanode节点和nodemanager节点,这里作为storm的supervisor进程运行节点。在namenode节点上安装了一个单机的zookeeper环境。每台机器上有用户storm,用户的home目录为/home/storm,storm的安装和运行都在该用户环境下。以此为基础,安装storm。
主机名和IP的映射关系在安装hadoop的时候已经上述5个节点的在/etc/hosts中设置过了。设置的结果如下所示
192.168.1.230 namenode.hadoop2
192.168.1.231 datanode1.hadoop2
192.168.1.232 datanode2.hadoop2
192.168.1.233 datanode3.hadoop2
192.168.1.234 datanode4.hadoop2
2.免密码SSH
从后面的安装看,SSH免密码登陆不是必须的,为了方便在storm集群中同步文件,还是设置一下。
一般而言,我们需要在nimbus节点机器上将文件同步到supervisor节点上,也就是需要在nimbus节点上免密码登陆supervisor
在nimbus节点上执行如下命令生成ssh的私匙和公匙。
ssh-keygen -t rsa
全部回车,生成了id_rsa和id_rsa.pub文件,然后执行scp命令将该id_rsa.pub文件拷贝到supervisor节点上
scp ~/.ssh/id_rsa.pub datanode1.hadoop2:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub datanode1.hadoop2:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub datanode1.hadoop2:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub datanode1.hadoop2:~/.ssh/authorized_keys
这时还需要输入用户口令才能同步过去。同步完了后就可以在nimbus节点上免密码登陆各个supervisor节点了。测试
ssh datanode1.hadoop2
如果不输入密码直接ssh到datanode1.hadoop2即表明成功。如果需要各个节点互相能够免密码登陆,则可以将在每台机器上都生成id_rsa.pub文件,并将其中的内容都拷贝到nimbus节点的.ssh/ authorized_keys文件中(包括nimbus节点自己的id_rsa.pub中的内容)然后通过scp同步到各个supervisor节点上去,则可以实现storm集群所有机器之间的免密码ssh登陆。我的storm集群的5个节点的authorized_keys文件内容如下所示
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAt+Oxg8rVRKwhjaYZrUxXOpXlZkBNhD99N5nDD7gps2nFGxMbb7IUIQL9Eo8q/+odx1v04iiJzLAWWx1KbfqjSFerZ5SPAAdTysvRzHwW+16EPjd0oCtdpNiur3lyAjIZ97Y7Roht0osuYYmbWgGhB4zVeurIU3AR4OL2Fmg/LiyzMi6acovoAohiGpXWx9RS//RoRsyjb1+u0+PzcgIIGschPBX2IpMkgEg1tA68mcy6Dnoe1tNILFRgCzPGPH3PauViKrKDAxD9rqXEK7gu9Xl7NVeGaKyhJhe7SDZWctRH0lzj8OFS0n3LbvgIWF/Ce07wC7aFZs9IyzSf+YG/KQ==storm@namenode.hadoop2
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAy1lXg+KVGy1LlEM/+5WbQIO9ubrtJF3ZokSAZwFUBTJ38FhUFGkY8EkmnisYKpe/wtCZxSTfn+i4w7JdOx5MZNuJ6N01A9SoOvqNYGYcj3A4RD9KzNoc5vihWRXIZubFdpQwTdryECFiGqQ318kq6ZqWGwgFYwRLceCmUmZN6oQ5DADX3fmLKcXQ8GNywlA7rvJmmtEYbDJCD1b+66hSICk6RTvFOxx/1o4+CoFDCMSMYqD1L/l8qJcDIe5RgSIXEVG4WorZoa9KMf+LJkWH143R+B8X+8qB2E89DoZ/+d4GmBt4w65xgZBm+UzOSG41kRNqETjJADX+qL7XDX0+Lw==storm@datanode1.hadoop2
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEApH/8/XN2BhvInnKNezhpptt/EPpf2BlvoB0jgpHcCCikAoCu+zUBFw3PTYSmWBuOAApcj4aJq2Z7OG+XB0fk1jbkA80Ef574kIJQUxMB2fw6p9riWY0yERGgTm0o+duz1bGGiQtlvBK3mt8oiLIrPaGcqQafKoS23XwZ4zE759k1b8wngyUqBhycd2XDvDxsiM3NPuQSAaw73vgQkWurRHSOndipUayBD/6hRuzAnSa8DahHlsjD4VcZvb2OpWXUE2bOKwVZ5NsPjZgge9zlJVatA8nNbuJeDJ2+uHcry8mFnEzW9PkFvZmEOX/X4gPjgiTu7Gyx5m7IKKpLDZ993Q==storm@datanode2.hadoop2
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAsXl1tAEolnangnMfdSU21/yYei/Wl/vQel7Al65vm881+BHINOFoju48ADoB0Skjjmq3tLAUkstlKSsOA/itY1a8s970iNj4qcEIpVkhCMkiQe1hql20sLH/qmH88tQ6s0rlbX7aJ2jIvdxEWk0NKyyKJMueaqJQ0sR9D8NzZ5c69GkDAaI4cosabdWwW1qc4hOcVgGaeOi8sP8GifN0Zw2pGOoQTKjPENGxoqKqZUqCa1SXE2OiSWOr8cJVpBQspR/zsVA+5Pp0zX8U57iw9v8qOh7RVEP6/CFnHxGtsT2DKdbOzvLe7OPCzcIUDN61CxA2pSXR5x3+QShiiEnblQ==storm@datanode3.hadoop2
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAx6TR0phPI2YcCp1ThH5s/uMZAL+iZWu8zFx6RyNva1S7x0e8NL8Z+xo93EiVv9CEcrzYZSqDhvH9K90l/pEMUcm8rmr74bL4V4Ptyre9SidK3uUUbPf9uQLnThsts6yNLVk6/kFg2ozFx1hSg1fDTSKzd7ZHzwToL9qvPmjY93T3SEE2Cow3bfmwOHVu94h2oM5XSpQJtfTWXNL3/RSROqdKfDcRMgwNmFjitjU/1TBppxIHeGIcas0Rlzao0UPxCTmILGdM4WV9OQMUYMZkmnlACjRtV0LP3CY+p4kyZMw+thKzj24Sgwg69GpVnZZ7/oi5wJZzSsL3qmOUlv/5jw==storm@datanode4.hadoop2
3.安装依赖环境
根据官方文档,要求在每台机器下安装如下的依赖环境
1. ZeroMQ 2.1.7 根据要求,必须安装此版本,其余版本不保证正确,如果用户遇到一些奇怪的问题,尝试降到2.1.4试试(吐槽)
2. JZMQ 是ZeroMQ 的JAVA语言包。应该是用它来和ZeroMQ进行交互的
3. JAVA6 既然官方文档严格说要求JAVA6,我就直接下载了该版本,没有花精力去验证JAVA7是否可以。
4. python2.6.6,这个centos6.4上面默认安装的就是2.6.6。省了我这步(原来我还吐槽说CENTOS默认的python版本为啥是这个,原来是这个原因)
5. unzip,因为storm的包是zip格式的,这个是用来解压用的
将下载的zeromq-2.1.7.tar.gz、jzmq-master.zip、jdk-6u45-linux-i586.bin文件上传到要安装的nodename机器上。
3.1设置JAVA_HOME
在storm用户下执行上传的jdk-6u45-linux-i586.bin命令解压
./jdk-6u45-linux-i586.bin
这个过程将在/home/storm目录下生成jdk1.6.0_45目录,包含了JAVA1.6的开发和运行环境。编辑/home/storm/.bash_profile,在里面加入如下的行
JAVA_HOME=/home/storm/jdk1.6.0_45
export JAVA_HOME
修改的JAVA_HOME需要退出重新登录或者执行source /home/storm/.bash_profile才能生效。不设置该环境变量,将在安装JZMQ的./configure过程中出现错误提示
3.2安装ZeroMQ 2.1.7
3.2.1安装c和c++编译环境
ZeroMQ安装是C和C++源代码编译安装的,所以首先需要确认是否安装了默认的c和c++编译环境。在centos上安装c和c++编译环境在root下输入如下命令行。该命令需要联网下载相关安装依赖包,所以确保你的机器可以联网。
yum install gcc
yum install g++
如果已经安装了,执行上述命令也没有问题。
3.2.2安装uuid-dev
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。安装该组件在root用户下输入如下的命令行。同样输入命令前需要保证机器可以访问互联网。
yum install uuid*
yum install e2fsprogs*
yum install libuuid*
3.2.3将storm加入到sudo组中
在root用户下编辑文件/etc/sudoers,在其中加入一行storm ALL=(ALL) ALL,保存退出
3.2.4安装ZeroMQ2.1.7
切换到storm用户,进入路径/home/storm。输入如下命令挤压zeromq-2.1.7.tar.gz包
gzip –d zeromq-2.1.7.tar.gz
tar –xvf zeromq-2.1.7.tar
进入目录zeromq-2.1.7执行如下命令
./configure
make
sudo make install
其中要注意执行./configure的提示,如果环境方面有什么问题,将会在提示中给出。另外执行make install之前必须要加sudo 前缀,让临时具备超级用户的权限。第一次执行sudo需要输入storm的密码
3.3安装JZMQ
在storm用户下执行
./autogen.sh
./configure
make
sudo make install
其中执行./autogen.sh时,我的环境下提示如下
autogen.sh: error: could not find libtool. libtool is required to run autogen.sh.
切换回root,执行命令
yum install libtool
解决该问题
3.4安装unzip
在root用户下下执行命令行
yum install unzip
4.安装storm
首先在nimbus节点上安装
4.1安装
unzip storm-0.8.1.zip
在/home/storm目录下生成storm-0.8.1目录,其中包含storm包的文件
mkdir stormlocale
该目录用来配置后面的storm临时存储文件目录
4.2配置
编辑 storm-0.8.1/etc/storm.yaml文件,增加如下内容
storm.zookeeper.servers:
-"namenode.hadoop2"
#配置zookeeper路径,如果是多个增加多行的- "hostname"
storm.local.dir: "/home/storm/stormlocale"
#storm存储临时文件的地方
nimbus.host: "namenode.hadoop2"
#运行nimbus角色的主机名
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
#可选的运行supervisor角色的主机上worker的个数及端口,这是默认配置,不配置也是取这四个值。如果需要增减可运行的worker的个数及修改默认的端口,修改这个配置
4.3同步
执行如下命令从nimbus节点奖配置好的storm-0.8.1安装包同步到各个superivsor
scp -r ~/storm-0.8.1datanode1.hadoop2:~/
scp -r ~/storm-0.8.1datanode2.hadoop2:~/
scp -r ~/storm-0.8.1datanode3.hadoop2:~/
scp -r ~/storm-0.8.1datanode4.hadoop2:~/
以上命令将storm-0.8.1目录从nimbus节点上同步到其余的四个supervisor节点上。为了同步环境变量(设置的PATH,JAVA_HOME)还可以执行下面的语句
scp ~/.bash_profiledatanode1.hadoop2:~/
scp ~/.bash_profiledatanode2.hadoop2:~/
scp ~/.bash_profiledatanode3.hadoop2:~/
scp ~/.bash_profiledatanode4.hadoop2:~/
这个实际应该在一开始在.bash_profile文件中设置好JAVA_HOME以及将/home/storm/ storm-0.8.1/bin目录设置为PATH路径后即可执行。
4.4运行
在nimbus节点上(及namenode.hadoop主机)上执行如下命令启动nimbus进程
nohup storm nimbus &
在supervios节点上(即datanode1.hadoop2、datanode2.hadoop2 datanode3.hadoop2datanode4.hadoop2)执行如下命令启动supervisor进程
nohup storm supervisor&
在nimbus节点上执行如下命令启动storm的web ui进程
nohup storm UI &
这时,就可以在浏览器输入http://namenode.hadoop2:8080/来打开storm的web ui界面,如下所示
当然,要你的机器识别namenode.hadoop2,需要你设置hosts配置,在windows7 64位版本中是C:\Windows\System32\drivers\etc\hosts文件,我增加了如下的几行
192.168.1.230 namenode.hadoop2
192.168.1.231 datanode1.hadoop2
192.168.1.232 datanode2.hadoop2
192.168.1.233 datanode3.hadoop2
192.168.1.234 datanode4.hadoop2
下一篇
Storm0.8.1的(mapreduce) Spout/Blot编程实例实例详解