申海杰 田新志 陳曉范
摘要:為提供具有前沿性的計(jì)算機(jī)課程實(shí)驗(yàn),針對(duì)新一代大數(shù)據(jù)技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了基于Apache Beam的大數(shù)據(jù)實(shí)驗(yàn)教學(xué)方案。該方案在可以使學(xué)生們清楚地了解 Beam 的運(yùn)用原理。
關(guān)鍵詞:大數(shù)據(jù);Apache Beam;實(shí)驗(yàn)教學(xué)
中圖分類號(hào):G424? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? 文章編號(hào):1009-3044(2019)01-0158-02
1 引言
隨著大數(shù)據(jù) 2.0 時(shí)代悄然到來(lái),大數(shù)據(jù)從簡(jiǎn)單的批處理擴(kuò)展到了實(shí)時(shí)處理、流處理、交互式查詢和機(jī)器學(xué)習(xí)應(yīng)用。早期的處理模型 (Map/Reduce) 早已經(jīng)力不從心,而且也很難應(yīng)用到處理流程長(zhǎng)且復(fù)雜的數(shù)據(jù)流水線上。面對(duì)這種情況,Google 在 2017 年 5 月2發(fā)布了其開源大數(shù)據(jù)流水線產(chǎn)品Apache Beam的第一個(gè)穩(wěn)定版本 2.0.0[1]。
Apache Beam是一個(gè)開源的統(tǒng)一的編程模型,我們可以使用它來(lái)創(chuàng)建數(shù)據(jù)處理管道。Beam對(duì)于尷尬并行數(shù)據(jù)處理任務(wù)特別有用,其中問(wèn)題可以被分解為可以獨(dú)立和并行處理的許多較小的數(shù)據(jù)束[2]。
2 實(shí)驗(yàn)方案
為了讓學(xué)生有效地了解和掌握Beam的運(yùn)行原理,我們精心設(shè)計(jì)了實(shí)驗(yàn)方案,精簡(jiǎn)地說(shuō)明如下。
本實(shí)驗(yàn)方案通過(guò)在選定一個(gè)的 runner 上運(yùn)行一個(gè)由 Beam 的 Java SDK 編寫的 WordCount 示例,演示Beam 的運(yùn)用原理。
第一步是搭建一個(gè)管道(Pipeline)。
第二步是讓管道有一個(gè)處理框架,也就是Runtimes 。
第三步也是 Beam 最后一個(gè)重要的地方,就是模型 (Model),通俗點(diǎn)講就是我們的數(shù)據(jù)來(lái)源。
最后一步是處理結(jié)果,實(shí)驗(yàn)者可以根據(jù)自己的需求處理。
2.1 配置開發(fā)環(huán)境
第一步 ,從網(wǎng)上下載并安裝 Java Development Kit (JDK) 1.7 或更高版本。并配置 JAVA_HOME 環(huán)境變量,確認(rèn)已經(jīng)設(shè)置并指向 JDK 安裝目錄。如圖1所示。
第二步,按照 Maven 的 安裝指南 下載并安裝適合JDK所在的操作系統(tǒng)的 Apache Maven 。這個(gè)步驟,安裝的界面較多,這里就不贅述了。
2.2 實(shí)驗(yàn)代碼
獲得一份 WordCount 管線代碼拷貝最簡(jiǎn)單的方法,就是使用下列指令來(lái)生成一個(gè)簡(jiǎn)單的、包含基于 Beam 最新版的 WordCount 示例和構(gòu)建的 Maven 項(xiàng)目,操作指令如圖2所示。
2.3 運(yùn)行實(shí)例
一個(gè)單 Beam 管線可以運(yùn)行于多種 Beam runner 上,包括 ApexRunner、FlinkRunner、SparkRunner 或 DataflowRunner 等[3]。
用 --runner=<runner> 選項(xiàng)指定選定的 runner (缺省為 DirectRunner)
運(yùn)行WordCount 管線。
2.4 實(shí)驗(yàn)結(jié)果
管線完成運(yùn)行的結(jié)果會(huì)發(fā)現(xiàn)生成多個(gè)以 count 打頭的輸出文件。具體會(huì)有幾個(gè)這樣的文件是由 runner 決定的。這樣能方便 runner 進(jìn)行高效的分布式執(zhí)行。當(dāng)查看文件內(nèi)容的時(shí)候,會(huì)看到里面包含每個(gè)單詞的出現(xiàn)數(shù)量。文件中的元素順序可能會(huì)和這里看到的不同。因?yàn)?Beam 模型通常并不保障順序,以便于 runner 優(yōu)化效率[4]。
3 結(jié)束語(yǔ)
通過(guò)以上實(shí)驗(yàn)可以看到,利用 Beam 的模型,不需要編寫復(fù)雜的邏輯,就可以靈活地/優(yōu)雅地處理流處理計(jì)算過(guò)程中出現(xiàn)的一些棘手場(chǎng)景。Apache Beam 是集成了很多數(shù)據(jù)模型的一個(gè)統(tǒng)一化平臺(tái),它為大數(shù)據(jù)開發(fā)人員頻繁換數(shù)據(jù)源或多數(shù)據(jù)源、多計(jì)算框架提供了集成統(tǒng)一框架平臺(tái)。
參考文獻(xiàn):
[1]? Apache Beam Team. Apache Beam Quickstart.[EB/OL].(2017-3-21). https://beam.apache.org/get-started/quickstart-java/
[2]? Apache Beam實(shí)戰(zhàn)指南之基礎(chǔ)入門[EB/OL].(2017-10-9). https://juejin.im/entry/59db31806fb9a00a53279ca6
[3]? Google 大數(shù)據(jù)引擎 Apache Beam Java SDK 快速入門[EB/OL].(2017-1-23). https://www.jianshu.com/p/283a8c8edef7
[4] Beam從零開始.[EB/OL].(2017-1-19). https://blog.csdn.net/qq_23660243/article/details/54614167