1. 程式人生 > >Apache Beam,批處理和流式處理的融合!

Apache Beam,批處理和流式處理的融合!

## 1. 概述 在本教程中,我們將介紹 `Apache Beam` 並探討其基本概念。 我們將首先演示使用 `Apache Beam` 的用例和好處,然後介紹基本概念和術語。之後,我們將通過一個簡單的例子來說明 `Apache Beam` 的所有重要方面。 ## 2. Apache Beam是個啥? **Apache Beam(Batch+strEAM)是一個用於批處理和流式資料處理作業的統一程式設計模型。**它提供了一個軟體開發工具包,用於定義和構建資料處理管道以及執行這些管道的執行程式。 **Apache Beam旨在提供一個可移植的程式設計層。**事實上,Beam管道執行程式將資料處理管道轉換為與使用者選擇的後端相容的API。目前,支援這些分散式處理後端有: - Apache Apex - Apache Flink - Apache Gearpump (incubating) - Apache Samza - Apache Spark - Google Cloud Dataflow - Hazelcast Jet ## 3. 為啥選擇 Apache Beam **Apache Beam 將批處理和流式資料處理融合在一起,而其他元件通常通過單獨的 API 來實現這一點。**因此,很容易將流式處理更改為批處理,反之亦然,例如,隨著需求的變化。 **Apache Beam 提高了可移植性和靈活性。**我們關注的是邏輯,而不是底層的細節。此外,我們可以隨時更改資料處理後端。 Apache Beam 可以使用 Java、Python、Go和 Scala等SDK。事實上,團隊中的每個人都可以使用他們選擇的語言。 ## 4. 基本概念 使用 Apache Beam,我們可以構建工作流圖(管道)並執行它們。程式設計模型中的關鍵概念是: - PCollection–表示可以是固定批處理或資料流的資料集 - PTransform–一種資料處理操作,它接受一個或多個 PCollections 並輸出零個或多個 PCollections。 - Pipeline–表示 PCollection 和 PTransform 的有向無環圖,因此封裝了整個資料處理作業。 - PipelineRunner–在指定的分散式處理後端上執行管道。 簡單地說,PipelineRunner 執行一個管道,管道由 PCollection 和 PTransform 組成。 ## 5. 字數統計示例 現在我們已經學習了 Apache Beam 的基本概念,讓我們設計並測試一個單詞計數任務。 ### 5.1 建造樑式管道 設計工作流圖是每個 Apache Beam 作業的第一步,單詞計數任務的步驟定義如下: 1.從原文中讀課文。 2.把課文分成單詞表。 3.所有單詞都小寫。 4.刪去標點符號。 5.過濾停止語。 6.統計唯一單詞數量。 為了實現這一點,我們需要使用 *PCollection* 和 *PTransform* 抽象將上述步驟轉換為 *管道* 。 ### 5.2. 依賴 在實現工作流圖之前,先新增 [Apache Beam的依賴項](https://search.maven.org/artifact/org.apache.beam/beam-sdks-java-core) 到我們的專案: ```xml ``` Beam管道執行程式依賴於分散式處理後端來執行任務。我們新增 [*DirectRunner*](https://search.maven.org/artifact/org.apache.beam/beam-runners-direct-java) 作為執行時依賴項: ```xml ``` 與其他管道執行程式不同,*DirectRunner* 不需要任何額外的設定,這對初學者來說是個不錯的選擇。 ### 5.3. 實現 `Apache Beam` 使用 `Map-Reduce` 程式設計正規化 ( 類似 Java Stream)。講下面內容之前,最好 對 *reduce()*, *filter()*, *count()*, *map()*, 和 *flatMap()* 有個基礎概念和認識。 首先要做的事情就是 建立*管道*: ```java PipelineOptions options = PipelineOptionsFactory.create(); Pipeline p = Pipeline.create(options); ``` 六步單詞計數任務: ```java PCo