自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Apache Beam 剖析

大數(shù)據(jù)
Apache Beam 主要針對理想并行的數(shù)據(jù)處理任務(wù),并通過把數(shù)據(jù)集拆分多個子數(shù)據(jù)集,讓每個子數(shù)據(jù)集能夠被單獨(dú)處理,從而實(shí)現(xiàn)整體數(shù)據(jù)集的并行化處理。

[[188098]]

1.概述

在大數(shù)據(jù)的浪潮之下,技術(shù)的更新迭代十分頻繁。受技術(shù)開源的影響,大數(shù)據(jù)開發(fā)者提供了十分豐富的工具。但也因?yàn)槿绱?,增加了開發(fā)者選擇合適工具的難度。在大數(shù)據(jù)處理一些問題的時候,往往使用的技術(shù)是多樣化的。這完全取決于業(yè)務(wù)需求,比如進(jìn)行批處理的MapReduce,實(shí)時流處理的Flink,以及SQL交互的Spark SQL等等。而把這些開源框架,工具,類庫,平臺整合到一起,所需要的工作量以及復(fù)雜度,可想而知。這也是大數(shù)據(jù)開發(fā)者比較頭疼的問題。而今天要分享的就是整合這些資源的一個解決方案,它就是 Apache Beam。

2.內(nèi)容

Apache Beam 最初叫 Apache Dataflow,由谷歌和其合作伙伴向Apache捐贈了大量的核心代碼,并創(chuàng)立孵化了該項目。該項目的大部分大碼來自于 Cloud Dataflow SDK,其特點(diǎn)有以下幾點(diǎn):

  • 統(tǒng)一數(shù)據(jù)批處理(Batch)和流處理(Stream)編程的范式
  • 能運(yùn)行在任何可執(zhí)行的引擎之上

那 Apache Beam到底能解決哪些問題,它的應(yīng)用場景是什么,下面我們可以通過一張圖來說明,如下圖所示:


 

通過改圖,我們可以很清晰的看到整個技術(shù)的發(fā)展流向;一部分是谷歌派系,另一部分則是Apache派系。在開發(fā)大數(shù)據(jù)應(yīng)用時,我們有時候使用谷歌的框架,API,類庫,平臺等,而有時候我們則使用Apache的,比如:HBase,F(xiàn)link,Spark等。而我們要整合這些資源則是一個比較頭疼的問題,Apache Beam 的問世,整合這些資源提供了很方便的解決方案。

2.1 Vision

下面,我們通過一張流程圖來看Beam的運(yùn)行流程,如下圖所示:

通過上圖,我們可以清楚的知道,執(zhí)行一個流程分以下步驟:

  1. End Users:選擇一種你熟悉的編程語言提交應(yīng)用
  2. SDK Writers:該編程語言必須是 Beam 模型支持的
  3. Library Writers:轉(zhuǎn)換成Beam模型的格式
  4. Runner Writers:在分布式環(huán)境下處理并支持Beam的數(shù)據(jù)處理管道
  5. IO Providers:在Beam的數(shù)據(jù)處理管道上運(yùn)行所有的應(yīng)用
  6. DSL Writers:創(chuàng)建一個高階的數(shù)據(jù)處理管道

2.2 SDK

Beam SDK 提供了一個統(tǒng)一的編程模型,來處理任意規(guī)模的數(shù)據(jù)集,其中包括有限的數(shù)據(jù)集,無限的流數(shù)據(jù)。Apache Beam SDK 使用相同的類來表達(dá)有限和無限的數(shù)據(jù),同樣使用相同的轉(zhuǎn)換方法對數(shù)據(jù)進(jìn)行操作。Beam 提供了多種 SDK,你可以選擇一種你熟悉的來建立數(shù)據(jù)處理管道,如上述的 2.1 中的圖,我們可以知道,目前 Beam 支持 Java,Python 以及其他待開發(fā)的語言。

2.3 Pipeline Runners

在 Beam 管道上運(yùn)行引擎會根據(jù)你選擇的分布式處理引擎,其中兼容的 API 轉(zhuǎn)換你的 Beam 程序應(yīng)用,讓你的 Beam 應(yīng)用程序可以有效的運(yùn)行在指定的分布式處理引擎上。因而,當(dāng)運(yùn)行 Beam 程序的時候,你可以按照自己的需求選擇一種分布式處理引擎。當(dāng)前 Beam 支持的管道運(yùn)行引擎有以下幾種:

  • Apache Apex
  • Apache Flink
  • Apache Spark
  • Google Cloud Dataflow

