在 storm 上运行 python 程序

优质
小牛编辑
132浏览
2023-12-01

安装lein

下载安装脚本

wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein

把lein放到~/bin下并chmod +x lein增加可执行权限(默认我们的bash是会自动把~/bin加到PATH环境变量里的)

执行lein,自动下载安装所需的软件包

安装streamparser

如果没有安装pip(python包的管理工具),先安装pip

wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
python get-pip.py

这时pip就安装好了,执行

pip -h

能看到帮助信息

安装virtualenv命令

pip install virtualenv

安装python-dev,执行

yum install python-devel

安装streamparser,执行

pip install streamparse

注意:如果你是在直接使用root账户,那么需要在~/.bash_profile中添加

export LEIN_ROOT=1

这是因为在root账户下使用lein时会有警告提示并等待你输入回车才能继续,这样的话下面你执行sparse命令时会莫名其妙的被卡住

创建第一个项目,执行

sparse quickstart wordcount

运行:

cd wordcount
sparse run

先会有一段较长时间的编译过程,之后会不断输出log如下说明运行正常:

51774 [Thread-25] INFO  backtype.storm.task.ShellBolt - ShellLog pid:27202, name:count-bolt elephant: 1327
51776 [Thread-25] INFO  backtype.storm.task.ShellBolt - ShellLog pid:27202, name:count-bolt dog: 1335
51781 [Thread-27] INFO  backtype.storm.task.ShellBolt - ShellLog pid:27227, name:count-bolt cat: 1335
51783 [Thread-27] INFO  backtype.storm.task.ShellBolt - ShellLog pid:27227, name:count-bolt zebra: 1328
51784 [Thread-25] INFO  backtype.storm.task.ShellBolt - ShellLog pid:27202, name:count-bolt elephant: 1328

这都是在本地模拟运行,下面讲解如何部署到真正的storm集群运行

部署到storm并运行

修改config.json文件,配置好自己的storm集群,如下:

{
    "library": "",
    "topology_specs": "topologies/",
    "virtualenv_specs": "virtualenvs/",
    "envs": {
        "prod": {
            "user": "",
            "nimbus": "centos",
            "workers": ["centos"],
            "log": {
                "path": "",
                "max_bytes": 1000000,
                "backup_count": 10,
                "level": "info"
            },
            "virtualenv_root": "/tmp/virtualenvs/"
        }
    }
}

然后执行sparse submit

等待较长时间之后如果出现了:Finished submitting topology: wordcount,说明部署成功

可能存在的问题

问题1:如果你在部署的单机storm上执行sparse submit还有可能报错:

IOError: Local port: 6627 already in use, unable to open ssh tunnel to centos:6627

这是因为端口冲突,解决方案就是你找到另外一台机器来安装streamparse并创建wordcount提交就可以了

问题2:如果你部署的storm是1.0.1版本,而sparse版本当前还不支持storm 1.0.1,因此即使部署上去了还是会报错不能正常执行,所以只能部署一个0.9.5版本的storm或者等待sparse什么时候支持1.0.1了

修改project.clj,把

:dependencies  [[org.apache.storm/storm-core "0.9.5"]

改成

:dependencies  [[org.apache.storm/storm-core "1.0.1"]