转自: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. nginx安装说明

    下载地址:http://nginx.org/en/download.html 安装版本:1.10.0 安装配置如下: /etc/nginx 目录 /home/nginx目录 --prefix=/hom ...

  2. C#秘密武器之异步编程

    一.概述 1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序 ...

  3. 偶遇RecyclerView内部Bug

    写在前面           最近忙着赶项目进度,都不知道这次博客写点啥好了,前两天碰巧遇到一个奇怪的bug,项目中未发现与异常相关的类,于是去百度.谷歌搜索,发现这是一个早就可能被写烂吐槽的Recy ...

  4. python 字典的KeyError处理方法

    先看一段代码: user = dict(name="brainliao", age=32) print(user["sex"]) 运行结果如下: user这个字 ...

  5. 【Linux】监控系统的状态

    1.w命令 w命令是一个很强大的命令,该命令显示的信息比较丰富.以下是我的虚拟机w命令的一个展示 从上图我们可以看到: 第一行从左面开始显示的信息依次为:时间.系统运行时间.登陆用户数.平均负载 第二 ...

  6. 深入annotation

    目标: 掌握@Target注释 掌握@Document注释 掌握@inherited注释 之前定义的annotation,如果没有明确声明,可以在任何地方使用: package 类集; @MyDefa ...

  7. Docker exec与Docker attach

    转载博客地址:http://blog.csdn.net/halcyonbaby 新浪微博:@寻觅神迹 内容系本人学习.研究和总结,如有雷同,实属荣幸! ================== Docke ...

  8. Sphinx-PHP使用Sphinx搜索技术

    Sphinx继承到PHP程序中, 有两种方式: Sphinx PHP模块: 编译生成PHP扩展模块 Sphinx API类: 直接使用Sphinx提供的类即可 首先我们应该使用Sphinx做以下几件事 ...

  9. Google两步验证安装使用方法

    http://www.williamlong.info/archives/2754.html

  10. 【Linux设备驱动程序】Chapter 1 - 概述

    设备分类 字符设备.块设备.网络接口 字符设备 能够像字节流(类似文件)一样被访问的设备. 字符设备驱动程序通常至少要实现 open.close.read 和 write 系统调用. 举例:字符终端( ...