3.示例

本示例通過使用 Java SDK 來完成,你可以嘗試運(yùn)行在不同的執(zhí)行引擎上。

3.1 開發(fā)環(huán)境

  • 下載安裝 JDK 7 或更新的版本,檢測 JAVA_HOME環(huán)境變量
  • 下載 Maven 打包環(huán)境。

關(guān)于上述的安裝步驟,并不是本篇博客的重點(diǎn),這里筆者就不多贅述了,不明白的可以到官網(wǎng)翻閱文檔進(jìn)行安裝。

3.2 下載示例代碼

Apache Beam 的源代碼在 Github 有托管,可以到 Github 下載對應(yīng)的源碼,下載地址:https://github.com/apache/beam

然后,將其中的示例代碼進(jìn)行打包,命令如下所示:

  1. $ mvn archetype:generate \ 
  2.       -DarchetypeRepository=https://repository.apache.org/content/groups/snapshots \ 
  3.       -DarchetypeGroupId=org.apache.beam \ 
  4.       -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \ 
  5.       -DarchetypeVersion=LATEST \ 
  6.       -DgroupId=org.example \ 
  7.       -DartifactId=word-count-beam \ 
  8.       -Dversion="0.1" \ 
  9.       -Dpackage=org.apache.beam.examples \ 
  10.       -DinteractiveMode=false 

此時,命令會創(chuàng)建一個文件夾 word-count-beam,里面包含一個 pom.xml 和相關(guān)的代碼文件。命令如下所示:

  1. $ cd word-count-beam/ 
  2.  
  3. $ ls 
  4. pom.xml    src 
  5.  
  6. $ ls src/main/java/org/apache/beam/examples/ 
  7. DebuggingWordCount.java    WindowedWordCount.java    common 
  8. MinimalWordCount.java    WordCount.java 

3.3 運(yùn)行 WordCount 示例代碼

一個 Beam 程序可以運(yùn)行在多個 Beam 的可執(zhí)行引擎上,包括 ApexRunner,F(xiàn)linkRunner,SparkRunner 或者 DataflowRunner。 另外還有 DirectRunner。不需要特殊的配置就可以在本地執(zhí)行,方便測試使用。

下面,你可以按需選擇你想執(zhí)行程序的引擎:

  1. 對引擎進(jìn)行相關(guān)配置
  2. 使用不同的命令:通過 –runner=<runner>參數(shù)指明引擎類型,默認(rèn)是 DirectRunner;添加引擎相關(guān)的參數(shù);指定輸出文件和輸出目錄,當(dāng)然這里需要保證文件目錄是執(zhí)行引擎可以訪問到的,比如本地文件目錄是不能被外部集群訪問的。
  3. 運(yùn)行示例程序

3.3.1 Direct

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \  
  2. -Dexec.args="--inputFile=pom.xml --output=counts" -Pdirect-runner 

3.3.2 Apex

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \ 
  2.      -Dexec.args="--inputFile=pom.xml --output=counts --runner=ApexRunner" -Papex-runner 

3.3.3 Flink-Local

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \  
  2. -Dexec.args="--runner=FlinkRunner --inputFile=pom.xml --output=counts" -Pflink-runner 

3.3.4 Flink-Cluster

  1. $ mvn package exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \  
  2. -Dexec.args="--runner=FlinkRunner --flinkMaster=<flink master> --filesToStage=target/word-count-beam-bundled-0.1.jar \  
  3. --inputFile=/path/to/quickstart/pom.xml --output=/tmp/counts" -Pflink-runner 

然后,你可以通過訪問 http://<flink master>:8081 來監(jiān)測運(yùn)行的應(yīng)用程序。

3.3.5 Spark

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \  
  2. -Dexec.args="--runner=SparkRunner --inputFile=pom.xml --output=counts" -Pspark-runner 

3.3.6 Dataflow

  1. $ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \ 
  2.      -Dexec.args="--runner=DataflowRunner --gcpTempLocation=gs://<your-gcs-bucket>/tmp \ 
  3.                   --inputFile=gs://apache-beam-samples/shakespeare/* --output=gs://<your-gcs-bucket>/counts" \ 
  4.      -Pdataflow-runner 

