Trident中 FixedBatchSpout分析
FixedBatchSpout 继承自 IBatchSpout
IBatchSpout 方法
public interface IBatchSpout extends Serializable {
void open(Map conf, TopologyContext context);
void emitBatch(long batchId, TridentCollector collector);
void ack(long batchId);
void close();
Map getComponentConfiguration();
Fields getOutputFields();
}
FixedBatchSpout代码 package storm.trident.testing; import backtype.storm.Config;
import backtype.storm.task.TopologyContext;
import backtype.storm.tuple.Fields;
import java.util.List;
import java.util.Map;
import storm.trident.operation.TridentCollector;
import storm.trident.spout.IBatchSpout; public class FixedBatchSpout implements IBatchSpout { Fields fields;
List<Object>[] outputs;
int maxBatchSize; public FixedBatchSpout(Fields fields, int maxBatchSize, List<Object>... outputs) {
this.fields = fields; // 输出字段
this.outputs = outputs; // 保存至本地, 每个对象都是一个List<Object>
this.maxBatchSize = maxBatchSize; // 该批次最大发射次数,但是不是唯一决定元素
} int index = 0;
boolean cycle = false; public void setCycle(boolean cycle) {
this.cycle = cycle;
} @Override
public void open(Map conf, TopologyContext context) {
index = 0;
}
// trident调用
@Override
public void emitBatch(long batchId, TridentCollector collector) {
//Utils.sleep(2000);
if(index>=outputs.length && cycle) {
index = 0; // 超过下标后,让index归零, 继续循环发送
} // 在不超过outputs大小的情况下,每次发射一个List<Object>
for(int i=0; index < outputs.length && i < maxBatchSize; index++, i++) {
collector.emit(outputs[index]);
}
} @Override
public void ack(long batchId) { } @Override
public void close() {
} @Override
public Map getComponentConfiguration() {
Config conf = new Config();
conf.setMaxTaskParallelism(1); // 最大并行度,默认是1. 好像没提供接口来修改, 很奇怪。
return conf;
} @Override
public Fields getOutputFields() {
return fields ; // 输出字段
}
}
外部使用
FixedBatchSpout spout = new FixedBatchSpout(new Fields("sentence"), 1,
new Values("ab ab ab ab ab ab ab ab ab ab")); // 这里设置为1,表示每批只发送一个List<Value>,但是设置更大,也不会出错,参见上面的代码注释,它要同时满足不超过数组大小,所以不会越界。
spout.setCycle(true); // 设置则表示会一直发送,如果不用它一直发射, 可以注释掉。
其他就是trident内部调用。
如分析有误,请指出,谢谢。。
Trident中 FixedBatchSpout分析的更多相关文章
- Trident中使用HBase进行状态管理
1.使用的类 2.使用HBaseMapState 3.使用状态管理 使用的状态管理还要看Spout StateFactory factory1 = HBaseMapState.opaque(opts1 ...
- Trident中的解析包含的函数操作与投影操作
一:函数操作 1.介绍 Tuple本身是不可变的 Function只是在原有的基础上追加新的tuple 2.说明 如果原来的字段是log,flag 新增之后的tuple可以访问这些字段,log,fla ...
- Trident中的DRPC实现
一:介绍 1.说明 Storm里面引入DRPC主要是利用storm的实时计算能力来并行化CPU intensive的计算.DRPC的storm topology以函数的参数流作为输入,而把这些函数调用 ...
- (转)ffmpeg 中 av_read_frame_internal分析
作者: chenwei1983 时间: 2012-3-5 04:21 PM标题: ffmpeg 中 av_read_frame_internal分析 ...
- 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析
通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...
- Vue中computed分析
Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...
- 谷歌chrome浏览器network中Stalled分析和优化
谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...
- Java练习小题_求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
要求说明: 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出. 实现思路: [二维数组]相关知识 ...
- 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析)
电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 目录 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 写在前面 正文 电机噪声 谐波的产生 什么 ...
随机推荐
- Tor网络介绍
Tor网络介绍 1.Tor的全称是“The Onion Router”,“An anonymous Internet communicaton system:通过Tor访问一个地址时,所经过的节点在T ...
- Maven工程红色感叹号,且工程无红叉错误
很可能是jar包不对,可以将maven库里的jar包删除,从 http://mvnrepository.com/ 根据jar包版本号下载到本地maven库,并在pom.xml里引入jar依赖 这次ja ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...
- 【Elasticsearch】深入Elasticsearch集群
7.1 节点发现启动Elasticsearch的时候,该节点会寻找有相同集群名字且课件的主节点,如果有加入,没有自己成为主节点,负责发现的模块两个目的 选出主节点以及发现集群的新节点7.1.1发现的类 ...
- js面向对象2
1.发展史 面向机器 面向过程:将程序的执行分解成若干个步骤 面向对象:将程序的执行分解成若干个事物 2.面向对象两个基本概念 类:代表某类事物,是抽象的 对象:代表某个事物,是具体的 3.快速入门 ...
- 7、侧边栏:Menu
1.单个侧边栏 导航的代码在分析源码的时候已经分析过了,下面只看他的一些应用与方法. /* ---示例代码----*/ <ion-menu [content]="mycontent&q ...
- 01.里氏准换与using关键字
using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后 ...
- pod install 出错
今天使用cocoapods的时候在执行pod install出错,如下: 使用很多方法都不行,但是问题感觉应该是需要升级,所有就找到升级cocoapods:sudo gem install -n /u ...
- PLC-Heart
- php *-devel
源码编译安装个php,缺少好多-devel的库. why devel? devel包至少包括头文件和链接库.如果你的要安装的源码依赖某个库,那肯定需要这两样东西. 让apache支持php 在编译ph ...