Storm详解一、Storm 概述

一、Storm概述

Storm是一个分布式的、可靠的、零失误的流式数据处理系统。它的工作就是委派各种组件分别独立的处理一些简单任务。在Storm集群中处理输入流的是Spout组件,而Spout又把读取的数据传递给叫Bolt的组件。Bolt组件会对收到的数据元组进行处理,也有可能传递给下一个Bolt。我们可以把Storm集群想象成一个由bolt组件组成的链条集合,数据在这些链条上传输,而bolt作为链条上的节点来对数据进行处理。

Storm和Hadoop集群表面看上去很类似,但是Hadoop上面运行的是MapReduceJobs,而在Storm上运行的是拓扑topology,这两者之间是非常不一样的,关键区别是:MapReduce最终会结束,而一个topology永远会运行(除非你手动kill掉),换句话说,Storm是面向实时数据分析,而Hadoop面向的是离线数据分析。

假设有这么一种情形,当你看政论类节目的时候,他们会经常提到一些人名和一些热门话题,如果我们把其中人名和话题的重复次数都记录下来,结果应该是一件很有趣的事情。

因此,想象在Storm环境下,我们可以把辩论者说的话作为输入流,spout组件来读取这些数据,然后把每一句话发送给bolt1组件,bolt1组件负责把这一句话拆分成一个个单词,再把这些单词发送到bolt2组件,bolt2组件负责统计每个单词的数量然后把这些信息存储到数据库中。辩论者在不断的说话,而storm不断的实时刷新数据库中结果,当你想查看这些结果时,你只需查询数据库即可。

现在,你可以想象如果可以把这些spout和bolt均衡分布到整个集群中,并且可以方便地做无限制的扩展,厉害吧?这就是Storm的威力!

图1.1:一个简单的Topology

下面介绍下Storm的典型应用场景

1.流式处理

2.实时计算

3.分布式远程过程调用

二、Storm组件

     集群中有两种类型的节点:主节点和工作节点

    1. master节点:运行Nimbus进程,负责分发代码,安排任务,监控运行状态(主要是节点成功失败状态)。
    2. worker节点:运行Supervisor进程,负责执行一个Topology的一个子集

图1.2:storm 集群中的组件:

Storm集群中的状态都保存在zookeeper或本地磁盘中,因此Storm中的进程都是无状态的,任何一个节点失败或重启都不会影响整个集群。Storm底层使用zeromq来保证其非凡的特性:

  • 并发的socket 类
  • 比TCP更快,适用于集群环境和超级计算
  • 通过inproc、IPC、TCP和多路广播传输消息
  • 异步IO
  • Connect N-to-N via fanout,pubsub,pipeline,requst-reply
  • 使用push/pull模式

三、Storm特性

  • 编程简单:主要依赖于spout和bolt来实现
  • 支持多种编程语言:基于JVM的语言都可以支持,任何一个其它语言只要实现了一个中间类也可支持
  • 容错性高:运行宕机、重启等
  • 可拓展:可以任意增删节点到集群
  • 可靠性高:所有消息都被保证至少消费一次,也就是说,Storm中消息不会丢失
  • 快速:快就不必多少了
  • 事务支持

初步了解Storm之后,下一节会通过写一个简单的Demo运行一下来让大家真实体会一下Storm。

Storm详解一、Storm 概述

时间: 2024-10-08 16:42:29

Storm详解一、Storm 概述的相关文章

Storm详解二、写第一个Storm应用

在全面介绍Storm之前,我们先通过一个简单的Demo让大家整体感受一下什么是Storm. Storm运行模式: 本地模式(Local Mode): 即Topology(相当于一个任务,后续会详细讲解)  运行在本地机器的单一JVM上,这个模式主要用来开发.调试. 远程模式(Remote Mode):在这个模式,我们把我们的Topology提交到集群,在这个模式中,Storm的所有组件都是线程安全的,因为它们都会运行在不同的Jvm或物理机器上,这个模式就是正式的生产模式. 写一个HelloWor

大数据入门第十六天——流式计算之storm详解(二)常用命令

一.常用命令 1.提交命令 提交任务命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称] torm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount 原文地址:https://www.cnblogs.com/jiangbei/p/8513989.html

翻译「C++ Rvalue References Explained」C++右值引用详解 Part1:概述

本文系对「C++ Rvalue References Explained」 该文的翻译,原文作者:Thomas Becker. 该文较详细的解释了C++11右值引用的作用和出现的意义,也同时被Scott Meyers推荐,全文共分11个部分,我将利用业余时间,分别翻译. 受笔者水平所限,可能叙述会出现些许问题,还望多多指正. 部分名词为了保持含义和方便理解,并未翻译成中文,有的在括号内给出了常见的中文翻译. 目录 概述 Move语义 右值引用 强制Move语义 右值引用就是右值吗? Move语义

Web服务器项目详解 - 00 项目概述

目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接处理(上) 05 http连接处理(中) 06 http连接处理(下) 07 定时器处理非活动连接(上) 08 定时器处理非活动连接(下) 09 日志系统(上) 10 日志系统(下) 11 数据连接池 12 注册和登录校验 13 服务器测试 14 项目遇到的问题及解决方案 15 项目涉及的常见面试题 功能 Linux下C++轻量级Web服务器基于C/C++语言

aggregations 详解1(概述)

aggregation分类 aggregations —— 聚合,提供了一种基于查询条件来对数据进行分组的方法.类似于 SQL 中的 group by 操作. 聚合可以嵌套,由此可以组成复杂的操作(Bucketing聚合可以包含sub-aggregation). 聚合整体上可以分为 3 类: 1. Bucketing:桶分聚合: 此类聚合会有一个关键字(field.script),以及一些分组的标准(条件).执行聚合操作时候,文档会对每一个分组标准进行判断,如果文档满足了某个标准,该文档就会被分

Android Fragment详解(一):概述

Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment.你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响.例如:当activity暂停时

C编译器、链接器、加载器详解

摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作系统的启动代码和用到的库文件进行组织形成最终生成可加载.可执行代码的过程. 过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是

Android图文详解属性动画

Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主要讲解如何使用属性动画.关于视图动画可以参见博文<Android四大视图动画图文详解>. 概述 视图动画局限比较大,如下所述: 视图动画只能使用在View上面. 视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异,并导致了一

expect使用详解

linux expect的使用详解 一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而Expect就使用来实现这种功能的工具. Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预.Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件