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. 解析篇:
待续。。。
相关文章推荐
- golang实战使用gin+xorm搭建go语言web框架restgo详解1.2 我要做什么
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.1 模型M和Orm
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式
- 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
- golang实战使用gin+xorm搭建go语言web框架restgo详解2 框架基本架构
- golang实战使用gin+xorm搭建go语言web框架restgo详解7 视图层V
- golang实战使用gin+xorm搭建go语言web框架restgo详解3 系统常用配置参数
- golang实战使用gin+xorm搭建go语言web框架restgo详解8 关于模板
- golang实战使用gin+xorm搭建go语言web框架restgo详解9 session、日志、鉴权、验证码等
- golang实战使用gin+xorm搭建go语言web框架restgo详解4 路由配置
- golang实战使用gin+xorm搭建go语言web框架restgo详解5 控制器C
- 使用eclipse + maven一步步搭建SSM框架教程详解
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.2 跳转和重定向
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.3 资源控制器
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.5 控制器模型绑定
- golang实战使用gin+xorm搭建go语言web框架restgo详解10 使用restgo搭建后台管理系统
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.6 控制器参数校验
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.7 控制器数据响应
- golang实战使用gin+xorm搭建go语言web框架restgo详解1.1 go语言的困境