19252-storm入门到精通-storm1
- 格式:pdf
- 大小:697.15 KB
- 文档页数:25
本文以Twitter Storm为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中碰到的问题及体会总结,在相应章节以“注意事项”的形式给出。
Storm集群组件Storm集群中包括两类节点:主控节点(Master Node)和工作节点(Work Node)。
其别离对应的角色如下:1. 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分派任务给工作机械,而且负责监控集群运行状态。
Nimbus的作用类似于Hadoop中JobTracker的角色。
2. 每一个工作节点(Work Node)上运行一个被称为Supervisor的后台程序。
Supervisor负责监听从Nimbus分派给它执行的任务,据此启动或停止执行任务的工作进程。
每一个工作进程执行一个Topology 的子集;一个运行中的Topology由散布在不同工作节点上的多个工作进程组成。
Storm集群组件Nimbus和Supervisor节点之间所有的和谐工作是通过Zookeeper集群来实现的。
另外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。
这意味着你能够用kill -9来杀死Nimbus和Supervisor进程,它们在重启后能够继续工作。
那个设计使得Storm集群拥有难以想象的稳固性。
安装Storm集群这一章节将详细描述如何搭建一个Storm集群。
下面是接下来需要依次完成的安装步骤:1. 搭建Zookeeper集群;2. 安装Storm依托库;3. 下载并解压Storm发布版本;4. 修改配置文件;5. 启动Storm各个后台进程。
搭建Zookeeper集群Storm利用Zookeeper协集结群,由于Zookeeper并非用于消息传递,因此Storm给Zookeeper带来的压力相当低。
Storm调研及部署文档作者:黄崇远时间:2013/8/13类型详细该文档为storm 0.8.2的调研及部署文档,相关代码部分随后提供相关描述. 其他相关文档请参考新浪博客/huangchongyuan . 有任何其他想法,可以邮件874450476@. 文档下载请到百度文库及IT268文库搜索. 部分文档涉及到源码,有需要的博客留言Storm调研及部署文档 ............................................................................. (1)1 Storm调研 ............................................................................. . (2)1.1 Storm简介 ............................................................................. (2)1.2 Storm特点 ............................................................................. (2)1.3 Storm架构 ............................................................................. (3)1.3.1 Storm集群组成 ............................................................................. .. (3)1.3.1 Storm拓扑结构 ............................................................................. .. (4)1.4 Storm原理 ............................................................................. (5)1.4.1 Storm组成 ............................................................................. . (5)1.4.2 Storm工作原理 ............................................................................. .. (7)2 Storm安装部署 ............................................................................. (9)2.1 搭建Storm集群的主要步骤 ............................................................................. (9)2.2 布置ZK集群 ............................................................................. .. (9)2.3 安装相关软件 ............................................................................. . (10)2.3.1安装Python-2.6.6或以上版本 .............................................................................102.3.2 安装zeromq ......................................................................... .. (10)2.3.3 安装jzmq ........................................................................... .. (10)2.3.4 安装storm .......................................................................... . (11)2.4 配置Storm.yaml ..................................................................... .. (11)2.5 启动Storm集群 ............................................................................. (12)1 Storm调研1.1 Storm简介Twitter Storm 是使用 Clojure(发音同 closure)语言实现的。
Storm深入学习
测试storm
A、安装Maven(参考maven安装和使用手册)•接着要修改一下 maven 仓库的存放位置:
找到 maven 下的 conf 下的 settings.xml 配置文件,我的是在D:\Server\maven\conf\settings.xml
Storm深入学习
测试storm
A、安装Maven(参考maven安装和使用手册)
•maven 的仓库默认是放在本地用户的临时文件夹下面的 .m2 文件夹下的 repository 下,我的是在 C:\Users\admcnm\.m2\repository 目录下,
•现在我们来修改将它指定到我们自己的路径下,我现在要将仓库指定到 D:\Repositories\Maven 目录下,只需要将上面注销的本地仓库打开,
Storm深入学习
测试storm
A、安装Maven(参考maven安装和使用手册)
Storm深入学习
测试storm
A、安装Maven(参考maven安装和使用手册)
Storm深入学习
测试storm
A、安装Maven(参考maven安装和使用手册)
Storm深入学习
测试storm
•O、提交运行
•拷贝jar包到Storm所在机器上。
编译无误后,在Storm-starter中target目录如下:将storm-starter-0.0.1-SNAPSHOT-jar-with-
dependencies.jar,拷贝到指定的目录下面。
w3cschool-Storm⼊门教程1.什么是stormStorm是Twitter开源的分布式实时⼤数据处理框架,被业界称为实时版Hadoop。
随着越来越多的场景对Hadoop的MapReduce⾼延迟⽆法容忍,⽐如⽹站统计、推荐系统、预警系统、⾦融系统(⾼频交易、股票)等等,⼤数据实时处理解决⽅案(流计算)的应⽤⽇趋⼴泛,⽬前已是分布式技术领域最新爆发点,⽽Storm更是流计算技术中的佼佼者和主流。
按照storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。
Hadoop提供了map、reduce原语,使我们的批处理程序变得简单和⾼效。
同样,Storm也为实时计算提供了⼀些简单⾼效的原语,⽽且Storm的Trident是基于Storm原语更⾼级的抽象框架,类似于基于Hadoop的Pig框架,让开发更加便利和⾼效。
2.storm应⽤场景推荐系统(实时推荐,根据下单或加⼊购物车推荐相关商品)、⾦融系统、预警系统、⽹站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。
3.storm的⼀些特性1.适⽤场景⼴泛: storm可以实时处理消息和更新DB,对⼀个数据量进⾏持续的查询并返回客户端(持续计算),对⼀个耗资源的查询作实时并⾏化的处理(分布式⽅法调⽤,即DRPC),storm的这些基础API可以满⾜⼤量的场景。
2. 可伸缩性⾼: Storm的可伸缩性可以让storm每秒可以处理的消息量达到很⾼。
扩展⼀个实时计算任务,你所需要做的就是加机器并且提⾼这个计算任务的并⾏度。
Storm使⽤ZooKeeper来协调集群内的各种配置使得Storm的集群可以很容易的扩展。
3. 保证⽆数据丢失:实时系统必须保证所有的数据被成功的处理。
那些会丢失数据的系统的适⽤场景⾮常窄,⽽storm保证每⼀条消息都会被处理,这⼀点和S4相⽐有巨⼤的反差。
4. 异常健壮: storm集群⾮常容易管理,轮流重启节点不影响应⽤。
银河麒麟服务器操作系统Storm 软件适配手册目录目录 (I)1概述 (2)1.1系统概述 (2)1.2环境概述 (2)1.3STORM 软件简介 (2)1.4STORM 基本概念 (2)1.5STORM 架构 (3)1.5.1任务提交处理流程 (3)1.5.2STORM 中的数据流 (3)1.5.3消息的可靠性保证 (4)2STORM 软件适配 (4)2.1下载STORM 软件 (4)2.2修改环境变量 (5)2.3修改配置文件 (5)2.4启动STORM (5)3STORM 测试用例及使用场景举例 (6)3.1运行STORM 自带测试用例 (6)3.2STORM 使用场景举例 (6)3.2.1运行方法 (6)3.2.2运行结果 (6)1概述1.1系统概述银河麒麟服务器操作系统主要面向军队综合电子信息系统、金融系统以及电力系统等国家关键行业的服务器应用领域,突出高安全性、高可用性、高效数据处理、虚拟化等关键技术优势,针对关键业务构建的丰富高效、安全可靠的功能特性,兼容适配长城、联想、浪潮、华为、曙光等国内主流厂商的服务器整机产品,以及达梦、金仓、神通、南大通用等主要国产数据库和中创、金蝶、东方通等国产中间件,满足虚拟化、云计算和大数据时代,服务器业务对操作系统在性能、安全性及可扩展性等方面的需求,是一款具有高安全、高可用、高可靠、高性能的自主可控服务器操作系统。
1.2环境概述1.3Storm 软件简介Apache Storm 是Twitter 开源的实时数据处理框架,是一个免费开源、分布式、高容错的实时计算系统。
Storm 令持续不断的流计算变得容易,弥补了Hadoop 批处理所不能满足的实时要求。
Storm 经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL 等领域。
Storm 的部署管理非常简单,而且在同类的流式计算工具,Storm 的性能也是非常出众的。
1.4Storm 基本概念storm 中服务器节点分为主节点和从节点,Nimbus 为主节点,Supervisor 为从节点,以及若干组件构成。
安装Storm集群安装Storm集群的步骤概要:1. 安装Zookeeper集群。
2. 安装Nimbus和worker机器下storm的依赖。
3. 下载并解压Storm到Nimbus和worker机器。
4. 添加必要的配置到storm.yaml文件。
5. 使用“storm”脚本启动nimbus、supervisor、ui守护程序。
安装Zookeeper集群Storm使用Zookeeper协调集群。
Zookeeper不是用于传递消息,因此Storm给Zookeeper的负载是非常的低。
对大多数案例,单个节点的Zookeeper集群应该足够了。
如果你想要失效恢复(failover)或者部署大规模的storm集群,你也许想要大规模Zookeeper集群。
1,下载zookeeper,我用的是3.3.32,进入zookeeper/conf的目录,cp一个zoo_sample.cfg,内容改为,更详细的配置,参照/r3.3.3/zookeeperAdmin.html然后dataDir建立一个文件myid在echo 1 >/tmp/zookeeper/myid在echo 2 >/tmp/zookeeper/myid对应zoo.cfg里面的注意一定是数字启动 ./zkServer.sh start测试 ./zkCli.sh -server进入zk的命令行可以测试 create set get ls 等命令Zookeeper部署注意事项:1. zookeeper是快速失败的(fail-fast)系统,如果它遇到任务错误,进程将退出,所以对Zookeeper进行监管是非常关键的。
使用 or 可以达到失效后自动报警和重启服务。
更多细节看。
2. 设置定时任务压缩Zookeeper的数据和处理日志是非常关键的。
Zookeeper后台程序本身不处理这些事情,如果你没有设置定时任务,Zookeeper将很快用完磁盘空间。
Storm介绍周龙鹏一、数据处理过程Storm的术语解释Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。
Stream是被处理的数据。
Spout是数据源。
Bolt处理数据。
Task是运行于Spout或Bolt中的线程。
Worker是运行这些线程的进程。
Stream Grouping规定了Bolt接收什么东西作为输入数据。
数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为Direct)。
Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。
在Storm Concepts页面里对这些术语有更详细的描述。
(1)Topologies 用于封装一个实时计算应用程序的逻辑,类似于Hadoop的MapReduce Job(2)Stream 消息流,是一个没有边界的tuple序列,这些tuples会被以一种分布式的方式并行地创建和处理(3)Spouts 消息源,是消息生产者,他会从一个外部源读取数据并向topology 里面面发出消息:tuple(4)Bolts 消息处理者,所有的消息处理逻辑被封装在bolts里面,处理输入的数据流并产生输出的新数据流,可执行过滤,聚合,查询数据库等操作(5)Task 每一个Spout和Bolt会被当作很多task在整个集群里面执行,每一个task对应到一个线程.二、storm集群的组件(topologies)Storm集群非常类似Hadoop集群。
Hadoop上运行的是MapReduce jobs,而Storm运行的是topologies。
Jobs和topologies本身是不同的,其中一个最大的不同就是,Mapreduce job最终会结束,而topology则会持续的处理消息(直到你杀掉它)。
Storm简介Storm简介•实时计算需要解决一些什么问题•实现一个实时计算系统•Storm基本概念•Storm使用场景•Storm分组机制Storm简介•实时计算需要解决一些什么问题伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。
举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。
再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,估计这哥们心里就会想推荐你妹呀。
其实稍微了解点背景知识的码农们都知道,这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么你今天白天做的事情当然要明天才能反映出来啦。
Storm简介•实现一个实时计算系统全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop 以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。
但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。
否则最近这两年也不会有s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。
先抛开s4,storm,puma这些系统不谈,我们首先来看一下,如果让我们自己设计一个实时计算系统,我们要解决哪些问题。
Storm简介•实现一个实时计算系统低延迟。
都说了是实时计算系统了,延迟是一定要低的。
高性能。
性能不高就是浪费机器,浪费机器是要受批评的哦。
分布式。
系统都是为应用场景而生的,如果你的应用场景、你的数据和计算单机就能搞定,那么不用考虑这些复杂的问题了。
我们所说的是单机搞不定的情况。
可扩展。
伴随着业务的发展,我们的数据量、计算量可能会越来越大,所以希望这个系统是可扩展的。
容错。
这是分布式系统中通用问题。
一个节点挂了不能影响我的应用。
Storm简介•实现一个实时计算系统好,如果仅仅需要解决这5个问题,可能会有无数种方案,而且各有千秋,随便举一种方案,使用消息队列+分布在各个机器上的工作进程就ok啦。
我们再继续往下看。
✓容易在上面开发应用程序。
亲,你设计的系统需要应用程序开发人员考虑各个处理组件的分布、消息的传递吗?如果是,那有点麻烦啊,开发人员可能会用不好,也不会想去用。
✓消息不丢失。
用户发布的一个宝贝消息不能在实时处理的时候给丢了,对吧?更严格一点,如果是一个精确数据统计的应用,那么它处理的消息要不多不少才行。
这个要求有点高哦。
✓消息严格有序。
有些消息之间是有强相关性的,比如同一个宝贝的更新和删除操作消息,如果处理时搞乱顺序完全是不一样的效果了。
Storm简介•Storm基本概念对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统。
同Hadoop一样Storm也可以处理大批量的数据,然而 Storm在保证高可靠性的前提下还可以让处理进行的更加实时;也就是说,所有的信息都会被处理。
Storm同样还具备容错和分布计算这些特性,这就让Storm可以扩展到不同的机器上进行大批量的数据处理。
他同样还有以下的这些特性:Storm简介•Storm优势✓1. 简单的编程模型。
类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
✓2. 服务化,一个服务框架,支持热部署,即时上线或下线App.✓3. 可以使用各种编程语言。
你可以在Storm之上使用各种编程语言。
默认支持Clojure、Java、Ruby和Python。
要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
✓4. 容错性。
Storm会管理工作进程和节点的故障。
✓5. 水平扩展。
计算是在多个线程、进程和服务器之间并行进行的。
Storm简介•Storm基本概念✓6. 可靠的消息处理。
Storm保证每个消息至少能得到一次完整处理。
任务失败时,它会负责从消息源重试消息。
✓7. 快速。
系统的设计保证了消息能得到快速的处理,使用ZeroMQ作为其底层消息队列。
✓8. 本地模式。
Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。
这让你可以快速进行开发和单元测试。
Storm简介•Storm存在的问题✓1. 目前的开源版本中只是单节点Nimbus,挂掉只能自动重启,可以考虑实现一个双nimbus的布局。
✓2. Clojure是一个在JVM平台运行的动态函数式编程语言,优势在于流程计算, Storm的部分核心内容由Clojure编写,虽然性能上提高不少但同时也提升了维护成本。
Storm简介•Storm的架构•Storm集群由一个主节点和多个工作节点组成。
主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。
每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。
Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由Zookeeper来完成的。
ZooKeeper用于管理集群中的不同组件,ZeroMQ是内部消息系统,JZMQ是ZeroMQMQ 的Java Binding。
有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群.Storm简介•Storm基本概念首先我们通过一个 storm 和hadoop的对比来了解storm中的基本概念。
Storm简介•Storm基本概念✓Nimbus:负责资源分配和任务调度。
✓Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
✓Worker:运行具体处理组件逻辑的进程。
✓Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。
Storm简介•Storm基本概念Storm简介•Storm基本概念✓Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
✓Spout:在一个topology中产生源数据流的组件。
通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。
Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
✓Bolt:在一个topology中接受数据然后执行处理的组件。
Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。
Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
Storm简介•Storm基本概念✓Tuple:一次消息传递的基本单元。
本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.✓Stream:源源不断传递的tuple就组成了stream。
Storm简介•Storm使用场景1.流聚合流聚合把两个或者多个数据流聚合成一个数据流 — 基于一些共同的tuple字段。
builder.setBolt(5, new MyJoiner(), parallelism).fieldsGrouping(1, new Fields("joinfield1", "joinfield2")) .fieldsGrouping(2, new Fields("joinfield1", "joinfield2")) .fieldsGrouping(3, new Fields("joinfield1", "joinfield2"))Storm简介•Storm使用场景✓2.批处理有时候为了性能或者一些别的原因,你可能想把一组tuple一起处理,而不是一个个单独处理。
✓3.BasicBolt1. 读一个输入tuple2. 根据这个输入tuple发射一个或者多个tuple3. 在execute的方法的最后ack那个输入tuple遵循这类模式的bolt一般是函数或者是过滤器, 这种模式太常见,storm为这类模式单独封装了一个接口: IbasicBoltStorm简介•Storm使用场景4.内存内缓存+Fields grouping组合在bolt的内存里面缓存一些东西非常常见。
缓存在和fieldsgrouping结合起来之后就更有用了。
比如,你有一个bolt把短链接变成长链接(bit.ly, t.co之类的)。
你可以把短链接到长链接的对应关系利用LRU算法缓存在内存里面以避免重复计算。
比如组件一发射短链接,组件二把短链接转化成长链接并缓存在内存里面。
看一下下面两段代码有什么不一样:builder.setBolt(2, new ExpandUrl(), parallelism).shuffleGrouping(1);builder.setBolt(2, new ExpandUrl(), parallelism).fieldsGrouping(1, new Fields("url"));Storm简介•Storm使用场景• 5.计算top N比如你有一个bolt发射这样的tuple: "value", "count"并且你想一个bolt基于这些信息算出top N的tuple。
最简单的办法是有一个bolt可以做一个全局的grouping的动作并且在内存里面保持这top N的值。
这个方式对于大数据量的流显然是没有扩展性的,因为所有的数据会被发到同一台机器。
一个更好的方法是在多台机器上面并行的计算这个流每一部分的top N, 然后再有一个bolt合并这些机器上面所算出来的top N以算出最后的top N, 代码大概是这样的:Storm简介•Storm使用场景builder.setBolt(2, new RankObjects(), parallellism) .fieldsGrouping(1, new Fields("value"));builder.setBolt(3, new MergeObjects()).globalGrouping(2);这个模式之所以可以成功是因为第一个bolt的fields grouping使得这种并行算法在语义上是正确的。