3.4 運(yùn)行結(jié)果

當(dāng)程序運(yùn)行完成后,你可以看到有多個文件以 count 開頭,個數(shù)取決于執(zhí)行引擎的類型。當(dāng)你查看文件的內(nèi)容的時候,每個唯一的單詞后面會顯示其出現(xiàn)次數(shù),但是前后順序是不固定的,也是分布式引擎為了提高效率的一種常用方式。

3.4.1 Direct

  1. $ ls counts* 
  2.  
  3. $ more counts* 
  4. api: 9 
  5. bundled: 1 
  6. old: 4 
  7. Apache: 2 
  8. The: 1 
  9. limitations: 1 
  10. Foundation: 1 
  11. ... 

3.4.2 Apex

  1. $ cat counts* 
  2. BEAM: 1 
  3. have: 1 
  4. simple: 1 
  5. skip: 4 
  6. PAssert: 1 
  7. ... 

3.4.3 Flink-Local

  1. $ ls counts* 
  2.  
  3. $ more counts* 
  4. The: 1 
  5. api: 9 
  6. old: 4 
  7. Apache: 2 
  8. limitations: 1 
  9. bundled: 1 
  10. Foundation: 1 
  11. ... 

3.4.4 Flink-Cluster

  1. $ ls /tmp/counts* 
  2.  
  3. $ more /tmp/counts* 
  4. The: 1 
  5. api: 9 
  6. old: 4 
  7. Apache: 2 
  8. limitations: 1 
  9. bundled: 1 
  10. Foundation: 1 
  11. ... 

3.4.5 Spark

  1. $ ls counts* 
  2.  
  3. $ more counts* 
  4. beam: 27 
  5. SF: 1 
  6. fat: 1 
  7. job: 1 
  8. limitations: 1 
  9. require: 1 
  10. of: 11 
  11. profile: 10 
  12. ... 

3.4.6 Dataflow

  1. $ gsutil ls gs://<your-gcs-bucket>/counts* 
  2.  
  3. $ gsutil cat gs://<your-gcs-bucket>/counts* 
  4. feature: 15 
  5. smother'st: 1 
  6. revelry: 1 
  7. bashfulness: 1 
  8. Bashful: 1 
  9. Below: 2 
  10. deserves: 32 
  11. barrenly: 1 
  12. ... 

4.總結(jié)

Apache Beam 主要針對理想并行的數(shù)據(jù)處理任務(wù),并通過把數(shù)據(jù)集拆分多個子數(shù)據(jù)集,讓每個子數(shù)據(jù)集能夠被單獨(dú)處理,從而實(shí)現(xiàn)整體數(shù)據(jù)集的并行化處理。當(dāng)然,也可以用 Beam 來處理抽取,轉(zhuǎn)換和加載任務(wù)和數(shù)據(jù)集成任務(wù)(一個ETL過程)。進(jìn)一步將數(shù)據(jù)從不同的存儲介質(zhì)中或者數(shù)據(jù)源中讀取,轉(zhuǎn)換數(shù)據(jù)格式,最后加載到新的系統(tǒng)中。

責(zé)任編輯:武曉燕 來源: 36大數(shù)據(jù)
相關(guān)推薦

2020-04-01 10:28:12

Apache HBas數(shù)據(jù)結(jié)構(gòu)算法

2017-01-23 20:35:24

大數(shù)據(jù)Apache Beam技術(shù)

2010-05-19 14:05:59

Subversion+

2016-11-15 09:44:21

大數(shù)據(jù)批處理流處理

2020-12-02 09:14:47

Apache批處理流式數(shù)據(jù)

2016-11-14 18:17:42

Apache Beam大數(shù)據(jù)

2009-11-25 10:13:30

SUSE Linux配

2010-05-19 15:25:47

Apache+SVN權(quán)

2010-05-17 11:05:05

Subversion和

2012-02-17 09:29:57

2010-05-14 13:21:39

Subversion1

2010-05-17 10:31:10

Subversion和

2010-05-19 13:30:50

2012-02-20 09:18:28

2010-05-14 09:04:18

Subversion1

2009-09-07 17:26:08

LinqDataSou

2009-09-27 13:42:05

Hibernate E

2010-08-05 17:43:27

RIP協(xié)議

2023-12-06 07:22:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號