storm入门

jing-wang jing-wang     2022-12-19     534

关键词:

前面介绍了流计算,在流计算领域,一个热门的计算框架就是-Storm。还是先介绍概念。。。

一、Storm是什么

在流处理过程中,我们除了考虑最重要的数据处理的逻辑,还需要维护消息队列和消费者,考虑消息怎么流、怎么序列化等。而Storm就是这样一个流式计算框架,它为你完成了消息传递等这些通用模块,让你专注于实时处理的业务逻辑。

Storm--一种分布式实时计算系统。Storm之于流计算,类似于Hadoop之于批处理。Storm可以简单、高效、可靠的处理流数据,它提供了简单的编程原语,并且支持多种语言,开发人员只需要关注业务逻辑。可以应用到很多领域,例如实时分析、在线机器学习、分布式RPC、ETL等。

下面进一步了解下Storm

二、Storm设计思想

在Storm里面包含几个组件:Streams, Sputs ,Bolts, Topology,Stream Groupings。

1、Streams(流)

Streams是Storm对数据的抽象。Storm处理的数据对象是“流数据”,流数据是一个无限的Tuple序列,这些Tuple序列会以分布式的方式并行创建何处理。

熟悉Python的同学可能对Tuple(元组)更容易理解一些,它就是一个元素的有序序列,每一个Tuple就是一个值列表,列表里的值的类型没有严格的规定,可以是基本类型、字符类型、字节数组也可以是其他可序列化的类型。

2、Spouts(喷口)

Spouts是Storm对数据源头的抽象。Spouts是stream的源头,从外部读取流数据并持续发出Tuple。

3、Bolts(螺栓)

Bolts是Storm对stream的状态转换过程的抽象。Bolts既可以处理tuple,也可以把处理以后的tuple作为新的streams发送给其他的bolts。对tuple的处理逻辑都被封装在bolts中,在bolts中可以对数据执行过滤、聚合、查询等操作。

4、Topology(拓扑)

Topology是Storm对Spouts和Bolts组成的网络的抽象。Topology是Storm中最高层次的抽象概念,可以被提交到Storm集群执行。一个Topology就是又给流转换图,图中的节点是Spouts或Bolts,图中的边表示Bolts订阅了哪个Stream。当Spout或bolt发送元组的时候,会把元组发送到每个订阅了该stream的bolt上进行处理。

topology支持通过各种编程语言来创建、提交topology。

5、Stream Groupings

用于告知topology如何在两个组件之间进行tuple的传送,组件之间可以是spout和bolt之间或者不同bolt之间。stream groupings决定了一个任务在什么时候、以什么形式发送tuple。

Storm中的stream gouping有以下6种方式。

shuffleGrouping:随机分组,把stream中的tuple随机分发给各个bolts的task

fieldsGrouping:按字段分组,相同字段的tuple分配到同一个task中

all Grouping:广播发送,每个task收到所有的tuple

globalGrouping:全局分组,所有的tuple都发送到同一个task中

nonGrouping:不分组,和shuffleGrouping类似,当前task的执行和它的被订阅者在同一个线程中执行

directGrouping:直接分组,直接指定某个task来执行tuple的处理。

三、Storm框架设计

对于Strom框架的理解,类比着hdp可能会更容易理解些。

Strom运行在分布式集群中,我们可以类比下hadoop,hdp上运行的是MR作业,Storm上运行的是Topology。不过MR是有限的,会结束,但是topology会对数据进行持续处理,直到人为终止。

技术图片

 

一个Storm集群包含Master节点和Worker节点。

Master节点上运行Nimbus后台程序,类似MR中的JobTracker。负责集群内代码的分发、worker任务的分配和故障监测。

Worker运行Supervisor后台程序,负责监听分配给当前机器的工作,根据Nimbus分配的任务来启动或停止worker进程。每个supervisor有n个worker进程,负责代理task给worker进程,worker再孵化执行线程最终运行task。

worker负责执行特定的task,worker本身不执行任务,而是孵化executors,让executors执行task;executor本质上是worker进程孵化出来的线程,executor运行task都属于同一spout或bolt。task是实际执行的任务处理,或者是Spout或者是Bolt。

storm使用内部消息系统在nimbus和supervisor之间进行通信。

master和worker之间不会直接交互,为了实现master和worker之间的协同,采用zookeeper作为协调组件。zk中存储master和worker的状态信息,以便节点故障时根据zk中状态信息进行快速恢复,保证storm的稳定性。

 

在这样的架构下,storm的工作流程如下图

1、client把topology提交到storm集群

2、提交top后nimbus收集task

3、Nimbus分发task,把分配给Supervisor的task写入zk

4、Supervisor周期性发送心跳表示自己还活着,如果Supervisor挂掉,nimbus将task分发给其他supervisor

5、Supervisor从zk中获取所分配的任务,启动worker进程,woker进程执行任务。

6、task完成后,supervisor等待新的task

