转自:http://blog.csdn.net/androidlushangderen/article/details/45955833

storm学习系列:http://blog.csdn.net/Androidlushangderen/article/category/2647213

前言

什么是storm,storm是做什么的,一个简单的描述,你可以理解为是一个“准实时”的Hadoop,Hadoop是专门做的是离线数据处理,而storm则弥补了Hadoop在这方面的不足,他是一个实时数据处理的平台。至于Storm的各种由来,就不一一在这里废话了,之前我写的某篇文章讲述了部分的Storm的代码结构,详情点击这里

Storm的总体架构

先来了解一下Storm的整体结构,Storm中的几个关键词Topology,Spout,Bolt,Worker,Executor,Task,暂且就这些吧。这些关键词所代表的对象是在2种节点中运行的,一个叫Nimbus节点,还有一个叫Supervisor节点,Storm采用的也是master/slave的架构,所以也会存在单点的问题。Nimbus节点和Supervisor都能快速失败并恢复,而且他们是无状态的,在其间会利用存储在Zookeeper中的元数据。在每个Supervisor节点中,可以启很多的Worker,再在每个Worker中,可以启很多的Executor执行器,每个执行器内部又会划分出许多的Task,Task是系统允许的最小单位。下面是其中的一张截图。

Storm的整体结构运行图如下,Spout是数据源,像水龙头一般不断的产生数据,发送到Bolt节点中执行。

Storm的元数据存储

Storm采用Zookeeper来存储Nimbus,Supervisor以及内部的各个Worker之间的元数据,所以可以进行异常恢复。在Zookeeper中是如何存储的呢,答案是存在ZNode中,ZNode是一种树型结构,他有根节点,叶子节点等等,而Storm的这些数据是存在于其中的叶子节点中,最后是根据路径做区分和数据读取的。相当于是从根路径开始往下寻找,类似于Trie树的构造。下面是一张简图。

Storm的代码结构

Storm的源代码组成主要由Clojure和java2种语言来完成。Clojure在百度百科上的介绍是他是一种运行在java平台上的一种方言,而且这门语言的语法规则非常的简单,看过了Storm源码中的Clojure部分代码之后,你应该会看到许多函数式编程的痕迹。Clojure代码实现的主要功能包括Nimbus,Supervisor,worker等作业执行相关的操作,当然还有涉及到Zookeeper相关的数据交换操作等。而java部分的代码则是实现了许多的Storm的高级属性,比如Trident部分的代码,Trident是Storm对实时消息处理的更高层的抽象,我至今也还没有用过。如果是一般的作业执行,用到的核心代码其实还是用Clojure写的。

Storm系统架构以及代码结构学习的更多相关文章

  1. (1)-Android学习笔记之:初识Android系统架构和项目结构

    Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是And ...

  2. storm系统架构学习

    Storm架构如下图所示: 1.主控节点(Master Node) 运行Storm nimbus后台服务的节点(Nimbus),它是storm系统的中心,负责接收用户提交的作业(如同spark sub ...

  3. stm32.cube(一)——系统架构及目录结构

    一.前言 Arm的应用场景往往比51单片机复杂得多,如果一个高级应用的开发需要连底层的结构性代码都要重构,那么在成本和研发周期上就会面临巨大的风险.为了简化编码过程,芯片厂商经常会提供一些板卡级支持的 ...

  4. 系统架构--分布式计算系统spark学习(三)

    通过搭建和运行example,我们初步认识了spark. 大概是这么一个流程 ------------------------------                 -------------- ...

  5. 浅谈大型web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...

  6. PetShop的系统架构设计

    <解剖PetShop>系列 一.PetShop的系统架构设计 http://www.cnblogs.com/wayfarer/archive/2007/03/23/375382.html ...

  7. petshop4.0 具体解释之中的一个(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...

  8. Android的系统架构

    转自Android的系统架构 从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下:     1)应用程序层 ...

  9. Android进阶(十一)Android系统架构讲解

    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...

随机推荐

  1. Android SDK Manager 更新

    Android SDK Manager 更新 解决国内访问Google服务器的困难: 1.启动 Android SDK Manager : 2.打开主界面,依次选择「Tools」.「Options…」 ...

  2. [Angular] Extract Implementation Details of ngrx from an Angular Application with the Facade Pattern

    Extracting away the implementation details of ngrx from your components using the facade pattern cre ...

  3. eclipse缺省的Server没有weblogic

    转自:http://www.javakfz.com/index.php/08/06/471.html eclipse缺省的Server没有weblogic,因此要下载个weblogic的插件.这个过程 ...

  4. vue - .babelrc

    描述:bable-es2015以及babel本身组件在新版本要求的外部配置文件. { "presets": [ ["env", { "modules& ...

  5. springmvc使用实体參数和ServletAPI

    一. 实体參数 前面我们知道使用注解@RequestParam能够获得參数的值,那么如今提交一个表单怎么获得当中的值了.你能够说能够使用request.getParameter("" ...

  6. hibernate 启动和辅助类实现资源的重复使用

    来自API: 1.2.5.  启动和辅助类 是时候来加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置.我们必须启动Hibernate,此过程包括创建一个全局的SessoinFa ...

  7. 中国版Azure支持那些版本号Linux

    不在下述列表中的Linux表示尚未经过正式验证,并不意味着不能使用,客户能够通过自行上传镜像文件的方式使用其它Linux版本号,可是不保证是否遇到一些驱动或者兼容问题. 分发 版本号 上次验证时间 驱 ...

  8. C语言-二进制技巧

    打开位: flags = flags | MASK 要打开的位为 1 关闭位: flags = flags & ~MASK 要关闭的位为 1 转置位: flags = flags ^ MASK ...

  9. Mac系统使用命令行快捷打开Sublime

    本篇文章由:http://xinpure.com/use-command-line-shortcuts-to-open-the-mac-system-sublime/ 方法一 使用软链接 ln -s ...

  10. 【转帖】Servlet 3.0 新特性详解

    http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...