天天看點

Apache Beam的API設計

Apache Beam的API設計

  Apache Beam還在開發之中,後續對應的API設計可能會有所變化,不過從目前版本來看,基于對資料處理領域對象的抽象,API的設計風格大量使用泛型來定義,具有很高的抽象級别。下面我們分别對感興趣的的設計來詳細說明。

Source

  Source表示資料輸入的抽象,在API定義上分成兩大類:一類是面向資料批處理的,稱為BoundedSource,它能夠從輸入的資料集讀取有限的資料記錄,知道資料具有有限性的特點,進而能夠對輸入資料進行切分,分成一定大小的分片,進而實作資料的并行處理;另一類是面向資料流處理的,稱為UnboundedSource,它所表示的資料是連續不斷地進行輸入,進而能夠實作支援流式資料所特有的一些操作,如Checkpointing、Watermarks等。

Source對應的類設計,如下類圖所示:

Apache Beam的API設計

  目前,Apache Beam支援BoundedSource的資料源主要有:HDFS、MongoDB、Elasticsearch、File等,支援UnboundedSource的資料源主要有:Kinesis、Pubsub、Socker等。未來,任何具有Bounded或Unbounded兩類特性的資料源都可以在Apache Beam的抽象基礎上實作對應的Source。

Sink

  Sink表示任何經過Pipeline中一個或多個PTransform處理過的PCollection,最終會輸出到特定的存儲中。與Source對應,其實Sink主要也是具有兩種類型:一種是直接寫入特定存儲的Bounded類型,如檔案系統;另一種是寫入具有Unbounded特性的存儲或系統中,如Flink。在API設計上,Sink的類圖如下所示:

          

Apache Beam的API設計

可見,基于Sink的抽象,可以實作任意可以寫入的存儲系統。

PipelineRunner

下面,我們來看一下PipelineRunner的類設計以及目前開發中的PipelineRunner,如下圖所示:

Apache Beam的API設計

      

  目前,PipelineRunner有DirectRunner、DataflowRunner、SparkRunner、ApexRunner、FlinkRunner,待這些主流的PipelineRunner穩定以後,如果有其他新的計算引擎架構出現,可以在PipelineRunner這一層進行擴充實作。

這些PipelineRunner中,DirectRunner是最簡單的PipelineRunner,它非常有用,比如我們實作了一個從HDFS讀取資料,但是需要在Spark叢集上運作的ETL程式,使用DirectRunner可以在本地非常容易地調試ETL程式,調試到程式的資料處理邏輯沒有問題了,再最終在實際的生産環境Spark叢集上運作。如果特定的PipelineRunner所對應的計算引擎沒有很好的支撐調試功能,使用DirectRunner是非常友善的。

PCollection

  PCollection是對分布式資料集的抽象,主要用作輸入、輸出、中間結果集。其中,在Apache Beam中對資料及其資料集的抽象有幾類,我們畫到一張類圖上,如下圖所示:

Apache Beam的API設計

  PCollection是對資料集的抽象,包括輸入輸出,而基于Window的資料處理有對應的Window相關的抽象,還有一類就是TupleTag,針對具有CoGroup操作的情況下用來标記對應資料中的Tuple資料,具體如何使用可以後面我們實作的Join的例子。

PTransform

  一個Pipeline是由一個或多個PTransform建構而成的DAG圖,其中每一個PTransform都具有輸入和輸出,是以PTransform是Apache Beam中非常核心的元件,我按照PTransform的做了一下分類,如下類圖所示:

Apache Beam的API設計

  通過上圖可以看出,PTransform針對不同輸入或輸出的資料的特征,實作了一個算子(Operator)的集合,而Apache Beam除了期望實作一些通用的PTransform實作來供資料處理的開發人員開箱即用,同時也在API的抽象級别上做的非常Open,如果你想實作自己的PTransform來處理指定資料集,隻需要自定義即可。而且,随着社群的活躍及其在實際應用場景中推廣和使用,會很快建構一個龐大的PTransform實作庫,任何有資料處理需求的開發人員都可以共享這些元件。

Combine

  這裡,單獨把Combine這類合并資料集的實作拿出來,它的抽象很有趣,主要面向globally 和per-key這兩類抽象,實作了一個非常豐富的PTransform算子庫,對應的類圖如下所示:

Apache Beam的API設計

  通過上圖可以看出,作用在一個資料集上具有Combine特征的基本操作:Max、Min、Top、Mean、Sum、Count等等。

Window

  Window是用來處理某一個Micro batch的資料記錄可以進行Merge這種場景的需求,通常用在Streaming處理的情況下。Apache Beam也提供了對Window的抽象,其中對于某一個Window下的資料的處理,是通過WindowFn接口來定義的,與該接口相關的處理類,如下類圖所示:

Apache Beam的API設計

本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/7609640.html,如需轉載請自行聯系原作者

繼續閱讀