Trident 教程

什么是Trident?

1、基于Storm用于实时计算的高级抽象源语;

有何优势?

1、支持高吞吐(每秒百万级别),有状态的流处理;

2、提供低延时的分布式查询功能;

3、Trident具有连接、聚合、分组、自定义行为和过滤的功能;

4、基于内存或数据库做有状态的增量式的计算;

5、能够保证每个Tuple严格只被执行一次

6、构建Topology简单;

例子:统计各个单词出现的次数

Spout

 

用于接收外部数据,转化为Tuple;

package trident.test.demo2;

import backtype.storm.Config;
import backtype.storm.task.TopologyContext;
import backtype.storm.tuple.Fields;

import backtype.storm.tuple.Values;
import storm.trident.operation.TridentCollector;
import storm.trident.spout.IBatchSpout;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * User: jianwl
 * Date: 2016/2/24
 * Time: 16:12
 */
public class TridentSpoutDemo implements IBatchSpout{
    private static final List<String> sentences = Arrays.asList(
            "the cow jumped over the moon",
            "the man went to the store and bought some candy",
            "four score and seven years ago");

    private boolean complete =  false;

    @Override
    public void open(Map map, TopologyContext topologyContext) {
        // nothing do
    }

    @Override
    public void emitBatch(long l, TridentCollector tridentCollector) {
        if(complete){
            return;
        }
        for(int i=0; i< sentences.size() ; i++){
            tridentCollector.emit(new Values(sentences.get(i)));
        }
        complete = true;
    }

    @Override
    public void ack(long l) {
        // nothing do
    }

    @Override
    public void close() {
        // nothing do
    }

    @Override
    public Map getComponentConfiguration() {
        return new Config();
    }

    @Override
    public Fields getOutputFields() {
        return new Fields("sentence");
    }
}

创建Topology

public class TridentTopo {
    public static void main(String[] args) {
        TridentTopology topology = new TridentTopology();
        topology.newStream("spout", new TridentSpoutDemo())
                .each(new Fields("sentence"), new Split(), new Fields("word"))
                .each(new Fields("word"), new PrintFunction(),new Fields("field","count"));

        Config config = new Config();
        LocalCluster localCluster = new LocalCluster();
        localCluster.submitTopology("trident-demo2", config, topology.build());
    }
}
public class Split extends BaseFunction {    public Split() {    }

    public void execute(TridentTuple tuple, TridentCollector collector) {        String[] arr$ = tuple.getString(0).split(" ");        int len$ = arr$.length;

        for(int i$ = 0; i$ < len$; ++i$) {            String word = arr$[i$];            if(word.length() > 0) {                collector.emit(new Values(new Object[]{word}));            }        }    }}
public class PrintFunction extends BaseFunction {    private final static Map<String,Integer> map = new HashMap<>();    @Override    public void execute(TridentTuple tridentTuple, TridentCollector tridentCollector) {        String input = tridentTuple.getString(0);        if(!map.containsKey(input)){            map.put(input,1);        }else{            int count = map.get(input) + 1;            map.put(input,count);        }        System.out.println("result ==> "+map);    }}
时间: 2024-10-21 10:26:49

Trident 教程的相关文章

trident教程

(一)理论基础更多理论以后再补充,或者参考书籍1.trident是什么?Trident is a high-level abstraction for doing realtime computing on top of Storm. It allows you to seamlessly intermix high throughput (millions of messages per second), stateful stream processing with low latency

[翻译][Trident] Storm Trident 教程

英文原址:https://github.com/nathanmarz/storm/wiki/Trident-tutorial ---------------- Trident是在storm基础上,一个以realtime 计算为目标的高度抽象. 它在提供处理大吞吐量数据能力的同时,也提供了低延时分布式查询和有状态流式处理的能力. 如果你对Pig和Cascading这种高级批量处理工具很了解的话,那么应该毕竟容易理解Trident,因为他们之间很多的概念和思想都是类似的.Tident提供了 join

Apache Storm 官方文档 —— Trident State

转载自并发编程网 – ifeve.com本文链接地址: Apache Storm 官方文档 -- Trident State Trident 中含有对状态化(stateful)的数据源进行读取和写入操作的一级抽象封装工具.这个所谓的状态(state)既可以保存在拓扑内部(保存在内存中并通过 HDFS 来实现备份),也可以存入像 Memcached 或者 Cassandra 这样的外部数据库中.而对于 Trident API 而言,这两种机制并没有任何区别. Trident 使用一种容错性的方式实

Apache Storm 1.1.0 中文文档 | ApacheCN

前言  Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ApacheCN 最近组织了翻译 Storm 1.1.0 中文文档 的活动,整体 翻译进度 为 96%. 感谢大家参与到该活动中来 感谢无私奉献的 贡献者,才有了这份 Storm 1.1.0 中文文档 感谢一路有你的陪伴,我们才可以做的更好,走的更快,走的更远,我们一直在努力 ... 网页地址:

【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据

注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. 5.2 Sending HTML Form Data 5.2 发送HTML表单数据 本文引自:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1 By Mike Wasson|June 15, 2012 作者:Mike Wasson | 日期:2012-6-15 Part

Apache Storm 官方文档 —— Trident Spouts

转载自并发编程网 – ifeve.com本文链接地址: Apache Storm 官方文档 -- Trident Spouts 与一般的 Storm API 一样,spout 也是 Trident 拓扑的数据来源.不过,为了实现更复杂的功能服务,Trident Spout 在普通的 Storm Spout 之上另外提供了一些 API 接口. 数据源.数据流以及基于数据流更新 state(比如数据库)的操作,他们之间的耦合关系是不可避免的.Trident State 一文中有这方面的详细解释,理解

CSS3 经典教程系列:CSS3 圆角(border-radius)详解

<CSS3 入门教程系列>前一篇文章详细介绍了 CSS3 RGBA 特性的用法,今天这篇文章我们在一起来看看 CSS3 中用于实现圆角效果的 border-radius 属性的具体用法. 以前制作圆角效果,我们都需要使用多张圆角图片做为背景分别应用到每个角上,我应用最多的就是在需要圆角的元素标签中加四个空标签,然后在每个空标签中应用一个圆角的背景位置,然后在对这几个应用了圆角的标签进行定位到相应的位置,非常繁琐. 您可能感兴趣的相关文章 Web 开发人员和设计师必读文章推荐 20个非常绚丽的

Python3.x爬虫教程:爬网页、爬图片、自动登录

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自动登录.并对HTTP协议做了一个简单的介绍.在进行爬虫之前,先简单来进行一个HTTP协议的讲解,这样下面再来进行爬虫就是理解更加清楚. 一.HTTP协议 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作

【教程】模拟登陆百度之Java代码版

[背景] 之前已经写了教程,分析模拟登陆百度的逻辑: [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 然后又去用不同的语言: Python的: [教程]模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码) C#的: [教程]模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码) 去实现对应逻辑. 此处,继续尝试,用Java代码,实现这套,模拟登陆百度,的逻辑. [折腾过程] 1.之前已经整理了一些Java代码: http://c