Storm系统架构以及代码结构学习
转自: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)-Android学习笔记之:初识Android系统架构和项目结构
Android系统架构 Android程序结构 创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下 .gradle和.idea:这两个目录下放的都是And ...
- storm系统架构学习
Storm架构如下图所示: 1.主控节点(Master Node) 运行Storm nimbus后台服务的节点(Nimbus),它是storm系统的中心,负责接收用户提交的作业(如同spark sub ...
- stm32.cube(一)——系统架构及目录结构
一.前言 Arm的应用场景往往比51单片机复杂得多,如果一个高级应用的开发需要连底层的结构性代码都要重构,那么在成本和研发周期上就会面临巨大的风险.为了简化编码过程,芯片厂商经常会提供一些板卡级支持的 ...
- 系统架构--分布式计算系统spark学习(三)
通过搭建和运行example,我们初步认识了spark. 大概是这么一个流程 ------------------------------ -------------- ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- PetShop的系统架构设计
<解剖PetShop>系列 一.PetShop的系统架构设计 http://www.cnblogs.com/wayfarer/archive/2007/03/23/375382.html ...
- petshop4.0 具体解释之中的一个(系统架构设计)
前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...
- Android的系统架构
转自Android的系统架构 从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序层 ...
- Android进阶(十一)Android系统架构讲解
如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...
随机推荐
- C# this.Hide()
C# this.Hide() 第一次用的时候是在_Load函数里: BookSystem bs = new BookSystem(); bs.ShowDialog(); ...
- .css()与.addClass()设置样式的区别
对于样式的设置,addClass与css方法两者之间有什么区别? 可维护性: .addClass()的本质是通过定义个class类的样式规则,给元素添加一个或多个类.css方法是通过JavaScrip ...
- 如何使用angularjs实现文本框获取焦点
<!DOCTYPE html> <html ng-app="myApp"> <head> <title>angularjs-focu ...
- jquery操作select2控件
(一)select2常用的操作:添加.移除.获取选中的value()与text() (1)移除事件:$("#select_id").unbind("change" ...
- js中,“\”转义字符的使用
(1)针对双引号“”的使用: html= "<a href=\"javascript:void(0)\" onclick=\"getSubContent( ...
- 微信小程序navigateBack如何带参数
wx.navigateBack({//返回 delta:1 }) 方法如下: 一. var pages = getCurrentPages(); var prevPage = pages[page ...
- Openerp开发进销存系统总结
转自 :http://blog.sina.com.cn/s/blog_7cb52fa80101ngt8.html 差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发.细节总 ...
- JBOSS整套开发组件整合和配置方法
http://blog.csdn.net/laigood/article/details/5743712主要是集成jboss,jboss esb,jboss portal,jboss seam,jbo ...
- Hibernate关联关系(二) Cascade级联
1.cascade定义的是关系两端对象到对象的级联关系:而inverse定义的是关系和对象的级联关系. all : 所有情况下均进行关联操作. none:所有情况下均不进行关联操作.这是默认值. ...
- unity, iterate immediate children and iterate all children
遍历所有直接子节点(immediate children): foreach (Transform child in transform) { // do whatever you want with ...