大数据实战项目必备技能三:storm

导读: 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 一起交流学习,还有免费资料可以领取

原文地址:http://blog.51cto.com/13722730/2133894

时间: 2024-10-28 22:09:27

大数据实战项目必备技能三:storm的相关文章

数据工程师必须掌握的7个大数据实战项目

简介: 值得收藏,数据工程师必须掌握的7个大数据实战项目 原创: Lenis 有关SQL 1作为一名电影爱好者,我阅片无数,有些片子还经常翻来覆去看个好几遍.小时候因为这事儿,没少被我妈抓耳朵,“看过的片子为啥还要倒二遍?”我也说不上来,就是单纯的爱看. 男人爱看的电影,以武侠,动作,科技为多,也认识了一帮明星,比如尼古拉斯凯奇,史泰龙,李小龙,成龙,李连杰,甄子丹等等.这些人很猛,有男人气.只要是他们的片儿,肯定不落下.在我眼里,他们就是好片代名词. 不知几何时,电影上开始出现一些不认识的男明

阿里大数据架构师必备技能,你“佩奇”了嘛?

这两天真的是被<啥是佩奇>这支广告片刷屏了.佩奇明明是个喜剧角色,却把所有人都给看哭了! 中间的剧情,小孙子一句:"想要佩奇",结果爷爷就开始了满村子的寻找佩奇,到最后寻找到了小编认为是最好看的佩奇 不知道大家看了之后是什么感觉,反正我看了之后的感觉是非常感动了.不过经过几天的发酵,"佩奇"这两个字似乎有了更多的含义了!各种"佩奇"齐出不穷,女人的"佩奇"是什么样的?程序员的"佩奇"是什么样的?

大数据工程师的必备技能

一.数据可视化 R不仅是编程语言,同时也R具有强大的统计计算功能和便捷的数据可视化系统.在此,推荐大家看一本书,这本书叫做<R数据可视化手册>.<R数据可视化手册>重点讲解R的绘图系统,指导读者通过绘图系统实现数据可视化.书中提供了快速绘制高质量图形的150多种技巧,每个技巧用来解决一个特定的绘图需求. Python 出现了很多新的Python数据可视化库,弥补了一些这方面的差距.matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,b

30天搞定大数据爬虫项目

详情请交流  QQ  709639943 00.30天搞定大数据爬虫项目 00.零基础实战机器学学习 00.企业级实战 Spark离线和实时电影推荐系统 00.三大项目掌握Storm流计算 00.道路交通实时流量监控预测系统 00.基于Spark2.x新闻网大数据实时分析可视化系统 00.小码哥Java大神班五期 任小龙SSM Spring5 Mybatis SpringMVC 00.Python玩转人工智能框架 TensorFlow 00.web开发级mysql颠覆实战课程 00.微信小游戏入

让我们一起走进大数据开源项目--第1节

最近大数据领域最火的消息莫过于Pivotal兑现了其年初对于开源其大数据核心产品GemFire,HAWQ,Greemplum DB的承诺 .这个消息也让Pivotal在国内技术社区风风光光的火了一把,程序猿们可以看到真正的企业级数据仓库是如何设计和实现的. 与此同时,开源社区中也存在很多类似的优秀大数据相关项目,涵盖了分布式数据存储与计算,数据处理,数据仓库,机器学习等与数据有关的方方面面,下面就让我们看看开源社区中的这些大数据项目典型代表. 首先,说起大数据开源项目,第一个必须要提的当然就是A

Kylin大数据 实战 教程

Kylin大数据实战教程链接:https://pan.baidu.com/s/17vuLNQDjBGUirQV_IdXgfg提取码:bj4b 复制这段内容后打开百度网盘手机App,操作更方便哦课程学习地址:https://www.xuetuwuyou.com/course/316请添加链接描述课程出自学途无忧网:www.xuetuwuyou.com咨询QQ:2591905126 本课程为专题课,通过全面讲解Kylin架构原理.分布式集群搭建以及项目案例,让你快速掌握Kylin实时大数据BI技术,

大数据时代的用户信息安全三原则

几年前,雷·库兹韦尔写过一本书叫做<奇点临近>.他说,人类文明经过这么多年发展,在本世纪的中叶会经过一个点,这个点,就是奇点.奇点是一个拐点,也就是说人类文明可能会进入一个分岔,可能会进入一个新的文明高度,也可能会急转直下,人类就此灭亡.所以奇点有双重的含义,有可能变得更好,也有可能变得更糟糕. 进入微软.亚马逊,谷歌等美国IT企业工作人才项目,起薪40万,百度搜索(MUMCS) 我认为随着大数据时代的到来,互联网也将走到一个奇点,而安全将决定互联网走过这个奇点之后,到底是向上走到一个新高度,

《OD大数据实战》hive环境搭建

一.搭建hadoop环境 <OD大数据实战>hadoop伪分布式环境搭建 二.hive环境搭建 1. 准备安装文件 下载地址: http://archive.cloudera.com/cdh5/cdh/5/ hive-0.13.1-cdh5.3.6.tar.gz 2. 解压 tar -zxvf hive-0.13.1-cdh5.3.6.tar.gz -C /opt/modules/cdh/ 3. 修改配置 cd /opt/modules/cdh/hive-0.13.1-cdh5.3.6/con

SparkSQL大数据实战:揭开Join的神秘面纱

本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介绍 Join是数据库查询永远绕不开的话题,传统查询SQL技术总体可以分为简单操作(过滤操作-where.排序操作-limit等),聚合操作-groupby以及Join操作等.其中Join操作是最复杂.代价最大的操作类型,也是OLAP场景中使用相对较多的操作.因此很有必要对其进行深入研究. 另外,从业