Storm Trident

Strom Trident是什么?

Trident 是对Storm 原语(原语是指由若干条指令组成的,用于完成一定功能的一个过程的一个抽象,它可以让你对一个Topology表达为“做什么,what”(声明式),而不是“如何做,how”(命令式),关于声明式编程和命令式编程的区别,可以参看这篇文章http://blog.csdn.net/qiruiduni/article/details/49638525为实现“做什么”,Trident提供了一系列操作:join、aggregate、group、function、filter、以及对原语的状态做持久化等。如果你熟悉Pig,那么对Trident的相关概念也会比较容易理解。

Trident不同类型的operation

下图为一个Trident Topology的创建过程:

在1处,创建了一个来自spout的Stream
在2处,遍历Stream,将每个条目(entry)的“commit”字段拆分到“email“字段。
在3处,对email字段分组
在4处,对分组后的email字段做聚合操作,并持久化。

以上的这些操作(each、groupBy、persistentAggregate)的结合就形成了Storm的Topology。
这看起来类似构建在Storm 原语(spouts 和 bolts)之上的Storm Topology,除了使用Trident 的spout替换Storm 的spout,和用Trident 的操作(operation)替换Storm bolts。但这种直觉不是真的,理解Trident的操作不能直接映射到Storm的原语上是比较重要的,在Storm Topology中,你可以在bolt中灵活的写代码执行任意的操作,但在Trident中,就没有这样的灵活度了,你需要提供一系列操作,并需要找出如何将你的问题映射到一个或多个操作上,这些操作大多数是连接在一起的。
Trident的不同的操作可以用来实现不同功能,常见了的操作如下:
  • Functions:对传入的一个Tuple进行操作和发出一个或多个对应的Tuple。
  • Filters:从Stream中保留或筛选出一个Tuple。
  • Splits:拆分流将产生多个具有相同数据和字段(filed)的Stream。
  • Merges:合并Stream,只要这些Stream具有相同字段(相同的字段名和相同的数量)。
  • Joins:连接不同的Stream,这些Stream的字段大多不相同,类似于Sql的Join。
  • Grouping:在一个分区内对特定的字段分组。
  • Aggregation:对已聚合的Tuple集进行计算。
  • State updater:对Tuple值或计算值持久化到存储区。
  • State querying:查询持久化后的存储区。
  • Repartitioning:通过在特定字段上进行hash或以随机的方式对Stream重新分区。repartitioning不同于grouping,因为repartitioning是夸多个分区,而grouping是发生在一个分区内。

Trident Topology 和 Storm Topology的区别

两者根本区别在于Trident Topology的Stream是以批处理的方式处理Tuple,而原生的Storm Topology的Stream是对Tuple单个的处理,如下图:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章