Storm简介——初始Storm
一、什么是Storm
Strom是由Twitter开源的类似于Hadoop的实时数据处理框架。Strom是分布式流式数据处理系统,强大的分布式集群管理、便捷的针对流式数据的编程模型、高容错保障这些都是其成为流式实时数据处理的首选。
二、Storm特点与优势
1)易用:为复杂的流计算模型提供了丰富的服务和编程接口,开发迅速、容易上手学习使用。(开发迅速,容易上手)
2)容错:具有适应性的容错能力。当工作进程(worker)失败时,Storm可以自动重启这些进程;当一个节点宕机时,上面的所有工作进程都会在其他的节点重新被启动;对于Storm的守护进程,nimbus和supervisor被设计为无状态或快速恢复。(守护进程无状态,worker故障切换)
3)扩展性:storm作业本质具有并行性,可以跨机器或集群来执行。Topology中各个不同的组件(Spout和Bolt)可以配置为不同的并行度。当集群性能不足时,可以随时增加物理机对并行任务做balance。(线性扩展)
4)完整性:对数据提供完整性操作:至少处理一次、至多处理一次、处理且仅处理一次。用户可根据自己的需求进行选择。(数据不丢失,准确性)
三、Storm的应用场景
目前Storm的使用非常广泛了,在Twitter、Yahoo、腾讯、阿里、新浪等著名公司。
新浪的实时分析平台
腾讯的实时计算平台
奇虎360的实时平台
百度的实时系统
阿里的Jstorm
......
四、Storm的系统构架

1、主节点(Nimbus):运行Nimbus的节点是系统的Master节点,即主节点;Nimbus进程是Storm系统的中心,负责接收用户提交的作业(Storm中即为以jar包形式保存的topology代码),向工作节点分配任务(进程级和线程级)和传输作业副本;并依赖协调节点的服务监控集群的运行状态,提供状态获取端口。Nimbus目前是单独部署的。
2、从节点(Supervisor):运行supervisor的节点是从节点,即工作节点;supervisor监听所在节点,根据nimbus的委派,启动、停止、撤销或关闭任务的工作进程。工作节点是实时数据处理作业运行的节点。其中、计算在节点上的物理单元是worker,即工作进程;计算的逻辑单元是executor,即计算线程。计算的作业逻辑单元是topology,即拓扑;计算的任务逻辑单元是task,即任务。每个worker执行特定的topology的executor子集,每个executor执行一个或多个task。一个topology主要有两种组件:spout和bolt,分别是流式数据在topology中的起始单元和处理单元。组件可以并行配置,并行的每一份就是一个task,在一个executor中运行。
3、Web节点(Storm UI): 运行Storm UI后台服务的节点;Storm UI在指定端口提供网页服务。用户可以根据浏览器访问web页面,通过web页面提交、暂停和撤销作业,也可以以只读的方式获取系统配置、作业以及各个组件的运行状态。web节点在逻辑 上是独立的,可以被安装在系统的任意节点实现监控;但是如果需要实现作业的管理,Storm UI必须和Storm nimbus部署在一台机器上,这是因为Storm UI进程会检查本机是否存在nimbus的连接,是否存在可导致UI部分功能无法正常工作。
4、协调节点(Zookeeper):运行Zookeeper进程的节点;Zookeeper并不是Storm专用的,可以作为一类通用的分布式状态协调服务。nimbus和supervisor之间的所有协调,包括分布式状态维护和分布式配置管理都是通过协调节点实现的。为了实现服务的高可用性,Zookeeper往往是以集群形式提供服务的,即在Storm系统中可以存在多个协调节点。
五、Storm的工作流

1、Topology:storm中运行的一个实时应用程序,因为每个组件间的消息流动形成逻辑上的一个拓扑结构。
2、Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转化为topology内部的源数据。Spout是一个主动的角色,其接口中有一个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
3、Bolt:是在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等操作。Bolt是一个被动的角色,其接口中有execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
4、Tuple:一次消息传递的基本单元。本应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list。
5、Stream:源源不断传递的tuple就组成了stream。
六、Storm的并发机制

1、服务器(Nodes):Strom集群可以包含多台服务器,即可以扩展多个Nodes.
2、JVM虚拟机(worker):每台Storm服务器可以起多个JVM虚拟机,即可以扩展为多个worker。
3、线程(executor):每个worker可以运行一个或多个executor。每个executor可以运行同一个component(spout/bolt)的一个或多个task。

