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單個的處理,如下圖:





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