7、如果nimbus挂掉,supervisor继续执行自己的task,task完成后,supervisor继续等待新的task

storm入门wordcount示例

StormAPI文档网址如下:http://storm.apache.org/releases/current/javadocs/index.html一、关联代码使用maven,代码如下。pom.xml 和Storm入门(三)HelloWorld示例相同RandomSentenceSpout.java/***LicensedtotheApacheSoftwareFoundation(AS 查看详情

storm入门

前面介绍了流计算,在流计算领域,一个热门的计算框架就是-Storm。还是先介绍概念。。。一、Storm是什么在流处理过程中,我们除了考虑最重要的数据处理的逻辑,还需要维护消息队列和消费者,考虑消息怎么流、怎么序列化... 查看详情

storm入门--storm编程(代码片段)

以电信通话记录为例移动呼叫及其持续时间将作为对ApacheStorm的输入,Storm将处理和分组在相同呼叫者和接收者之间的呼叫及其呼叫总数。 编程思想:在storm中,把对数据的处理过程抽象成一个topology,这个topology包含的组件... 查看详情

storm入门

650)this.width=650;"src="https://s4.51cto.com/wyfs02/M00/07/68/wKiom1nJCuaj-oZNAAJiqWhXXkM324.png"style="float:none;"title="Storm第01天-01.介绍[00_20_26][20170925-210956-0].PNG"alt="wKiom1nJCuaj-oZNAAJiqW 查看详情

storm入门twitterstorm:drpc简介

作者:xumingming|可以转载,但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://xumingming.sinaapp.com/756/twitter-storm-drpc/本文翻译自:https://github.com/nathanmarz/storm/wiki/Distributed-RPC。Storm里面引入DRPC主要是利用storm的实时... 查看详情

(转发)storm入门原理介绍

1.hadoop有master与slave,Storm与之对应的节点是什么?2.Storm控制节点上面运行一个后台程序被称之为什么?3.Supervisor的作用是什么?4.Topology与Worker之间的关系是什么?5.Nimbus和Supervisor之间的所有协调工作有master来完成,还是Zookeeper... 查看详情

storm入门twitterstorm:transactionaltopolgoy简介

作者:xumingming|可以转载,但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://xumingming.sinaapp.com/736/twitter-storm-transactional-topolgoy/本文翻译自:https://github.com/nathanmarz/storm/wiki/Transactional-topologies概述Storm通过 查看详情

storm入门storm常见模式之流聚合

流聚合(streamjoin)是指将具有共同元组(tuple)字段的数据流(两个或者多个)聚合形成一个新的数据流的过程。从定义上看,流聚合和SQL中表的聚合(tablejoin)很像,但是二者有明显的区别:tablejoin的输入是有限的,并且join... 查看详情

storm实时计算:流操作入门编程实践

转自:http://shiyanjun.cn/archives/977.htmlStorm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比较简单,实际编程开发起来相对容易。下面,简单介绍编程实践过程中需要... 查看详情

storm入门学习随记

推荐慕课网视频:http://www.imooc.com/video/10055 ====Storm的起源。Storm是开源的、分布式、流式计算系统 什么是分布式呢?就是将一个任务拆解给多个计算机去执行,让许多机器共通完成同一个任务,把这个多机的细节给屏蔽... 查看详情

这篇storm入门,你不可能看不懂(代码片段)

...知半解而已)由于最近在整理系统,所以顺便花了点时间入门了一下Storm(前几天花了点时间改了一下,上线以 查看详情

storm入门helloworld示例

一、关联代码使用maven,代码如下。pom.xml<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apa 查看详情

storm入门2-单词计数案例学习

   【本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑】   单词计数拓扑WordCountTopology实现的基本功能就是不停地读入一个个句子,最... 查看详情

storm入门--流计算

 一、静态数据、流数据以及批量计算、实时计算大数据分类两类:静态数据和动态数据(流数据)。针对这两类数据的计算模式分别是批量计算和实时计算。静态数据:历史数据持久化存储在系统里,这类数据的特点是数据... 查看详情

storm入门,看这篇就够了

部分一:Srorm简介1.1Storm是实时的数据流,Hadoop是批量离线数据起源背景Twitter开源的一个类似于Hadoop的实时数据处理框架Storm是由NathanMarz在BackType公司【做社交数据分析,数据量大】工作中实现的,这家公司后来被Twitter收购。Ps:... 查看详情

storm框架基础

...Storm简述如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较: 在SparkStreaming中:我们曾尝试过每秒钟的实时数据处理,或者使用Window若干时间范围内的数据统一处理结果。亦或统计所有... 查看详情

storm学习笔记hellowordcount-单机模式

...头看,吐血的简单。 Storm有两种模式,单机和集群。入门当然选单机。1、安装JDK,配置Eclipse环境2、建立一个Maven工程,在pom.xml加上这段:<dependency>    &l 查看详情

pl1908-storm实时数据分析平台

PL1908-Storm实时数据分析平台随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来... 查看详情