`

Trident API和概念

 
阅读更多
一、Trident API——Spout
    ITridentSpout:最通用的Spout,可以支持事务或者不透明事务语义。
    IBatchSpout: 一个非事务spout 。
    IPartitionedTridentSpout: 分区事务spout,从数据源(比如一个Kafka集群)读分区数据
    IOpaquePartitionedTridentSpout:不透明分区事务spout,从数据源读分区数据

接口变动
例如:









简单概括总体流程就是:
trident在执行时每批先调用 getPartitionsForBatch() 如果发现返回的Partitions对象和上一批的不相等,则会先后调用 getOrderedPartitions(Integer allPartitionInfo) 和 refreshPartitions(List partitionResponsibilities) 方法,否则不会调用这两个方法。

getOrderedPartitions根据getPartitionsForBatch返回的Partitions对象生成一个Partition列表,refreshPartitions根据getOrderedPartitions返回的Partition列表做一些类似于connections to brokers的操作。

然后再调用emitPartitionBatchNew或者emitPartitionBatch方法。其中emitPartitionBatchNew的partition参数在0.9.0之前是int类型的,现在改成Partition类型,就是getOrderedPartitions返回的List中的一个元素。
其他方法和之前版本都一致。


二、Trident Bolt
唯一显性Bolt接口:ITridentBatchBolt,但很少用。
Trident编程特点就是Stream。
Trident的topology会被编译成尽可能高效的Storm topology。只有在需要对数据进行repartition的时候(如groupby或者shuffle)才会把tuple通过network发送出去,

三、Trident 概念之Operation
在包storm.trident.operation 及子包下

Operation类相关概念有:
   · Function :如BaseFunction,类如TridentWordCount中用的Split、
                            如BaseQueryFunction, TridentWordCount中用的MapGet,从State中查询
            
   · Filter:如BaseFilter ,如TridentWordCount中的FilterNull

   · 聚合类:
    CombinerAggregator<T>
    Aggregator<T>
    ReducerAggregator<T>

Functions(函数)
public class MyFunction extends BaseFunction {
    public void execute(TridentTuple tuple, TridentCollector collector) {
        for(int i=0; i < tuple.getInteger(0); i++) {
            collector.emit(new Values(i));
        }
    }
}


假设有一个叫“mystream”输入流有[“a”,“b”,“c“]三个字段
[1, 2, 3]
[4, 1, 6]
[3, 0, 8]

运行:mystream.each(new Fields("b"), new MyFunction(), new Fields("d")))
运行的结果将会有4个字段[“a”,“b”,“c”,“d”],如下:
[1, 2, 3, 0]
[1, 2, 3, 1]
[4, 1, 6, 0]


Filters(过滤)

Filters接收一个元组(tuple),决定是否需要继续保留这个元组。比如:
public class MyFilter extends BaseFilter{
    public booleanisKeep(TridentTuple tuple) {
        return tuple.getInteger(0) == 1 && tuple.getInteger(1) == 2;
    }
}


假设有如下输入:
[1, 2, 3]
[2, 1, 1]
[2, 3, 4]
运行下面的代码:
mystream.each(new Fields("b","a"), new MyFilter())
结果将会如下:
[2, 1, 1]

聚合
聚合接口:
CombinerAggreator:在每个tuple上运行init,使用combine去联合结果 。如果批次没有数据,运行zero函数。
ReduceAggregator:在init()初始化的时候产生一个值,每个输入的元组在这个值的基础上进行迭代并输出一个单独的值。
Aggregate:功能最强大
1.      Init函数在执行批次操作之前被调用,并返回一个state对象,这个对象将会会传入到aggregate和complete函数中。
2.      Aggregate会对批次中每个tuple调用,这个方法可以跟新state也可以发射(emit)tuple。
3.      当这个批次分区的数据执行结束后调用complete函数。
aggregate和persistentAggregate函数对流做聚合。Aggregate在每个批次上独立运行,persistentAggregate聚合流的所有的批次并将结果存储下来。

  • 大小: 16.6 KB
  • 大小: 37 KB
  • 大小: 37.6 KB
分享到:
评论

相关推荐

    Storm Trident API 使用详解.docx

    一、Trident API 的核心概念 1. Stream:Stream 是 Trident 的基本数据结构,代表了一连串不断流入系统的事件。它们可以源自外部数据源,也可以由其他操作创建。每个 Stream 都由多个批次(Batch)组成,每个 Batch...

    基于Trident构建大规模实时流数据处理系统.pdf

    总结来说,Trident为大规模实时流数据处理提供了高效且可靠的解决方案,通过其高级的API和优化的处理模式,使得处理复杂的数据流变得更加简单,特别适合像雅虎这样需要实时分析用户行为的大公司。在大数据时代,...

    Trident:具有AI兼容性的Emulsion Web浏览器

    4. **Emulsion概念**:这个概念可能体现在Trident的设计哲学上,即通过融合AI和其他先进技术,提供一个集成度高、用户体验优良的浏览器环境。 5. **浏览器扩展和API**:作为一款现代化的浏览器,Trident可能会提供...

    Apache Storm-0.9.1 API 参考文档

    Apache Storm 是一个开源的分布式...总结,Apache Storm-0.9.1 API 参考文档为开发者提供了详细指导,涵盖了从基本概念、组件实现、拓扑构建到集群管理和性能调优的全方位知识,帮助开发者高效地构建实时数据处理系统。

    storm-trident-examples:三叉戟API

    这个项目是 Storm's Trident 的游乐场。 在这个项目中,您可以找到我用于柏林的 Trident hackaton @ Big Data ... 包含 hackaton 会话内容的博客文章: ://www.datasalt.com/2013/04/an-storms-trident-api-overview/

    storm源码包 apache-0.9.4

    Apache Storm的核心概念是拓扑(Topology),它由 bolts(处理组件)和 spouts(数据源)组成。Bolts 执行业务逻辑,而 Spouts 生成数据流。这些组件通过流(Stream)连接,形成一个有向无环图(DAG),在集群中...

    大数据框架对比.pdf

    Storm通过其Trident API支持微批处理,而Storm拓扑可以表达为有向无环图(DAG),这使它非常适合需要低延迟处理的流式数据场景。 Apache Samza是一个分布式流处理框架,它基于Kafka进行数据流的处理和任务的分发。...

    storm overview

    综上所述,Apache Storm是一个强大的实时计算平台,通过理解和掌握其核心概念、API以及相关工具的使用,开发者可以构建出高效、可靠的实时数据处理系统。而源码阅读和pom.xml文件的解析,则是深入学习和优化项目的...

    storm中文学习资料

    9. **进阶主题**:如多语言支持、 Trident API的使用、与其他大数据组件(如Hadoop、Kafka)的集成等。 通过这个压缩包的学习,用户可以从基础到进阶全面了解并掌握Apache Storm,从而在实际工作中有效地利用这一...

    Storm流计算项目:1号店电商实时数据分析系统-41.会员问题收集和解答.pptx

    项目中讲解了Kafka的基本概念、集群搭建、Java API开发测试以及storm-kafka插件的使用,强调了Kafka的拉取(Pull)消费模式和分区与副本的概念。 3. **CDH5**:Cloudera Data Hub (CDH5) 是一个全面的Hadoop发行版...

    storm学习入门《Getting started with Storm》中英文版

    对照学习能够帮助读者更好地理解和掌握Storm的核心概念和技术细节。 **标签解析:** "实时大数据"标签表明Storm主要用于处理大数据的实时分析。在大数据领域,实时性是关键,Storm能够实时处理数据流,这对于需要...

    storm入门 PDF 下载

    【标题】"Storm入门"指的是对Apache Storm这一分布式实时计算系统的...这份PDF文件对于初学者来说是一份宝贵的资源,可以帮助他们快速掌握Storm的基本概念和操作。建议读者结合实际操作,边学边练,以加深理解和应用。

    Storm实战构建大数据实时计算( 带书签目录 高清完整版)

    Trident是Storm提供的高级API,它提供了更强大的状态管理和事务性保证。Trident将一个复杂的实时处理任务分解为一系列简单的操作,这些操作在数据流上以原子方式执行。 5. **容错机制** Storm通过检查点和故障...

    Storm Applied: Strategies for real-time event processing

    此外,书中还介绍了Storm的内部工作原理和Trident API,Trident是Storm提供的高级抽象,它使得开发更为复杂的数据处理逻辑变得简单。 在资源分配方面,资源竞争是分布式系统中常见的问题。Storm通过资源管理来确保...

    apache-storm-0.9.7.tar.gz

    这个名为 "apache-storm-0.9.7.tar.gz" 的压缩包包含的是 Apache Storm 的0.9.7版本,它是软件的老版本,但仍然对理解Storm的核心概念和技术架构具有重要价值。 Storm 的核心理念是提供一种可靠且容错的数据流处理...

    Storm企业级应用实战、运维和调优

    书中可能还涵盖了如何使用 Trident API 来实现状态管理和复杂的窗口操作。 4. **监控与故障排查**:Storm提供了强大的监控工具,如Nimbus(主控节点)、Supervisor(工作节点管理)和Zookeeper(协调服务)。书中会...

    BigData.zip

    此外,理解并掌握Trident API,它是Storm提供的一种高级抽象,用于构建可靠且容错的实时处理应用,是企业级应用的关键。 接下来是“运维”部分。Storm集群的管理和维护包括节点监控、故障排查、资源调度等。使用...

    JavaScript框架OurJS.zip

    OurJS 目前完全兼容 PC 端的 IE6 、Firefox、Chrome、Safari、Opera 以及其他使用 Trident 和 WebKit 内核的浏览器。稍后还会对移动设备提供支持。 设计思想: 不创造 JS 和 DOM 范畴之外的概念。它们本身就在不断...

    从零开始学习storm最新版

    此外,书中的实例部分将展示如何编写自定义的Spout和Bolt,以及如何使用 Trident API 实现更复杂的实时处理逻辑。Trident是Storm的一个高级接口,它提供了状态管理和事务性保证,使得实时处理更加稳定可靠。 书中还...

    分布式集群技术.pdf

    分布式协调框架 ZooKeeper 是分布式集群技术的基础,ZooKeeper 基本概念和体系结构、ZooKeeper 集群的安装、操作 ZooKeeper、ZooKeeper 编程 API 等内容将为读者提供了分布式协调框架 ZooKeeper 的基础知识。...

Global site tag (gtag.js) - Google Analytics