storm0.9.3基本概念介绍

欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量。



简介:

Storm是由BackType开发的实时处理系统,底层采用Clojure实现的,BackType现在已在Twitter麾下。Twitter将Storm贡献给了开源社区,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。

基本概念:

在storm中有一些核心基本概念,包括Topology、Nimbus、Supervisor、Worker、Executor、Task、Spout、Bolt、Tuple、Stream、Stream分组(grouping)等。

入门示例:

package storm;

import java.util.Map;

import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.topology.base.BaseRichSpout;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;

/**
 * 
 * @author lucl
 * 
 *
 */
public class LocalStormTopology {
	/**
	 * 发射数据
	 * @author lucl
	 *
	 */
	public static class DatasourceSpout extends BaseRichSpout {
		private Map conf = null;
		private TopologyContext context = null;
		private SpoutOutputCollector collector = null;

		int num = 0;
		/**
		 * 死循环,一直调用
		 */
		@Override
		public void nextTuple() {
			try {
				Thread.sleep(1 * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (num % 2 == 0) {
				System.out.println("spout发射数据(even): " + num);
				this.collector.emit(new Values("even", num));	// Values支持动态参数
			} else {
				System.out.println("spout发射数据(odd): " + num);
				this.collector.emit(new Values("odd", num));	// Values支持动态参数
			}
			num += 1;

		}

		/**
		 * 初始化方法,在topology初始化时调用一次
		 */
		@Override
		public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
			this.conf = conf;
			this.context = context;
			this.collector = collector;
		}

		/**
		 * spout发射数据,bolt读取数据,但是bolt怎么知道如何解析发射出的数据,就需要提前声明
		 */
		@Override
		public void declareOutputFields(OutputFieldsDeclarer declarer) {
			declarer.declare(new Fields("type", "num")); // 与上面的data、num字段数目相对应

		}

	}

	/**
	 * 
	 * @author lucl
	 * 数据处理
	 */
	public static class DataSourceBolt extends BaseRichBolt {
		private Map conf = null;
		private TopologyContext context;
		private OutputCollector collector;

		/**
		 * 对于spout的数据进行处理
		 */
		int even = 0;
		int odd = 0;
		@Override
		public void execute(Tuple tuple) {
			String type = tuple.getStringByField("type");
			Integer value = tuple.getIntegerByField("num");

			if ("even".equals(type)) {
				even += value;
				System.out.println("bolt处理的偶数(even)累加结果:" + even);
			} else {
				odd += value;
				System.out.println("bolt处理的偶数(odd)累加结果:" + odd);
			}
		}

		@Override
		public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
			this.conf = conf;
			this.context = context;
			this.collector = collector;

		}

		@Override
		public void declareOutputFields(OutputFieldsDeclarer ceclarer) {
			System.out.println("method declareOutputFields of class Bolt!");

			// 如果这个bolt还需要把数据传递给下一个bolt进行处理,那么还需要声明其输出字段

		}

	}

	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// 在这个topology中,所有spout和bolt的id标识不可相同
		TopologyBuilder builder = new TopologyBuilder();
		builder.setSpout("spout", new DatasourceSpout());
		builder.setBolt("bolt", new DataSourceBolt()).shuffleGrouping("spout");
		// 采用本地模式来执行
		LocalCluster cluster = new LocalCluster();
		cluster.submitTopology("topology", new Config(), builder.createTopology());
	}
}

运行结果如下:

时间: 2024-10-16 23:28:42

storm0.9.3基本概念介绍的相关文章

输入子系统概念介绍

输入子系统在内核中的位置:/driver/input drivers/input/input.c: input_init ---> err = register_chrdev(INPUT_MAJOR, "input", &input_fops); static const struct file_operations input_fops = { .owner = THIS_MODULE, .open = input_open_file, }; 问:怎么读按键? inpu

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

DNS系列- 1.dns基本概念介绍

DNS系列- 1.dns基本概念介绍     目录         前言         一.概述             1.名词解释             2.DNS域名结构         二.DNS域名解析             1.查询类型             2.解析类型             3.DNS服务器的类型             4.区域传输             5.解析过程             6.解析答案         三.资源记录        

《统计自然语言处理》读书笔记 一.基础知识及概念介绍

最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一篇主要介绍的是NLP的基础知识和概念介绍,其实也是我关于NLP的读书笔记吧,希望对大家有所帮助. 一. 概念介绍 自然语言处理 自然语言处理(Natural Language Processing,简称NLP)技术的产生可追溯到20世纪50年代,它是一门集语言学.数学(代数.概率).计算机科学和认知科学等于一

MongooooooooooooooooooooDB入门二:基本概念介绍

前言 工欲善其事必先利其器.在学习MongoDB之前,需要对MongoDB的一些基本概念有系统的了解. 所以,本篇文章主要介绍MongoDB的一些基本概念,这些概念的定义均来自<MongoDB权威指南>,关于此书想要了解更多,请点击此处. 我尽量使用最简洁的语言来尽可能完整地描述这些基本概念,如有遗漏或不妥之处欢迎指正. 文档 文档是MongoDB的核心概念之一.多个键值对有序地放在一起便是文档.例如: {"name":"Jerry","sco

《AngularJS深度剖析与最佳实践》笔记: 第二章 概念介绍

第二章 概念介绍 2.1 什么是UI? 用户界面包括内容(静态信息+动态信息), 外观, 交互. 在前端技术栈中分别由HTML, CSS和JS负责. 进一步抽象, 分别对应于MVC三个主要部分: Model, View和Controller 对应到AngularJS中,  内容: 静态内容---模板 动态内容---scope 交互---Controller 外观 CSS----样式 filter----格式 2.2. 模块(module) 模块: 把相关的一组编程元素(如类, 函数, 变量等)组

概念介绍(机器学习)

似然函数:似然函数在形式上就概率密度函数.   似然函数用来估计某个参数. 最大似然函数:就是求似然函数的最大值.         最大似然函数用于估计最好的参数. 最小二乘法:它通过最小化误差的平方和寻找数据的最佳函数匹配.就是求 y=a1+a2x的系数.通过最小化误差的平方,然后求系数的偏导数,令导数为0,求解. 梯度下降法,基于这样的观察:如果实值函数  在点  处可微且有定义,那么函数 在  点沿着梯度相反的方向  下降最快.就是求最低点. 局部加权回归:它的中心思想是在对参数进行求解的