`
dawuafang
  • 浏览: 1160216 次
文章分类
社区版块
存档分类
最新评论

Twitter Storm 安装实战-本地+集群

 
阅读更多


特别感谢 安分守己的好公民@新浪博客 见龙在天@网易博客 & 徐明明 & 圆石技术之路@51CTO博客

-----------------------------------------------------------------------------------------

Storm的依赖软件比较多,需要装Python、zookeeper、zeromq以及jzmq,然后才是storm的安装。

首先说一下Storm的单机版安装过程。

第一步,安装Python2.7.2

追加/usr/local/lib/

  • # sudo ldconfig

这样的话,Python2.7.2就安装完毕了。

第二步,安装zookeeper

追加:

export ZOOKEEPER_HOME="/path/to/zookeeper"

exportPATH=$PATH:$ZOOKEEPER_HOME/bin

  • # cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg (用zoo_sample.cfg制作$ZOOKEEPER_HOME/conf/zoo.cfg)
  • # sudo mkdir /tmp/zookeeper
  • # sudo mkdir /var/log/zookeeper

好的,zookeeper的单机安装已经完成了。

第三步,安装zeromq以及jzmq

jzmq的安装貌似是依赖zeromq的,所以应该先装zeromq,再装jzmq。

1)安装zeromq:

这里要说一下在./configure中可能会遇到的问题:

首先我遇到了:configure:error:in '/usr/local/download/zeromq-2.1.7':

congifure:error:no acceptable C compiler found in $PATH

See'config.log'for more details

这是因为没有安装C编译器。

解决方法是:# yum install gcc*

之后遇到的问题是:Error:cannot link with -luuid, install uuid-dev

这是因为没有安装uuid相关的package。

解决方法是:# yum install uuid*

# yum install e2fsprogs*

# yum install libuuid*

问题解决了以后就可以make和make install了,如此这般,zeromq就安装好了,接下来我们安装jzmq。

2)安装jzmq

  • # yum install git
  • # git clone git://github.com/nathanmarz/jzmq.git
  • # cd jzmq
  • # ./autogen.sh
  • # ./configure
  • # make
  • # make install

然后,jzmq就装好了,这里有个网站上参考到的问题没有遇见,遇见的童鞋可以参考下。在./autogen.sh这步如果报错:autogen.sh:error:could not find libtool is required to run autogen.sh,这是因为缺少了libtool,可以用#yum install libtool*来解决。

第五步,安装Storm

追加export STORM_HOME=/usr/local/storm-0.7.1

export PATH=$PATH:$STORM_HOME/bin

到此为止单机版的Storm就安装完毕了。

第六步,测试一下本地模式的WordCount

Github里有一个例子叫做storm_starter,我们可以用它来做测试。

按照http://github.com/nathanmarz/storm-starter,执行这个程序需要用lein,我们用eclipse代替lein。打包后进行上传。

执行命令:# storm jar StormStarter.jar storm.starter.WordCountTopology

如果出现下面的文字,说明运行成功了~

....

11367 [Thread-25] INFO backtype.storm.daemon.task - Emitting: class storm.starter.ExclamationTopology$ExclamationBolt source: 2:3, stream: 1, id: {}, [golda!!!]

....

---------------------------------------------------------------------------------------------

下面写一个集群版的Storm安装。我在做的时候是把集群里的每台机器都按照单机版安装了一遍,并都有WordCount测试了一遍,最后才修改配置文件的,当然配置过程中也会有这样那样的问题。这种方法比较繁琐,如果不仔细,容易漏掉配置文件,特别像我这种特别粗心的、经常把server写成sever导致zookeeper总是standalone模式运行的人,更是漏洞百出。所以推荐还是几台机器同时安装比较好~ BTW,我喜欢把所有安装包都download到集群上再安装,不过这是个习惯问题,网上下还是先download好,不是什么大问题~

那么我们切入正题。因为像我那样的安装方法太过繁琐,所以这里给一个Storm集群的完整安装过程。

首先要讲一下我手头的机器,我准备先用4台机器搭建一个小型的Storm集群,集群中的机器是cluster、compute-0-0、compute-0-1、computer-0-2,很显然,cluster就是nimbus,compute这三台就是supervisor。

那么我们就要来修改一下我们的/etc/hosts文件了。因为集群中这些是配置好的,所以我们打开看一下。

#vi /etc/hosts/

127.0.0.1 localhost.localdomain localhost

10.1.1.1 cluster.local cluster
10.1.255.254 compute-0-0.local compute-0-0
10.1.255.253 compute-0-1.local compute-0-1
10.1.255.252 compute-0-2.local compute-0-2

好了,接下来我们就要开始Storm的集群安装之旅了。

第一步,仍然是要安装Python-2.7.2。这一步是所有机器上都要做的,步骤和单机版一致,这里就不浪费时间再叙述一遍了。

第二步,安装zookeeper-3.3.3。由于zookeeper的算法是要求单数台机器完成,所以在配置的时候必须注意zookeeper要配置单数台机器,配置偶数台机器会出现一些无法预知的错误。

在这4台机器中,我们选择cluster、compute-0-0、compute-0-1并配置zookeeper。

依然如单机版下载、复制配置文件zoo.cfg:

追加:

export ZOOKEEPER_HOME="/path/to/zookeeper"

exportPATH=$PATH:$ZOOKEEPER_HOME/bin

  • # cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg (用zoo_sample.cfg制作$ZOOKEEPER_HOME/conf/zoo.cfg)

这里开始和单机版不一样了:

  • # vi /usr/local/zookeeper/conf/zoo.cfg

这里是配置zookeeper最关键的一步,也就是修改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.
dataDir=/state/partition1/tmp/zookeeper/data
dataLogDir=/state/partition1/tmp/zookeeper/log
# the port at which the clients will connect
clientPort=2181
server.0=cluster:2888:3888
server.1=compute-0-0:2888:3888
server.2=compute-0-1:2888:3888

  • # echo 0 > /state/partition1/tmp/zookeeper/data/myid

这一步是每台电脑上都不同的。具体的对应关系参见zoo.cfg中的server.x=hostname:portNumber:portNumber。也就是说在我的配置文件中,cluster的echo是0,compute-0-0的echo是1,compute-0-1的echo是2。

  • # bin/zkSever.sh start

这步是启动三台机器上的zookeeper,每台机器都要做。

接下去有几个命令是查看集群中zookeeper状态的:

  • # echo ”stat“ | nc HOSTMASTER 2181
  • # echo ”conf“ | nc HOSTMASTER 2181
  • # echo ”dump“ | nc HOSTMASTER 2181
  • # echo ”wchs“ | nc HOSTMASTER 2181
  • # echo ”ruok“ | nc HOSTMASTER 2181
  • # bin/zkCli.sh.stat /
  • # bin/zkCli.sh ls /

然后创建zookeeper临时文件。

  • # sudo mkdir /tmp/zookeeper
  • # sudo mkdir /var/log/zookeeper

好的,zookeeper的集群安装已经完成了。

第三步,安装zeromq和jzmq。这步也和单机版一致。下面我们来安装storm。

第四步,安装storm。storm的安装和单机版也一样,但比较纠结的是storm的配置文件storm.yaml。当然,这也是每台机器都要配的。

这个脚本文件写的不咋地,所以在配置时一定注意在每一项的开始时要加空格,冒号后也必须要加空格,否则storm就不认识这个配置文件了,切记切记。

好的,那么我们来看一下这个配置文件是什么。

# vi conf/storm.yaml

我的配置内容是这样的:

nimbus.host: "cluster"

storm.local.dir: "/state/partition1/tmp/storm"

storm.zookeeper.servers:
- "cluster"
- "compute-0-0"
- "compute-0-1"

storm.zookeeper.port: 2181

说明一下:storm.local.dir表示storm需要用到的本地目录。nimbus.host表示那一台机器是master机器,即nimbus。storm.zookeeper.servers表示哪几台机器是zookeeper服务器。storm.zookeeper.port表示zookeeper的端口号,这里一定要与zookeeper配置的端口号一致,否则会出现通信错误,切记切记。当然你也可以配superevisor.slot.port,supervisor.slots.ports表示supervisor节点的槽数,就是最多能跑几个worker进程(每个sprout或bolt默认只启动一个worker,但是可以通过conf修改成多个)。

好的,到这里,我们的storm集群就配置好了。

接下来我们测试一下,依然用我们打包好的storm-start.jar。通过阅读源码我们可以知道,WordCountTopology在编写的时候如果在命令后不加参数,则是一个本地模式的WordCount,而如果有一个参数,也就是集群上的计算拓扑(Topology)名,它就会是一个在集群上跑的计算拓扑。

我们使用# bin/storm nimbus(主节点)和# bin/storm supervisor(从节点)启动storm。

storm还提供了一个可视化的工具,我们通过在主节点上输入命令# bin/storm ui来启动它,然后我们就可以在http://{NimbusHost}:8080进行查看。

那我们跑一下WordCount:

# storm jar StormStarter.jar storm.starter.WordCountTopology WordCount_1

出现错误Nimbus is not set。错误日志如下:

# ./storm jar /home/clx/storm-starter.jar storm.starter.WordCountTopology wordcount

Running: export STORM_JAR=/home/clx/storm-starter.jar; java -client -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -cp /home/clx/storm-0.5.4/storm-0.5.4.jar:/home/clx/storm-0.5.4/lib/log4j-1.2.16.jar:/home/clx/storm-0.5.4/lib/tools.macro-0.1.0.jar:/home/clx/storm-0.5.4/lib/jline-0.9.94.jar:/home/clx/storm-0.5.4/lib/commons-lang-2.5.jar:/home/clx/storm-0.5.4/lib/core.incubator-0.1.0.jar:/home/clx/storm-0.5.4/lib/junit-3.8.1.jar:/home/clx/storm-0.5.4/lib/compojure-0.6.4.jar:/home/clx/storm-0.5.4/lib/zookeeper-3.3.2.jar:/home/clx/storm-0.5.4/lib/clojure-contrib-1.2.0.jar:/home/clx/storm-0.5.4/lib/httpcore-4.0.1.jar:/home/clx/storm-0.5.4/lib/commons-logging-1.1.1.jar:/home/clx/storm-0.5.4/lib/commons-io-1.4.jar:/home/clx/storm-0.5.4/lib/ring-core-0.3.10.jar:/home/clx/storm-0.5.4/lib/httpclient-4.0.1.jar:/home/clx/storm-0.5.4/lib/commons-codec-1.3.jar:/home/clx/storm-0.5.4/lib/jzmq-2.1.0.jar:/home/clx/storm-0.5.4/lib/jvyaml-1.0.0.jar:/home/clx/storm-0.5.4/lib/commons-fileupload-1.2.1.jar:/home/clx/storm-0.5.4/lib/slf4j-log4j12-1.5.8.jar:/home/clx/storm-0.5.4/lib/servlet-api-2.5.jar:/home/clx/storm-0.5.4/lib/json-simple-1.1.jar:/home/clx/storm-0.5.4/lib/ring-jetty-adapter-0.3.11.jar:/home/clx/storm-0.5.4/lib/slf4j-api-1.5.8.jar:/home/clx/storm-0.5.4/lib/jetty-util-6.1.26.jar:/home/clx/storm-0.5.4/lib/joda-time-1.6.jar:/home/clx/storm-0.5.4/lib/libthrift7-0.7.0.jar:/home/clx/storm-0.5.4/lib/commons-exec-1.1.jar:/home/clx/storm-0.5.4/lib/clojure-1.2.0.jar:/home/clx/storm-0.5.4/lib/ring-servlet-0.3.11.jar:/home/clx/storm-0.5.4/lib/clj-time-0.3.0.jar:/home/clx/storm-0.5.4/lib/hiccup-0.3.6.jar:/home/clx/storm-0.5.4/lib/clout-0.4.1.jar:/home/clx/storm-0.5.4/lib/jetty-6.1.26.jar:/home/clx/storm-0.5.4/lib/servlet-api-2.5-20081211.jar:/home/clx/storm-starter.jar:/root/.storm:/home/clx/storm-0.5.4/bin storm.starter.WordCountTopology wordcount

0 [main] INFO backtype.storm.StormSubmitter - Jar not uploaded to master yet. Submitting jar...

Exception in thread "main" java.lang.IllegalArgumentException: Nimbus host is not set

at backtype.storm.utils.NimbusClient.<init>(NimbusClient.java:30)

at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)

at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:78)

at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:71)

at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)

at storm.starter.WordCountTopology.main(WordCountTopology.java:81)

解决方法是在~/.storm/目录新建storm.yaml文件,~代表用户主目录。storm.yaml文件内容:nimbus.host: "10.0.0.24"。重启nimbus后台程序,异常消失。

从此我们的WordCount_1就正常地跑起来了,并可以在ui中监视到了。证明Storm安装成功。

最后我想讲一下这几天装zookeeper的感触。首先是zookeeper端口号的配置一定要与storm中的一致,否则会出现通信异常,zookeeper无法正常启动。二是storm.yaml的配置比较脑残,一定要有空格的设计很不人性化,之前因为没有写空格导致不能识别,闹了很大的乌龙。最后是我自己的问题,以后真的不能再这么粗心了!把server写成sever导致zookeeper不能识别最后只能启动standalone模式,这个问题查了两天最后发现实在是自己太粗心了!当时真心想把手切掉!另外在集群上运行topology这个问题应该是storm脚本的问题,它没有把Nimbus的Host读出,而是需要人手动赋予,这个也是0.7.1这个版本的一个bug吧,希望以后发布的版本中有改进~

分享到:
评论

相关推荐

    lamp安装配置及flume+Kafka+Storm+HDFS实时系统搭分享

    在这个过程中,文档《Twitter Storm系列》flume-ng+Kafka+Storm+HDFS 实时系统搭建.docx和《安装扎记.pdf》将提供详细的步骤指导和常见问题解决方案,帮助你顺利完成整个系统的搭建和优化。 总的来说,LNMP与实时大...

    Twitter手机端安装包--Android 8.56

    Twitter手机端安装包--Android,twitter-8-56-0-release-00.apk

    storm-starter-master

    Apache Storm的工作原理基于一个由多个节点组成的集群,其中包含Supervisor、Nimbus和Worker节点。Supervisor负责管理物理机器上的worker进程,Nimbus是主控节点,负责任务调度和分配,而Worker则执行实际的计算任务...

    tt-twitter:在Rails + Docker-compose + Heroku Container Registry上的Twitter搜索应用程序

    tt-twitter Rails + Docker-compose + Heroku容器注册表上的twitter搜索应用程序 Ruby版本 2.5.1 系统依赖 码头工人 Heroku 配置 $ git clone https://github.com/tsubasa-tech/tt-twitter.git $ docker-compose ...

    Storm @Twitter-Slides.pdf

    《Storm @Twitter》是大数据流处理领域的经典之作,它由Twitter公司的工程师们提出,为实时数据流分析提供了一个强大的平台。这篇论文的原作PPT是学习Storm和流处理技术的重要资源。以下是对Storm核心概念和内部机制...

    Twitter storm

    ### Twitter Storm:实时计算系统详解 #### 背景与定义 Twitter Storm 是一款由Apache基金会维护的开源分布式实时计算系统。它最初由BackType公司开发,并于2011年开源,随后被Twitter收购并进一步发展。Storm 的...

    基于java的开发源码-开放实时数据处理平台 Twitter Storm.zip

    基于java的开发源码-开放实时数据处理平台 Twitter Storm.zip 基于java的开发源码-开放实时数据处理平台 Twitter Storm.zip 基于java的开发源码-开放实时数据处理平台 Twitter Storm.zip 基于java的开发源码-开放...

    apache-storm-2.1.0-src.tar.gz

    这个“apache-storm-2.1.0-src.tar.gz”文件包含了Apache Storm 2.1.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或优化性能。 Apache Storm的核心概念包括以下几个方面: 1. **拓扑...

    asp.net MVC5 (bootstrap-table+分页+日期控件)

    Bootstrap-Table是一个基于Twitter Bootstrap的JavaScript插件,用于将普通的HTML表格转变为具有各种功能的数据展示组件。它支持排序、过滤、分页、行选择等多种操作,极大地提高了用户体验。在ASP.NET MVC5项目中,...

    Mastering+Bootstrap+4,+2nd+Edition-Packt+Publishing(2018).epub

    The framework was first conceived by Mark Otto and Jacob Thornton while working at Twitter in 2010. Since its release as an open source project in August of 2011, Bootstrap has become a household ...

    twitter-bootstrap-v2.1.1-0-gc52368d.zip

    Twitter Bootstrap 是一个非常流行的开源前端框架,用于快速构建响应式和移动优先的网站。这个压缩包 "twitter-bootstrap-v2.1.1-0-gc52368d.zip" 包含的是Twitter Bootstrap的2.1.1版本,这是一个在Git版本控制下...

    zk-kafka-redis-storm安装

    在"zk-kafka-redis-storm安装"过程中,首先需要安装Zookeeper,确保集群的协调和数据一致性。接着是Kafka的部署,设置好broker配置、创建主题并配置消费者和生产者。安装Redis时要注意选择合适的版本,配置网络参数...

    summingbird-storm_2.9.3-0.3.2.zip

    【标题】"summingbird-storm_2.9.3-0.3.2.zip" 涉及的知识点主要集中在大数据处理框架Summingbird和流处理系统Storm上。 Summingbird是Twitter开源的一个大数据实时计算框架,它将离线批处理(如Apache Hadoop)与...

    twitter4j-core-4.0.4

    twitter4j-core-4.0.4

    summingbird-storm_2.9.3-0.2.2.zip

    在这个特定的版本summingbird-storm_2.9.3-0.2.2中,我们注意到一个名为"netlib-java.zip"的压缩子文件,这表明Summingbird Storm可能依赖于Netlib Java库来实现某些计算任务。Netlib是一个经典的线性代数软件包,它...

    基于Java的实例源码-开放实时数据处理平台 Twitter Storm.zip

    **压缩包子文件的文件名称列表:nathanmarz-storm-9a3e1ec** 这个文件名表明这是Nathan Marz的Storm项目的一个特定版本(9a3e1ec可能是Git仓库中的一个特定提交哈希),Nathan Marz是Storm的原始作者。这个版本的...

    twitter4j-core-4.0.2

    twitter的JAVA封装工具,提供twitter API 的核心功能,是一个JAR包

Global site tag (gtag.js) - Google Analytics