Storm框架使用详解 搭建篇
来源:互联网 发布:impress.js教程 编辑:程序博客网 时间:2024/06/08 18:27
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框架使用详解 搭建篇
- Storm+Kafka实时计算框架搭建
- 实时计算框架Storm本地模式搭建
- storm分布式实时计算框架搭建
- Storm Trident API 使用详解
- 实时计算框架之一:Storm之框架搭建
- Storm专题二:Storm Trident API 使用详解
- Storm搭建
- Storm搭建
- storm搭建
- SpringMVC框架搭建详解
- Struts2框架搭建详解
- storm实时流式计算框架集群搭建过程
- storm实时流式计算框架集群搭建过程
- storm实时流式计算框架集群搭建过程
- storm实时流式计算框架集群搭建过程
- 实时计算框架 Storm 的一步步搭建教程
- storm详解
- Android网络优化之HttpClient
- Please use Android Tools > Fix Project Properties
- gerrit linux下安装
- word在线编辑。生成图片。截图。合图。
- Parallel execution 并行查询的性能测试(1)
- Storm框架使用详解 搭建篇
- cumsum cumprod prod函数的用法
- Yii快速入门教程14
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- Oracle的一些记录
- Parallel execution 并行查询的性能测试(2)
- C#压缩打包文件
- yii快速入门教程15
- 忘记烦恼吧