Storm 基础知识
分布式的实时计算框架,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 基础知识的更多相关文章
- Storm基础知识
上一篇文章我们介绍一个简单的Storm起源,今天我去学习Storm一些主要的知识,他的基本使用基本的了解.幸运的是,,不是太困难,假设我们理解Hadoop的MapReduce模型的话.看这个也是很类似 ...
- Storm基础知识学习
概述 Storm是一个免费开源的分布式实时计算系统.Storm能轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理 编程模型 spout:数据读取数据.接收数据.将数据写出到blot bol ...
- 大数据基础知识问答----spark篇,大数据生态圈
Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- 最全的spark基础知识解答
原文:http://www.36dsj.com/archives/61155 一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduc ...
- ZooKeeper_基础知识学习
ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
随机推荐
- html5人物图片360度立体旋转
体验效果:http://hovertree.com/texiao/html5/10.htm 下载:http://hovertree.com/hvtart/bjae/t16oddyt.htm 代码如下: ...
- Python基础:函数式编程
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
- 根据数据库输出XML菜单
USE [test_YTHH] GO /****** Object: StoredProcedure [dbo].[usp_Print_SCC_Menu] Script Date: 04/08 ...
- linux下mysql忘记root密码解决方法
如果使用 MySQL 数据库忘记了root账号密码,可以通过调节配置文件,跳过密码的方式登数据库, 在数据库里面修改账号密码,一般默认的账号是 root 1.编辑 MySQL 配置文件 my.cnf ...
- [翻译]:SQL死锁-锁与事务级别
其实这一篇呢与解决我项目中遇到的问题也是必不可少的.上一篇讲到了各种锁之间的兼容性,里面有一项就是共享锁会引起死锁,如何避免呢,将我们的查询都设置中read uncommitted是否可行呢?其结果显 ...
- 「C语言」文件的概念与简单数据流的读写函数
写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...
- [vim] vim入门
1. 概述 工欲善其事 必先利其器.vim是非常好用的文本编辑器,可以将它看作是vi的进阶.绝大多数Unix系统都会内置vi编辑器,vi是文本编辑器,vim是程序编辑器.相比vi,它可以根据文件的类型 ...
- Android从零开始——Android开发环境的安装
Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...
- Smtp邮件发送系统公用代码整理—总结
1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...
- Javascript对象赋值操作
首先,我们还是举个例子来说明对象赋值操作的问题吧: ps: 本文默认约定log = console.log function A(){} A.prototype.x = 10; var a1 = ne ...