您的位置:首页 > 其它

Storm框架使用详解 搭建篇

2013-03-12 15:17 309 查看

Storm框架使用详解

开篇:实时计算是针对海量数据计算,主要是弥补hadoop等框架只能进行离线批处理的不足。实时计算不一定要精确到秒级,个人理解是相对于离线的一种范称吧。主要应用场景有:

1)  数据源是不断产生的,服务端要不断处理接收的数据,同时回馈给客户端。

Storm是基于流的处理框架。以将发送的tuple序列化,进行分发到相应处理端中。数据流在时间和数量上是无限的,这种数据时不断产生的,比如用户的访问历史,点击历史,搜索信息等等。

2)  处理器是循环等待消息的,消息一来即处理数据,进而得出结果。当上传topology时,相应的spout和bolt就一直在运行,除非你显示停止任务。

一个topology 计算模型:



数据流模型:

在storm中数据流其实就是无界的tuple元组数组。Spout是数据产生器,emit数据给相应的bolt,bolt可以接受任意多的stream作为输入,然后进行处理,bolt可以继续emit到相应的bolt或者spout。

Storm提供了若干数据流分发策略(StreamGrouping),来处理发射出去的流的去向问题,具体可以看storm的文档。也可以自定义分发策略,方法是继承CustomStreamGrouping接口,实现chooseTasks方法。

何为实时计算呢,可以分为三个阶段:实时数据采集、实时计算、实时服务。

实时采集主要体现在及时响应、低延迟等特点。主要框架有chakwa、kafaka、TimeTunnel等。

实时计算框架有Yahoo开源的S4、Twitter开源的Storm,还有Esper,Streambase,HStreaming等

实时服务,发布服务或者实时dump数据。

其实这三个阶段没有明显的界限。

缺陷:

Storm还是有一些缺陷的,比如数据只能在之前订制好的topology里的spout和bolt之间进行传输,不能跨topology传输。当有新的业务需求的时候,往往要么重新写个topology,或者在原有的topology上添加新的处理组件。前者很容易造成重复开发和数据重复,而且浪费资源。后者在数据共用上处理不好,很容易造成数据重复处理的问题。现阶段一般的解决方案是在topology上添加一层消息中间件作为数据分发层,每个头topology都共享这个消息源。

storm集群主件:



Storm 数据流模型:



1.      搭建篇:

机器环境:

             Ubuntu 12.10+virtualbox(两个ubuntu12.04server);

开发模式:

     Storm开发模式有两种,一种是本地模式,一种是远程模式(集群模式)。本地模式主要是将topology提交到你的本机上模拟集群环境,这样便于调试。集群模式要将topology提交到你的远端集群。

准备:

             搭建zookeeper环境,具体过程详见官网手册。

            搭建完成后通过bin/zkServer.sh脚本启动Zookeeper服务。

            安装Storm依赖库:

             ZeroMQ 2.1.7

            JZMQ

           Java 6

           Python 2.6.6

           Unzip

          下载后编译安装ZMQ:

          wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
          tar -xzf zeromq-2.1.7.tar.gz

          cd zeromq-2.1.7

          ./configure

          make

          sudo make install

 

          下载后编译安装JZMQ:

         git clone https://github.com/nathanmarz/jzmq.git
         cd jzmq

         ./autogen.sh

         ./configure

          make

         sudo make install

 下载并解压Storm发布版本

1. 下载Storm发行版本, Storm0.8.1:

 

wget https://github.com/downloads/nathanmarz/storm/storm-0.8.1.zip

 

2. 解压到安装目录下:

 

unzip storm-0.8.1.zip

2.1 修改storm.yaml配置文件

Storm发行版本解压目录下有一个conf/storm.yaml文件,用于配置Storm。默认配置在这里可以查看。conf/storm.yaml中的配置选项将覆盖defaults.yaml中的默认配置。以下配置选项是必须在conf/storm.yaml中进行配置的:

 

1) storm.zookeeper.servers: Storm集群使用的Zookeeper集群地址,其格式如下:

 

storm.zookeeper.servers:

  -"ip1"

  -"ip2"                //这里ip1 与 ip2是指先前搭建zookeeper集群中各个机器的ip。

如果Zookeeper集群使用的不是默认端口,那么还需要storm.zookeeper.port选项。

 

2) storm.local.dir: Nimbus和Supervisor进程用于存储少量状态,需要提前创建该目录并给以足够的访问权限。然后在storm.yaml中配置该目录,如:

 storm.local.dir: "/home/fang/storm/workdir"

这个目录里的文件对于以后集群的运行十分重要,往往每当你打开ui时出现路由错误,就是因为你之前关闭storm不正确引起的,解决方法就是关闭所有storm和zookeeper,然后将这个目录下的数据全部删除,再重启storn即可。

3) java.library.path: Storm使用的本地库(ZMQ和JZMQ)加载路径,默认为"/usr/local/lib:/opt/local/lib:/usr/lib",一般来说ZMQ和JZMQ默认安装在/usr/local/lib下,因此不需要配置即可。

 

4) nimbus.host: Storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件,如:

 nimbus.host: "主机ip"

5) supervisor.slots.ports: 对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:

 

supervisor.slots.ports:

    -6700

    -6701

    -6702

- 6703

启动:

1)  进入各个机器的zookeeper/bin目录下,运行./zkServer.shstart。启动zookeeper。

2)  在主机上, 运行./storm nimbus&;

3)  在worker机上,与西宁./stormsupervisor &;

4)  可以通过在主机运行./stormui &查看统计报告。

2.      运行篇:

3.      解析篇:

待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  storm 搭建 spout bolt
相关文章推荐