Twitter Storm:单机环境的安装与配置

2019-03-02 23:40|来源: 网路

  好久没写博客了,这一段时间一直被导师push着做毕业设计。由于目前的方向偏向于图像识别检索,毕设打算做一个基于分布式计算平台的图像检索系统,查阅相关资料发现Hadoop不适用于实时的计算环境,而Twitter Storm却能够满足自己的需求。我花了大概3~4天的时间,才将一个单机环境下的Storm平台部署好,期间经历了各种各样的“奇葩”的错误,此外,网上相关的Storm配置文章各种各样,叙述得多少有些不完整,为此我特下下这篇博客,记录整个安装过程,和大家分享。

1 准备阶段

  在配置一个Storm环境之前,我们首先需要一个Linux操作系统。我使用的是Ubuntu 12.04,系统最好是全新安装的,以防止各种各种别的问题。因为我手头上有两个版本的Ubuntu:11.10和12.04,。在11.10上安装后,supervisor进程总是抛出异常,也搞不清楚是操作系统版本的问题还是别的软件的影响。因此,为了减少问题的出现,我建议系统使用全新的。此外,尽量保证操作系统处于联网状态,否则Storm在运行时会抛出网络不可达的SocketException。

  PS:CentOS也可以,但是我没有在上面尝试过。有兴趣的读者可以自行尝试一下。

  Storm需要JVM的支持,选择Java 1.6或者Java 1.7都可以。下面是Java的安装过程与环境变量的配置,如果你不知道的话或者不像去其他地方查阅资料的话,可以参考下面的安装步骤。

1.1(a) Java 1.6的安装与配置

  (1)下载,在http://www.oracle.com/technetwork/indexes/downloads里下载需要的linux的java版本

  (2)安装(假设下载的文件为java1.6.0_37.bin,放在/home/chenny目录下)

    a.将下载的安装文件授权为可以执行:

>>sudo chmod u+x java1.6.0_37.bin

    b.改变工作目录到你要安装java的地方,我的是/usr/lib,所以是cd /usr/lib
    c.运行安装文件:

>>/home/chenny/java1.6.0_37.bin

  (3)环境设置,打开/etc/profile文件:

>>sudo gedit /etc/profile

    在文件最后增加如下几行:

export JAVA_HOME=/usr/lib/jdk1.6.0_37
export JRE_HOME=/usr/lib/jdk1.6.0_37/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

  (4)替换系统原有的OpenJDK

>>sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk1.6.0_37/bin/java 300
>>sudo update-alternatives --install /usr/bin/javac javac  /usr/lib/jdk1.6.0_37/bin/javac 300
>>sudo update-alternatives --config java

  然后输入我们需要的那个JDK作为默认即可。注意,如果在终端中输入命令的时候,系统提示没有权限操作,那我们使用sudo以超级用户的身份运行即可。
  (5)注销系统或者重启机器,在终端中键入java -version得到java version "1.6.0_37"的话表示安装好java环境了.

1.1(b)  Java 1.7的安装配置

  (1)去官网下载JDK,我下载的版本是最新的,jdk-7u21-linux-i586.tar.gz。

  (2)解压其到我们想要存放的目录:

>>sudo mkdir /usr/lib/jvm
>>tar zxvf ./jdk-7u21-linux-i586.tar.gz -C /usr/lib/jvm

  (3)此后的步骤与1.1(a)中的(3)-(5)相同。

1.2 Python 2.7+的安装

  Ubuntu 12,.04中已经自带了Python 2.7.3,无需再安装;对于其他系统或者Python版本较低的,此步骤需要安装Python 2.7+的版本。

1.3 其他相关软件的安装

  在我们安装Storm的过程中,需要其他一些小的软件包,例如,automake、g++、build-essential、uuid-dev、unzip、autoconf等等,这些软件在之后的过程如果缺失的话,会出现相关的提示,那样的话,提示缺少哪些软件,就安装相应的软件包即可。

2 ZooKeeper的安装配置

  Ubuntu12.04中自带的有一个zookeeper,不知道干什么用的,不放心的话,可以使用sudo apt-get remove zookeeper先将其移除。我使用的版本是zookeeper 3.3.5,下载之后,我们将其解压到相应位置,为了使用方便,我们可以按照安装Java的过程为ZooKeeper配置环境变量:

>>sudo gedit /etc/profile

  在其中添加:

export ZOOKEEPER_HOME=/home/chenny/Storm/zookeeper-3.3.5
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$JRE_HOME/bin:$PATH

  将zookeeper-3.4.5/conf目录下面的 zoo_sample.cfg修改为zoo.cfg,配置文件内容如下所示:

