本文將帶你執(zhí)行你的第一個 Beam 管線 —— 運行一個由 Beam 的 Java SDK 編寫的 WordCount 示例,于你選定一個的 runner 上。
Apache Beam 代言
設(shè)置開發(fā)環(huán)境
- 下載并安裝 Java Development Kit (JDK) 1.7 或更高版本。檢查 JAVA_HOME 環(huán)境變量已經(jīng)設(shè)置并指向你的 JDK 安裝目錄。
- 照著 Maven 的 安裝指南 下載并安裝適合你的操作系統(tǒng)的 Apache Maven 。
獲取 WordCount 代碼
獲得一份 WordCount 管線代碼拷貝最簡單的方法,就是使用下列指令來生成一個簡單的、包含基于 Beam 最新版的 WordCount 示例和構(gòu)建的 Maven 項目:
$ mvn archetype:generate \
-DarchetypeRepository=https://repository.apache.org/content/groups/snapshots \
-DarchetypeGroupId=org.apache.beam \
-DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
-DarchetypeVersion=LATEST \
-DgroupId=org.example \
-DartifactId=word-count-beam \
-Dversion="0.1" \
-Dpackage=org.apache.beam.examples \
-DinteractiveMode=false
這將創(chuàng)建一個叫 word-count-beam
的目錄,其中包含了一份簡單的 pom.xml
文件和一套示例管線,用來計算某個文本文件中的各個單詞的數(shù)量。
$ cd word-count-beam/
$ ls
pom.xml src
$ ls src/main/java/org/apache/beam/examples/
DebuggingWordCount.java WindowedWordCount.java common
MinimalWordCount.java WordCount.java
關(guān)于這些示例中用到的 Beam 的概念的詳細介紹,請閱讀 WordCount Example Walkthrough 一文。這里我們只聚焦于如何執(zhí)行 WordCount.java
上。
運行 WordCount
一個單 Beam 管線可以運行于多種 Beam runner 上,包括 ApexRunner、FlinkRunner、SparkRunner 或 DataflowRunner 等。
在你選好用哪個 runner 以后:
- 確保你已經(jīng)正確配置了該 runner 。
- 這樣來構(gòu)造你的命令行:
- 用
--runner=<runner>
選項指定你選定的 runner (缺省為 DirectRunner) - 添加特定于該 runner 的必需選項
- 選擇該 runner 能訪問到的輸入文件和輸出位置。(例如,當你在外部集群上運行管線的時候是無法訪問本地文件的。)
- 運行你的第一個 WordCount 管線。
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--inputFile=pom.xml --output=counts" -Pdirect-runner
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--inputFile=pom.xml --output=counts --runner=ApexRunner" -Papex-runner
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--runner=FlinkRunner --inputFile=pom.xml --output=counts" -Pflink-runner
$ mvn package exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--runner=FlinkRunner --flinkMaster=<flink master> --filesToStage=target/word-count-beam-bundled-0.1.jar \
--inputFile=/path/to/quickstart/pom.xml --output=/tmp/counts" -Pflink-runner
You can monitor the running job by visiting the Flink dashboard at http://<flink master>:8081
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--runner=SparkRunner --inputFile=pom.xml --output=counts" -Pspark-runner
$ mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--runner=DataflowRunner --gcpTempLocation=gs://<your-gcs-bucket>/tmp \
--inputFile=gs://apache-beam-samples/shakespeare/* --output=gs://<your-gcs-bucket>/counts" \
-Pdataflow-runner
檢視結(jié)果
一旦管線完成運行,你可以查看結(jié)果。你會注意到有多個以 count
打頭的輸出文件。具體會有幾個這樣的文件是由 runner 決定的。這樣能方便 runner 進行高效的分布式執(zhí)行。
$ ls counts*
$ ls counts*
$ ls counts*
$ ls /tmp/counts*
$ ls counts*
$ gsutil ls gs://<your-gcs-bucket>/counts*
當你查看文件內(nèi)容的時候,你會看到里面包含每個單詞的出現(xiàn)數(shù)量。文件中的元素順序可能會和這里看到的不同。因為 Beam 模型通常并不保障順序,以便于 runner 優(yōu)化效率。
$ more counts*
api: 9
bundled: 1
old: 4
Apache: 2
The: 1
limitations: 1
Foundation: 1
...
$ cat counts*
BEAM: 1
have: 1
simple: 1
skip: 4
PAssert: 1
...
$ more counts*
The: 1
api: 9
old: 4
Apache: 2
limitations: 1
bundled: 1
Foundation: 1
...
$ more /tmp/counts*
The: 1
api: 9
old: 4
Apache: 2
limitations: 1
bundled: 1
Foundation: 1
...
$ more counts*
beam: 27
SF: 1
fat: 1
job: 1
limitations: 1
require: 1
of: 11
profile: 10
...
$ gsutil cat gs://<your-gcs-bucket>/counts*
feature: 15
smother'st: 1
revelry: 1
bashfulness: 1
Bashful: 1
Below: 2
deserves: 32
barrenly: 1
...
下一步
- 閱讀 WordCount Example Walkthrough 學習更多的 WordCount 示例
- 深入學習我們推薦的 文章和幻燈片。
- 加入 Beam users@ 郵件列表。
如果你遇到任何問題,請千萬不要猶豫 跟我們聯(lián)系!