分布式的实时计算框架,storm对于实时计算的意义类似于hadoop对于批处理的意义。

Storm的适用场景:
1.流数据处理:storm可以用来处理流式数据,处理之后将结果写到某个存入中去。

2.持续计算:连续发送数据到客户端,使它们能够实时更新并显示结果,如网站指标

3.分布式RPC:由于storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式rpc框架来使用。

我们的搜索引擎本身也是一个分布式rpc系统。

storm关注的是数据的一次写入多次处理,storm的job运行起来是持续不断的。

Hadoop关注的是数据的一次写入,多次查询,使用。job执行完就结束了。

  hadoop storm
组件角色 jobtracker
tasktracker
child
Nimbus
Supervisor
Worker
应用名称 Job Topology
组件接口 Map/Reduce Spout/Bolt

Storm的特点:

  • 编程模型简单
  • 可扩展
  • 高可靠性
  • 高容错性
  • 支持多种语言编程

支持本地模式运行和远程模式。

Storm集群架构:

 

Topology(拓扑)

storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构,一个Topology是由Spouts和bolts组成的图。

Topology的定义是一个Thrift结构,幵且Nimbus就是一个Thrift服务, 你可以提交由
任何询言创建的topology。

Tuple

可以认为是一个Map,但要求此数据类型是可以序列化的,这点和Hadoop的一样,其实分布式开发都需要注意这点。

Field1:String Filed2:int field3:string Filed:customerobj

一个没有边界的,源源不断的连续的Tuple序列就组成了Stream.

Spout

这是storm中消息的生产者,它会有一个NextTuple方法,一直产生Tuple形成流,它可以读成取文件生成Tuple,也可以从Kafka里面读取消息生成Tuple.

通常会从外部数据源(消息队列,数据库)读取数据,封闭成Tuple,发送到Stream中。

Bolt

Topology中所有的处理都是由它完成,即所有的消息处理逻辑都封装在里面。可以完成:过滤,聚合,访问文件数据库等。

它有一个Execute(Tuple Input)方法,处理spout或其他bolt传过来的数据,处理完并输出到下游。

Stream Grouping

定义了tuple如何被传送。从spout到bolt或bolt2bolt之间的传送方式。

1.随机分组(shuffle grouping)随机分发tuple到bolt,保证每个任务获得相等数量的tuple.

2.字段分组(Fields grouping)根据指定的字段分割数据流,并分组。例如,wordcount任务中,根据word进行分组计算。

3.全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型要慎用。

4.全局分组(Global grouping):全部流都分配到bolt的同一个任务。分配给ID最小的那个Task.

5.无分组(None Grouping)暂时等于随机分组

6.直接分组(Direct grouping)由tuple生产者决定去哪里。

7.本地或随机分组(Local or Shuffle grouping)如果目标bolt有一个某多个任务在同一个worker进程中,tuples会随机分发给这些任务,否则就随机分组。

自定义分组,实现CustomStreamGrouping接口来定制自己需要的分组。

运行中的topology主要三个组件组成:

worker process(进程)Executors (线程)和tasks

Worker:

运行具体处理组件的进程。一个拓扑可能会在一个或多个worker里面执行,每一个worker是一个物理JVM并且执行整个拓扑的一部分,Storm会尽量均匀地将工作分配给所有的worker.

Executor:每一个executor对应一个线程,一个executor是一个worker进程生成的一个线程。它可能运行着一个相同的组件的一个或多个Task.

Task:每一个spout或bolt会被当作很多task在整个集群中运行。

Storm 基础知识的更多相关文章

  1. Storm基础知识

    上一篇文章我们介绍一个简单的Storm起源,今天我去学习Storm一些主要的知识,他的基本使用基本的了解.幸运的是,,不是太困难,假设我们理解Hadoop的MapReduce模型的话.看这个也是很类似 ...

  2. Storm基础知识学习

    概述 Storm是一个免费开源的分布式实时计算系统.Storm能轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理 编程模型 spout:数据读取数据.接收数据.将数据写出到blot bol ...

  3. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  4. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  5. 最全的spark基础知识解答

    原文:http://www.36dsj.com/archives/61155 一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduc ...

  6. ZooKeeper_基础知识学习

    ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...

  7. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  8. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

随机推荐

  1. Programming in Go (Golang) – Setting up a Mac OS X Development Environment

    http://www.distilnetworks.com/setup-go-golang-ide-for-mac-os-x/#.V1Byrf50yM8 Programming in Go (Gola ...

  2. javascript 之拼接html字符串

    // var one = {"id":1, "leasetime":2, "ney":0,"myhuifangshi": ...

  3. 关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案

    不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改” 解决方法:  打开SQL SERVER 2008 工具-->选项- ...

  4. 「C语言」C输出hello world!系统发生了什么?

    本篇文章全部摘抄自学长博客供以后学习: http://efraim.me/2015/12/05/tech-linux-2015-12-05/ 排版因与博客园编辑器不同而稍作修改. 输出hello wo ...

  5. java微信开发(wechat4j)——access_token中控服务器实现

    access_token是与微信服务器交互过程中的一个凭证,每次客户服务器主动与微信服务器通信都需要带上access_token以确认自己的身份.wechat4j内部封装了对access_token的 ...

  6. WP修改ProgressBar的前景色

    重载默认主题中的值,修改ProgressBar的前景色 做一个小项目时,用到 ProgressBar添加一个加载效果,但是背景不是白色的,调试时发现自己选的主题色与背景色相近,特别不清晰,加载效果几乎 ...

  7. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  8. iOS 学习 - 6.Objective-C中的各种遍历(迭代)方式

    说明:转自文顶顶 一.使用 for 循环 要遍历字典.数组或者是集合,for 循环是最简单也用的比较多的方法 -(void)iteratorWithFor { //////////处理数组////// ...

  9. MJExtension简介

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)

    首先JDBC的前期数据库数据准备: 1,打开链接好MySQL的Workbench软件,新建一个数据库: 2.然后打开数据库对应的代码编辑窗口,建立表和插入数据记录: 3.然后是打开关于javaWeb编 ...