4、Spout/Bolt实例(task):task就是一个spout/bolt实例,是真正执行数据处理的地方。

一个正在运行的拓扑由很多worker进程组成,这些worker进程在storm集群的多台机器上运行。一个worker进程属于一个特定的拓扑并且执行这个拓扑的一个或多个component(spout/bolt)的一个或多个executor。一个worker进程就是一个java虚拟机(JVM),它执行一个拓扑的一个子集。
一个executor是由一个worker进程产生的一个线程,它运行在worker的java虚拟机里。一个executor为同一component
(spout/bolt)运行一个或多个任务。一个executor总会有一个线程来运行executor所有的task,这说明task在executor内部是串行执行的。
真正的数据处理是在task里面执行的,在父executor线程执行过程中会运用task。在代码中实现每个spout或bolt是在全集群中以很多task的形式运行的。一个component的task数量在这拓扑的生命周期是固定不变的,但是一个component的executor(线程)数量是随着时间推移发生变化的。说明:threads数量<=task数量。默认情况下task数量被设置成跟executor的数量是一样的,即Storm会在每个线程上执行一个任务。
注意:executor线程的数量在拓扑已经启动后可以发生变化,但是拓扑的task数量是固定不变的了。
七、Storm的数据流
Storm的核心概念是“流”(stream),一个stream相当于一个无限的元组(tuple)序列。Storm提供基用来做流转换的基件是spout和bolt。spout和bolt提供了接口,可以实现这些接口来处理应用程序相关的逻辑。
spout是流的来源。例如:spout可以从一个Kestrel队列来读tuple并且发射(emit)他们从而形成一个流,或者spout可以连接到twitter api来发射一个推文的流。
一个bolt消费任意数量的流,做一些处理,然后可能会发射出新的流。对于复杂的流转换,例如:从一个推文的流计算出一个热门话题的流需要多个步骤、多个bolt。bolt可以通过运行函数来做任何事,如、过滤元组、做流聚合、做流连接、和数据库之间交互等。
storm使用tuple做数据模型。一个tuple是一个被命名过的值列表,一个tuple中的字段可以是任何类型的对象。是开箱即使用的,storm支持所有的简单数据类型,如字符串、字节数组作为tuple的字段值。如果使用另外一种类型的对象,只需要为这个类型实现一个serializer。topology中的每一个节点都应该为它要发射的元组输出字段。
为拓扑中的每一个bolt确定输入数据流定义一个拓扑的重要环节。数据流分组定义了在bolt的不同任务(tasks)中划分数据流的方式。在storm中有八种内置的数据流分组方式,而且可以通过customstreamgrouping接口实现自定义的数据流分组模型。
八组数据流分方式
1、随机分组(shuffle grouping):这种方式下元组会被尽可能的随机地分配到bolt的不同任务(tasks)中,使得每个任务所处理的元组数量能够保持基本一致,以确保集群的负载均衡。
2、域分组(fields grouping):数据流根据定义的“域”来分组。如:若某个数据流是基于一个名为“user-id”的域进行划分的,那么所有包含相同“user-id”的元组都会被分配到同一个任务中,这样来确保消息的一致性。
3、部分关键字分组(partial key grouping):这种方式与域分组类似,根据定义的域来对数据流进行分组,不同的是,这种分组方式会考虑下游bolt数据处理的均衡性问题,再输入数据源关键字不平衡时会有更好的性能。
4、完全分组(all grouping):这种方式会将数据流同时发送到bolt的所有任务中(即同一个元组会被复制多份然后发送到所有的任务处理)。使用这种方式要格外谨慎。
5、全局分组(global grouping):这种方式下所有的数据流都被发送到bolt的同一个任务中,也就是id最小的那个任务。
6、非分组(none grouping):不关心数据流如何分组,目前这种方式的结果和随机分组完全等效,不过在未来storm社区可能考虑通过非分组方式来让bolt和它所订阅的spout或bolt在同一个线程中执行。
7、直接分组(direct grouping):是一种特殊的分组方式,这种方式使得元组的发送者可以指定下游的哪个任务可以接收这个元组
。只有在数据流被声明为直接数据流时才能使用直接分组。
8、本地或随机分组(local or shuffle grouping):如果在源组件的worker进程里目标有一个或更多的任务线程,元组会被随机分配到那些同进程的任务中。
七、Storm的数据流
1、更能性保障:多粒度的并行化
2、非功能性保障:多级别的可靠性
Storm简介——初始Storm的更多相关文章
- Storm简介
Storm特性 1. 低延迟和高性能 在一个小集群中,每个节点每秒可以处理数以百万计的消息. 2. 可扩展 在Storm集群中主要有三个实体:工作进程.线程和任务.Storm集群中每台机器上都可以运行 ...
- 分布式流式处理框架:storm简介 + Storm术语解释
简介: Storm是一个免费开源.分布式.高容错的实时计算系统.它与其他大数据解决方案的不同之处在于它的处理方式.Hadoop 在本质上是一个批处理系统,数据被引入 Hadoop 文件系统 (HDFS ...
- Apache Storm简介
Apache Storm简介 Storm是一个分布式的,可靠的,容错的数据流处理系统.Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到 ...
- 流式大数据计算实践(6)----Storm简介&使用&安装
一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...
- 53.storm简介
一.简介 1.storm是twitter开源的一个分布式的实时计算系统,用于数据实时分析,持续计算,分布式RPC等等. 官网地址:http://storm-project.net 源码地址:https ...
- Storm概念学习系列之storm简介
不多说,直接上干货! storm简介 Storm 是 Twitter 开源的.分布式的.容错的实时计算系统,遵循 Eclipse Public License1.0. Storm 通过简单的 API ...
- 流式计算之Storm简介
Storm是一个分布式的.容错的实时计算系统,遵循Eclipse Public License 1.0,Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比H ...
- Storm简介及使用
一.Storm概述 网址:http://storm.apache.org/ Apache Storm是一个免费的开源分布式实时计算系统.Storm可以轻松可靠地处理无限数据流,实现Hadoop对批处理 ...
- 实时数据处理环境搭建flume+kafka+storm:4.storm安装配置
1.解压 apache-storm-0.9.3.tar.gz 2.修改配置文件 conf/storm.yaml --zk地址 storm.zookeeper.servers: - " ...
随机推荐
- 如何解决DEDE织梦友情链接字数限制与链接个数限制的问题?
如何解决DEDE织梦友情链接字数限制与链接个数限制的问题!织梦网站非常适合网站搭建以及网站优化,而友情链接是做优化必不可少的模块,我们经常搭建织梦网站发现织梦系统的友情链接模板有时候会限制字数不显示以 ...
- 一篇面试的考题----jQuery
一.jQuery测试题 下面哪种不是jquery的选择器?(单选)A.基本选择器 B.后代选择器 C.类选择器 D.进一步选择器考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面 ...
- FMDB源码解析(上)-FMDB基本使用
目录 一: 初识FMDB 二: 基本使用 三: 基本操作 结束 最后更新:2017-02-22 2017, 说到做到 一: 初识FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的 ...
- HDU 5172 GTY's gay friends (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...
- win7x64 串口程序无法运行,提示:component 'MSCOMM32.OCX' or one of its dependencies not correctlu registered。。。
VB写的串口工具在win7 x64机器运行时遇到的问题, component 'MSCOMM32.OCX' or one of its dependencies not correctlu regis ...
- leetcode-mid-array-5. Longest Palindromic Substring
mycode 12.51% class Solution(object): def longestPalindrome(self, s): """ :type s: ...
- python-笔记(一)python简介和入门
一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学.在1989诞生,Guido(龟叔)开发.这里的python并不是蟒蛇的意思,而是龟叔非常喜 ...
- 使用@Value注解对bean进行属性注入
使用@Value注解,可以有三种属性注入的方式: 1. 使用字面量注入 2. 使用EL表达式注入 3. 使用占位符注入 import org.springframework.beans.factory ...
- iptables中文帮助
Iptables(8) ...
- 多线程threading初识,线程等待
1.线程是程序里面最小的执行单元. 2.进程是资源的集合. 线程是包含在进程里面的,一个进程可以有多个线程,但只要要有一个线程. 一.多线程,就是N个线程一起干活: 1.传统方式,串行,循环5次需要1 ...