zoukankan      html  css  js  c++  java
  • Twitter 数据实时分析处理攻击 Storm

    1、简介

    Twitter Storm是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用Clojure写的。

    Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 

    Storm的主工程师Nathan Marz表示:

    Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比 Hadoop之于批处理Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。

    2、Storm主要特点

    1. 简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性
    2. 可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
    3. 容错性。Storm会管理工作进程和节点的故障。
    4. 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
    5. 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
    6. 快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。
    7. 本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
    8. Storm没有内建数据存储层,如果需要持久化,需要一个类似于Cassandra或Riak这样的外部数据库。

    3、Storm组成部分及常用术语

    可以拿Storm和Hadoop组成部分做一个类比:

    Storm集群类似于一个Hadoop集群。 只不过你在Hadoop上运行的是“MapReduce job”,而在storm上你运行的是 “topologies ”。 “job”和“topologies ”本身有很大的不同 - 一个关键的区别是,MapReduce的工作最终完成会终止,而topologies 处理消息永远保持(或直到你杀了它)

    Strom集群有主要有两类节点:主节点和工作节点。 主节点上运行的“Nimbus ”守护进程,类似Hadoop的“JobTracker”。 

    每个工作节点运行一个叫做”Supervisor”的守护进程 。 Supervisor监听分配给它的机器,根根据Nimbus 的委派在必要时 启动和关闭工作进程。

    Nimbus  和Supervisors  之间所有的协调工作是通过 一个Zookeeper 集群。 此外,Nimbus的守护进程和 Supervisors  守护进程是无法连接和无状态的;所有的状态维持在Zookeeper中 或保存在本地磁盘上。这意味着你可以 kill -9 Nimbus 或Supervisors 进程,所以他们不需要做备份。 这种设计导致storm集群具有令人难以置信的稳定性。

    概念说明:

    1. Nimbus:负责资源分配和任务调度。
    2. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
    3. Worker:运行具体处理组件逻辑的进程。
    4. Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。
    5. Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
    6. Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
    7. Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。
    8. Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.
    9. Stream:源源不断传递的tuple就组成了stream。
    10. stream grouping:即消息的partition方法。Storm中提供若干种实用的grouping方式,包括shuffle, fields hash, all, global, none, direct和localOrShuffle等

    4、Storm应用场景

    Twitter列举了Storm的三大类应用:

    1. 信息流处理{Stream processing}
    Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性。

    2. 连续计算{Continuous computation}
    Storm可进行连续查询并把结果即时反馈给客户端。比如把Twitter上的热门话题发送到浏览器中。

    3. 分布式远程程序调用{Distributed RPC}
    Storm可用来并行处理密集查询。Storm的拓扑结构是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查询进行计算,并返回查询结果。举个例子Distributed RPC可以做并行搜索或者处理大集合的数据。

     
     
    标签: Storm实时计算
  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2766551.html
Copyright © 2011-2022 走看看