导读: Storm是一个分布式计算框架,主要使用Clojure与Java语言编写,最初是由Nathan Marz带领Backtype公司团队创建,在Backtype公司被Twitter公司收购后进行开源。最初的版本是在2011年9月17日发行,版本号0.5.0。
2013年9月,Apache基金会开始接管并孵化Storm项目。Apache Storm是在Eclipse Public License下进行开发的,它提供给大多数企业使用。经过1年多时间,2014年9月,Storm项目成为Apache的顶级项目。目前,Storm的最新版本1.1.0。
Storm是一个免费开源的分布式实时计算系统。Storm能轻松可靠地处理×××的数据流,就像Hadoop对数据进行批处理;
Storm与Hadoop的区别
Storm用于实时计算,Hadoop用于离线计算。
Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批处理。
Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
Storm与Hadoop的编程模型相似
Storm hadoop 角色 Nimbus JobTracker Supervisor TaskTracker Worker Child 应用名称 Topology Job 编程接口 Spout/Bolt Mapper/Reducer hadoop的相关名称
Job:任务名称
JobTracker:项目经理(JobTracker对应于NameNode;JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。)
TaskTracker:开发组长(TaskTracker对应于DataNode;TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。)
Child:负责开发的人员
Mapper/Reduce:开发人员中的两种角色,一种是服务器开发、一种是客户端开发
storm相关名称
Topology:任务名称
Nimbus:项目经理
Supervisor:开组长
Worker:开人员
Spout/Bolt:开人员中的两种角色,一种是服务器开发、一种是客户端开发
Storm应用场景
Storm用来实时计算源源不断产生的数据,如同流水线生产,Storm能用到很多场景中,包括:实时分析、在线机器学习、连续计算等。
推荐系统:实时推荐,根据下单或加入购物车推荐相关商品
金融系统:实时分析股票信息数据
预警系统:根据实时采集数据,判断是否到了预警阈值。
网站统计:实时销量、流量统计,如淘宝双11效果图
Sotrm特点
适用场景广泛:Storm可以适用实时处理消息、更新数据库、持续计算等场景。
可伸缩性高:Storm的可伸缩性可以让Storm每秒处理的消息量达到很高。扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度。Storm使用Zookeeper来协调机器内的各种配置使得Storm的集群可以很容易的扩展。
保证无数据丢失:Storm保证所有的数据都被处理。
异常健壮:Storm集群非常容易管理,轮流重启节点不影响应用。
容错性好:在消息处理过程中出现异常,Storm会进行重试。
Storm编程模型
storm01.png
元组(Tuple)
元组(Tuple),是消息传递的基本单元,是一个命名的值列表,元组中的字段可以是任何类型的对象。Storm使用元组作为其数据模型,元组支持所有的基本类型、字符串和字节数组作为字段值,只要实现类型的序列化接口就可以使用该类型的对象。元组本来应该是一个key-value的Map,但是由于各个组件间传递的元组的字段名称已经事先定义好,所以只要按序把元组填入各个value即可,所以元组是一个value的List。
流(Stream)
流是Storm的核心抽象,是一个×××的元组系列,源源不断传递的元组就组成了流,在分布式环境中并行地进行创建和处理
水龙头(Spout)
Spout是拓扑的流的来源,是一个拓扑中产生源数据流的组件。通常情况下,Spout会从外部数据源中读取数据,然后转换为拓扑内部的源数据。
Spout可以是可靠的,也可以是不可靠的。如果Storm处理元组失败,可靠的Spout能够重新发射,而不可靠的Spout就尽快忘记发出的元组。
Spout可以发出超过一个流。
Spout的主要方法是nextTuple()。NextTuple()会发出一个新的Tuple到拓扑,如果没有新的元组发出,则简单返回。
Spout的其他方法是ack()和fail()。当Storm检测到一个元组从Spout发出时,ack()和fail()会被调用,要么成功完成通过拓扑,要么未能完成。Ack()和fail()仅被可靠的Spout调用。IRichSpout是Spout必须实现的接口。
转接头(Bolt)
在拓扑中所有处理都在Bolt中完成,Bolt是流的处理节点,从一个拓扑接收数据,然后执行进行处理的组件。Bolt可以完成过滤、业务处理、连接运算、连接与访问数据库等任何操作。
Bolt是一个被动的角色,七接口中有一个execute()方法,在接收到消息后会调用此方法,用户可以在其中执行自己希望的操作。
Bolt可以完成简单的流的转换,而完成复杂的流的转换通常需要多个步骤,因此需要多个Bolt。
Bolt可以发出超过一个的流。
拓扑(Topology)
拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间的消息流动而形成逻辑上的拓扑结构。
把实时应用程序的运行逻辑打成jar包后提交到Storm的拓扑(Topology)。Storm的拓扑类似于MapReduce的作业(Job)。其主要的区别是,MapReduce的作业最终会完成,而一个拓扑永远都在运行直到它被杀死。一个拓扑是一个图的Spout和Bolt的连接流分组。
Storm核心组件
nimbus是整个集群的控管核心,负责topology的提交、运行状态监控、任务重新分配等工作。
zk就是一个管理者,监控者。
总体描述:nimbus下命令(分配任务),zk监督执行(心跳监控,worker、supurvisor的心跳都归它管),supervisor领旨(下载代码),招募人马(创建worker和线程等),worker、executor就给我干活!task就是具体要干的活。
主控节点与工作节点
Storm集群中有两类节点:主控节点(Master Node)和工作节点(Worker Node)。其中,主控节点只有一个,而工作节点可以有多个。
Nimbus进程与Supervisor进程
主控节点运行一个称为Nimbus的守护进程类似于Hadoop的JobTracker。Nimbus负责在集群中分发代码,对节点分配任务,并监视主机故障。
每个工作节点运行一个称为Supervisor的守护进程。Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程。
流分组(Stream grouping)
流分组,是拓扑定义中的一部分,为每个Bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在Bolt的任务之间进行分发。Storm内置了8种流分组方式。
工作进程(Worker)
Worker是Spout/Bolt中运行具体处理逻辑的进程。一个worker就是一个进程,进程里面包含一个或多个线程。
执行器(Executor)
一个线程就是一个executor,一个线程会处理一个或多个任务。
任务(Task)
一个任务就是一个task。
实时计算常用架构图
后台系统 -->Flume集群-->Kafka集群-->Storm集群-->Redis集群
Flume获取数据。
Kafka临时保存数据。
Strom计算数据。
Redis是个内存数据库,用来保存数据。
Storm的核心概念
Storm 计算结构中的几个核心概念为 topology,stream,spout,bolt,下面我们将依次介绍。
1.Topology
Topology 是 storm 中最核心的概念,其是运行在 storm 集群上的一个实时计算应用,相当于 hadoop 中的一个 job,区别于 job 的时,job 会有明确的开始和结束,而 topology 由于实时的流式计算的特殊性,从启动的那一刻起会永远的运行下去,直到手动停止。
Topology 由 stream,spouts,bolts 组成,可以描述为一个有向无环图,如下:
图一 topology 示例
2.Stream
Stream 是 storm 中对数据流的抽象,是由无限制的 tuple 组成的序列。Tuple 可以理解为包含一个或多个键值对的 hash。Tuples 在 stream 中流经 bolts,被逐步处理,最终得到预设的结果。
Stream 可比作一条源源不绝的河流,tuple 就是组成这条河流的无数水滴。每一个 stream 在 storm 中都有一个唯一标示的 id。
3.Spout
从图一可以看出,spout 是一个 topology 的数据源,负责连接数据源,并将数据转化为 tuple emit 到 topology中,经由 bolts 处理。
Spout 提供了一对核心方法来保障 storm 在数据没有被正确处理的情况下,不会被丢弃,仍能被重新处理,当然这是可选的,我们也可以不关心 tuple 是否被正确的处理,只负责向topology 中 emit 数据(在某些场景下可能不需要)。具体实现原理在后文会详细介绍。
Storm + Kakfa 是很常见的组合,storm提供了storm-kafka扩展,封装了多个可用的 kafka spouts 供直接使用,相关文档可以参考这里。
4.Bolt
Bolt 是 topology 中的数据处理单元,每个 bolt 都会对 stream 中的 tuple 进行数据处理。复杂的数据处理逻辑一般拆分成多个简单的处理逻辑交由每个 Bolt 负责。
Bolt 可以执行丰富的数据处理逻辑,如过滤,聚合,链接,数据库操作等等。
Bolt 可以接受任意个数据流中的 tuples,并在对数据进行处理后选择性的输出到多个流中。也就是说,bolt 可以订阅任意数量的spouts 或其他 bolts emit 的数据流,这样最终形成了复杂的数据流处理网络,如图一。
书籍介绍
内容简介 · · · · · ·
本书由基础知识、安装与部署、研发与维护、进阶知识、企业应用5个模块构成,并细分为20个章节,其中“基础知识”6章、“安装与部署”4章、“研发与维护”4章、“进阶知识”5章、“企业应用”1章,分别介绍了Storm的安装与配置、Storm的基本原理、Topology组件、Spout组件、Bolt组件、ZooKeeper集群、实战环节等内容,包括理论基础、环境搭建、研发准备、应用案例等。
本书理论联系实际,通过大量实例分析,让读者在较短的时间内掌握Storm的使用,搭建并研发出自己的基于Storm的大数据处理平台。
本书适合所有大数据处理、实时流数据处理、Storm的开发者或爱好者,也适合高等院校和培训学校相关专业的师生参考使用
内容简介:
微软搜索技术部门高级研发工程师实战经验分享
从源代码的角度深入剖析Storm设计与实现
学习如何实现和高效利用“实时的Hadoop”
大数据处理是当前计算机科技的热点,而流式实时大数据处理更是这皇冠上璀璨的明珠。实时流数据处理在搜索引擎、社交网络、电商网站、广告平台等领域有着相当广泛的应用。Storm是极其高效、灵活、高扩展的流式数据处理平台。它被Twitter、Taobao、Yahoo、Groupon等公司采用。
本书由微软公司互联网工程院经验丰富的一线程序员操刀编写,包含很多实战经验和使用心得,很好地结合了代码分析和应用实例。本书对于进行流式数据处理的研究、Storm的深入理解以及实际应用都有很好的参考价值。
内容简介:《Storm分布式实时计算模式》全书分为10章:
第1章介绍使用Storm建立一个分布式流式计算应用所涉及的核心概念,包括Storm的数据结构、开发环境的搭建,以及Storm程序的开发和调试技术等;
第2章详细讲解Storm集群环境的安装和搭建,以及如何将topology部署到分布式环境中;
第3章通过传感器数据实例详细介绍Trident topology;T
第4章讲解如何使用Storm和Trident进行实时趋势分析;
第5章介绍如何使用Storm进行图形分析,将数据持久化存储在图形数据库中,并且查询数据来发现其中潜在的联系;;
第6章讲解如何在Storm上使用递归实现一个典型的人工智能算法;
第7章演示集成Storm和非事务型系统的复杂性,通过集成Strom和开源探索性分析架构Druid,实现一个可配置的实时系统来分析金融事件。
第8章探讨Lambda体系结构的实现方法,讲解如何将批处理机制和实时处理引擎结合起来构建一个可纠错的分析系统;
第9章 讲解如何将Pig脚本转化为topology并且使用Storm-YARN部署topology,将批处理系统转化为实时系统;
第10章 介绍如何在云服务提供商提供的主机环境下部署和运行Storm。
今天就分享到这里,如果大家觉得这些内容有用的话,希望大家多多关注,最后,送大家一碗鸡汤,我先干为敬:
总有许多事,需要你一个人扛。别畏惧孤独,它能帮你划清内心的清浊,是你无法拒绝的命运历程;
别躲避困苦,莫让冷世的尘埃,冰封你的笑容,迟滞你的步履。走得越久,时光越老,人心越淡。
忘不掉昨天,它就是束缚你的阴影;向往着明天,你才能描绘它的模样。
对大数据感兴趣的朋友可以加我的群 615997810 一起交流学习,还有免费资料可以领取
转载于:https://blog.51cto.com/13722730/2133894