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 &查看统计报告。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-10-02 19:39:24

Storm框架使用详解的相关文章

测试框架mochajs详解

测试框架mochajs详解 章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建议使用箭头函数 钩子函数 钩子函数的描述参数 异步的钩子函数 全局钩子 延迟启动测试 测试用例TODO 仅执行一个用例集/用例 跳过哪些用例集/用例 重新执行用例 动态生成用例 测试时间 测试超时 用例集执行超时 用例执行超时 钩子函数超时 diff差异比较功能 mocha使用命令和参数 mocha

Java集合框架Koloboke详解

Java集合框架Koloboke详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Koloboke的目标是替换标准的Java集合和流的API,提供更高效的实现.Koloboke目前的版本主要是替换java.util.HashSet和java.util.HashMap. Koloboke提供了一套完整的集合原始类型的实现,可以避免开销很大的装箱/拆箱操作,节省了原始类型装箱消耗的内存. 在Koloboke中,Has

S2SH框架集成详解(Struts 2.3.16 + Spring 3.2.6 + Hibernate 3.6.10)

近期集成了一次较新版本的s2sh,出现了不少问题,网上资料也是良莠不齐,有的甚至就是扯淡,简单的把jar包扔进去就以为是集成成功了,在这里整理一下详细的步骤,若哪位有什么不同看法,可以留言,欢迎批评改正. 首先说下集成的环境,Eclipse 4.4,Tomcat 7.0.54,Struts2.3.16,Hibernate3.6.10,Spring3.2.6 相关JAR包已上传至百度云:http://pan.baidu.com/s/1pJluA5l 搭建Struts2框架 1. 创建Java We

yii框架AR详解

yii框架AR详解 虽 然Yii DAO可以处理事实上任何数据库相关的任务,但很可能我们会花费90%的时间用来编写一些通用的SQL语句来执行CRUD操作(创建,读取,更新和删除). 同时我们也很难维护这些PHP和SQL语句混合的代码,要解决这些问题,我们可以使用Active Record.    Active Record(AR)是一种流行的对象关系映射(ORM)技术.每个AR类代表一个数据表(或视图),其字段作为AR类的属性,一个AR实例代表在表中的 一行.常见的CRUD操作被作为AR类的方法

Hadoop新MapReduce框架Yarn详解

简介 本文介绍了Hadoop自0.23.0版本后新的MapReduce框架(Yarn)原理,优势,运行机制和配置方法等,着重介绍新的yarn框架相对于原框架的差异及改进,并通过Demo示例详细介绍了在新的Yarn框架下搭建和开发Hadoop程序的方法.读者通过本文中新旧Hadoop MapReduce框架的对比,更深刻理解新的yarn框架技术与那里和设计思想,文中的Demo代码经过微小修改既可用于用户基于Hadoop新框架的实际生产环境. Hadoop MapReduceV2(Yarn)框架简介

Hadoop 新 MapReduce 框架 Yarn 详解

原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobCli

Spring基于注解TestContext 测试框架使用详解

概述 Spring 2.5 相比于 Spring 2.0 所新增的最重要的功能可以归结为以下 3 点: 1.基于注解的 IoC 功能:  2.基于注解驱动的 Spring MVC 功能:  3.基于注解的 TestContext 测试框架. Spring 推荐开发者使用新的基于注解的 TestContext 测试框架,本文我们将对此进行详细的讲述. 低版本的 Spring 所提供的 Spring 测试框架构在 JUnit 3.8 基础上扩展而来,它提供了若干个测试基类.而 Spring 2.5

Android开源框架Universal-Image-Loader详解

如果说评价一下哪个图片开源库最被广泛使用的话,我想应该可以说是Universal-Image-Loader,在主流的应用中如 果你随便去反编译几个,基本都能看到他的身影,它就像个图片加载守护者,默默的守护着图片加载.相信很多人对 这个异步加载图片框架还不是很熟,再加上最近它更改优化了好几个地方,而网上的大部分资料还是以前的,于是花 了几天时间专门的研究了下开源框架Universal-Image-Loader(实际上是近期项目刚好用到,且仔细的考虑过各种情 况),希望对新手能有所帮助,也希望大神能

Android开源框架Image-Loader详解

如果说评价一下哪个图片开源库最被广泛使用的话,我想应该可以说是Universal-Image-Loader,在主流的应用中如 果你随便去反编译几个,基本都能看到他的身影,它就像个图片加载守护者,默默的守护着图片加载.相信很多人对 这个异步加载图片框架还不是很熟,再加上最近它更改优化了好几个地方,而网上的大部分资料还是以前的,于是花 了几天时间专门的研究了下开源框架Universal-Image-Loader(实际上是近期项目刚好用到,且仔细的考虑过各种情 况),希望对新手能有所帮助,也希望大神能