tickTime=2000  
dataDir=/home/chenny/Storm/tmp/zookeeper  
clientPort=2181  
initLimit=5  
syncLimit=2  

  每个变量的含义可以参见配置文件中的注释。在此不再赘述。使用:

>>zkServer.sh start

来启动ZooKeeper服务器,如果在启动过程中,提示找不到/etc/zookeeper/zoo.cfg这个配置文件,我们就需要将上面修改过的zoo.cfg拷贝到/etc/zookeeper下:

>>sudo cp -R /home/chenny/Storm/zookeeper-3.3.5/conf/zoo.cfg /etc/zookeeper

  然后再次启动服务,此时就可以了。然后使用:

>>zkServer.sh status

来查看服务器状态,此时服务器的模式(Mode)应该是standalone。我们可以使用

>>zkCli.sh 

来连接服务器,如果在这个过程中没有抛出异常的话,就说明我们能够正确地配置了Zookeeper。

3 ZeroMQ的安装

  我使用的版本是zeromq-2.1.7,下载,解压,进入目录,输入:

>>./autogen.sh
>>./configure  
>>make  
>>sudo make install  

4 jzmq的安装

>>git clone https://github.com/nathanmarz/jzmq.git
>>cd jzmq
>>./autogen.sh
>>./configure
>>make
>>sudo make install

  安装时,可能碰到两个错误:

    (1).make[1]: *** 没有规则可以创建“org/zeromq/ZMQ.class”需要的目标“classdist_noinst.stamp”。 停止
         修正方法,创建classdist_noinst.stamp文件:

touch src/classdist_noinst.stamp  

    (2).错误:无法访问 org.zeromq.ZMQ
        修正方法,进入src目录,手动编译相关java代码:

javac -d ./src/org/zeromq/*.java  

5 Storm

  我使用的Storm版本是最新的稳定版0.8.2,下载,解压,修改/conf/storm.yaml配置文件:

 storm.zookeeper.servers:
        - "192.168.1.117"
 nimbus.host: "192.168.1.117"
 storm.local.dir: "/home/chenny/Storm/tmp/storm"
 java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
 topology.debug: "true" 

需要注意的是Storm读取此配置文件,要求每一行开始都要有一个空格,每一个冒号后面也要有一个空格,否则就会出现错误,造成启动失败。我们同样可以为Storm添加环境变量,来方便我们的启动、停止。

5.1 启动Storm

>>storm nimbus&
>>storm supervisor&
>>storm ui&

  如果我们没有为storm添加环境变量,那么在启动的时候,我们就需要使用绝对路径或相对路径来定位/chenny/Storm/storm-0.8.2/bin/storm这个程序。启动完成后,我们可以使用jps来查看进程状态:

>>jps

  在没有运行任务时,我们必须应该要看到5个进程:QuorumPeerMain、nimbus、core、Jps、supervisor。否则就需要检查是否正确地启动,如果启动之后没有过多久就停止了,我们就需要查看~/storm-0.8.2/logs下面的对应的log文件,查看引起异常的原因是什么,然后解决后再次启动。

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

6 运行第一个Topology程序

  网上别的资料介绍了许多方式来编译可执行的Topology程序,我们这里提供一个简单的办法,只需要使用Eclipse和相关的Jar包即可,Ubuntu或者Windows环境下均可。我们需要从github上下载下来一个供初学者学习的storm-starter,同时,我们还需要有commons-collections-3.2.1-bin.tar.gz、twitter4j-2.2.6.zip和storm-0.8.2.zip等软件包,如果没有的话,需要去下载。以Windows XP下的Eclipse为例。首先我们将所有需要的包解压放到桌面,打开Eclipse,新建Java Project,名字任意取,我取名叫做MyFirstStormApp,然后点击Finish。

  在MyFirstStormApp上右键,选择Import,然后选择File System:

  在From Directory中输入相应的路径或者点击Browse,选择路径:

  我们依次展开storm-starter-master/src/jvm/storm,选中jvm文件夹,点击确定,然后勾选jvm,点击finish:

  这样,我们就在左侧看到Project的结构:

  拖动storm到src中,然后安装同样的方式将storm-starter-master/storm-starter-master/multilang导入到项目中,然后我们就在左侧看到如下图所示的结构:

 

  可以看到上面有很多红叉,此时,我们就需要导入项目所依赖的jar包,在项目上右键,选择Properties,然后Java Build Path,切换到Libraries选项夹下,点击Add External JARs:

  将storm-0.8.2/lib目录下的所有jar包都加入到项目中,将commons-collections-3.2.1.jar添加到项目中,将twitter4j-2.2.6/lib中的所有jar包加入到项目中,将storm-0.8.2/storm-0.8.2.jar加入到项目中,然后点击OK,这个时候,可以看到项目中的所有错误都消失了。接下来,我们将PrintSampleStream.java和TwitterSampleSpout.java中的注释取消,或者将这两个文件删除。

  在项目上选择Export,然后选择JAR file,在下一页,我们将项目导出,勾选如下图所示:

  点击finish后,如果没有错误,只有warning的话,就不用管了,否则我们需要检查错误,然后重新打包。打包后的jar包是MyFirstStormApp.jar,将它拷贝到部署有Storm的机器上,然后在终端中输入:

>>storm jar MyFirstStormApp.jar storm.starter.WordCountTopology test2

  如果没有错误,就成功提交了,在浏览器中输入http://127.0.0.1:8080,可以看到这个Topology已经在运行了,点击它的名字,可以进入Topology summary:

  如果看到有Emiited等数据,就说明我们正确地完成了配置。Enjoy~

 


转自:http://www.cnblogs.com/XjChenny/p/3214039

相关问答

更多
  • 未经用户授予访问这些帐户的权限,您将无法访问任何帐户。 只需在新项目的应用程序代理中尝试以下操作,以便知道该应用程序尚未获得访问Twitter帐户的权限。 当然,请确保您的设备或模拟器上至少有一个Twitter帐户,并在您的项目和应用程序委托中导入帐户框架。 你也假设用户只有一个Twitter帐户。 最适合用户可能拥有多个帐户的情况。 ACAccountStore *accountStore = [[ACAccountStore alloc] init]; // Create an acc ...
  • 我认为您的解决方案是正确的,但让我们看看其他选择(您也可以向您的客户解释): 您可以启动发布一些文本(您的推文)的意图,并让用户处理客户端。 问题是你不能限制推出的应用程序,所以用户可以选择,例如Facebook,Whatsapp等。采取这种选择意味着你的分享按钮不会'通过推特分享'或类似的东西,因为你让用户在任何他想要的地方分享文本按钮应该简单地说'分享'(我认为这是最好的选择)。 如果您不想朝这个方向前进,我建议您解释一下您的客户(如果可以的话),Android有多个Twitter应用程序,如果用户有多 ...
  • 在你提到的官方指南的第一行 This package is intended to be combined with the ROAuth package as as of March 2013 the Twitter API requires the use of OAuth authentication. 这不是错误。 您需要提供相关凭证。 In the very first lines the official guide you mention This package is intended t ...
  • 用户认证是强制性的。 您还需要创建一个客户帐户并使用该帐户的身份验证。 您还需要通过添加大约60秒的小睡眠时间来处理api速率限制。 您可以使用此链接查看一些工作代码。 User authentication is mandatory. You also need to create a customer account and use the authentication for that. You will also need to deal with api rate limiting by addi ...
  • 尝试这个: https://dev.twitter.com/docs/api/1/get/account/verify_credentials 它会向您显示OAuth-authenticated-account =)的所有信息(您通常会获得其他任何用户)! Try this: https://dev.twitter.com/docs/api/1/get/account/verify_credentials It'll show you all information (you'ld normally g ...
  • 您需要的是地理编码服务。 免费和付费都有很多选择。 Google提供地理编码器作为其地图API的一部分,但速率限制适用,并且数据必须在Google地图上绘制。 例如http://maps.google.com/maps/api/geocode/json?address=[insert+address/postcode+here]&sensor=false 另一个免费选项是opengeocoding.org。 还有一些商业选择。 What you need is a Geocoding service. Th ...
  • 您可能正在寻找的是createFriendship() 你可以在这里看到它是如何使用的 2016年编辑:谷歌代码svn破了,推特4j已经移动了http://twitter4j.org/en/api-support.html What you are probably looking for is createFriendship() You can see how it is used here 2016 Edit: Google code svn is broken and twitter 4j has ...
  • 花了几个小时阅读文档(我现在没有眼睛),当我尝试获取access_token时,我称之为: // Get the access token AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier); 我通过了验证器(这是pin通道,但是pin通道不再使用了)而且他是null因为不再使用twitter,所以我只需要用这个重写: // Get the access token AccessToken access ...
  • 只需使用canOpenURL(_:)检查canOpenURL(_:) 。 Swift 3.0 if (UIApplication.shared.canOpenURL(URL(string:"twitter://"))) { print("Twitter is installed") } 斯威夫特2.3或更低 if (UIApplication.sharedApplication().canOpenURL(NSURL(string:"twitter://"))) { print("Twitt ...
  • 我已经为twitter集成实现了不少第三方。 但是STTwitter是最好的https://github.com/nst/STTwitter易于使用并且可以满足各种需求 I have implemented quite a few third party for twitter integration . But STTwitter is the best https://github.com/nst/STTwitter Easy to use and serves all purpose