透過 Cloud Dataproc 佈建及使用代管的 Hadoop/Spark 叢集 (指令列)

1. 總覽

Cloud Dataproc 是一項代管的 Spark 和 Hadoop 服務,能夠讓您利用開放原始碼資料工具,進行批次處理、查詢、串流和機器學習作業。Cloud Dataproc 自動化功能可協助您快速建立叢集、輕鬆管理叢集,並在不使用叢集時關閉叢集來節省費用。省下管理作業所需的時間與費用之後,您就能專心處理工作與資料。

本教學課程內容取自 https://cloud.google.com/dataproc/overview

課程內容

  • 如何建立代管 Cloud Dataproc 叢集 (需預先安裝 Apache Spark)。
  • 如何提交 Spark 工作
  • 如何調整叢集大小
  • 如何透過 SSH 連線至 Dataproc 叢集的主要節點
  • 如何使用 gcloud 檢查叢集、工作和防火牆規則
  • 如何關閉叢集

軟硬體需求

您會如何使用這個教學課程?

僅供閱讀 閱讀並完成練習

根據您使用 Google Cloud Platform 服務的經驗,您會給予什麼評價?

新手 中級 還算容易

2. 設定和需求

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。(如果您還沒有 Gmail 或 G Suite 帳戶,請先建立帳戶)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID

  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

3. 啟用 Cloud Dataproc 和 Google Compute Engine API

按一下畫面左上方的「選單」圖示。

2bfc27ef9ba2ec7d.png

從下拉式選單中選取 API 管理員。

408af5f32c4b7c25.png

按一下「啟用 API 和服務」

a9c0e84296a7ba5b.png

搜尋「Compute Engine」。按一下「Google Compute Engine API」出現在畫面上的結果清單中

b6adf859758d76b3.png

在 Google Compute Engine 頁面上,按一下「啟用」

da5584a1cbc77104.png

啟用後,按一下向左箭頭即可返回。

現在搜尋「Google Cloud Dataproc API」然後啟用

f782195d8e3d732a.png

4. 啟動 Cloud Shell

這種以 Debian 為基礎的虛擬機器,搭載各種您需要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。換言之,本程式碼研究室只需要在 Chromebook 上運作即可。

  1. 如要透過 Cloud 控制台啟用 Cloud Shell,只要點選「啟用 Cloud Shell」 圖示 fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q 即可 (整個佈建作業只需幾分鐘的時間,操作完畢即可)。

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為 PROJECT_ID

gcloud auth list

指令輸出

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如因故未設定專案,請直接發出以下指令:

gcloud config set project <PROJECT_ID>

正在尋找 PROJECT_ID 嗎?查看您在設定步驟中使用的 ID,或在 Cloud 控制台資訊主頁查詢:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

根據預設,Cloud Shell 也會設定一些環境變數,方便您之後執行指令。

echo $GOOGLE_CLOUD_PROJECT

指令輸出

<PROJECT_ID>
  1. 最後,進行預設可用區和專案設定。
gcloud config set compute/zone us-central1-f

您可以選擇各種不同的可用區。詳情請參閱「區域與可用區

5. 建立 Cloud Dataproc 叢集

Cloud Shell 啟動後,您可以透過指令列叫用 Cloud SDK gcloud 指令,或叫用虛擬機器執行個體提供的其他工具。

選擇要在這個研究室中使用的叢集名稱:

$ CLUSTERNAME=${USER}-dplab

首先,請建立新叢集:

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

預設的叢集設定包含兩個工作站節點,應能滿足本教學課程的需求。上述指令包含 --zone 選項,用於指定要在哪個地理區域建立叢集,以及 --scopes--tags 這兩個進階選項 (下文會在您使用這些功能啟用的功能時說明)。想瞭解如何使用指令列旗標來自訂叢集設定,請參閱 Cloud SDK gcloud dataproc clusters create 指令。

6. 將 Spark 工作提交至叢集

您可以使用 Cloud Dataproc API jobs.submit 要求、gcloud 指令列工具或 Google Cloud Platform Console 提交工作。此外,您還可以使用 SSH 連線至叢集中的機器執行個體,然後從執行個體執行工作。

現在,讓我們透過 Cloud Shell 指令列使用 gcloud 工具提交工作:

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

工作執行時,您將在 Cloud Shell 視窗中看到輸出內容。

輸入 Control-C 來中斷輸出。這麼做會停止 gcloud 指令,不過工作仍會在 Dataproc 叢集中執行。

7. 列出工作並重新連線

列印工作清單:

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

最近提交的工作會列在清單頂端。複製工作 ID 並貼到「jobId」欄位的位置。。指令將重新連線至指定工作,並顯示其輸出內容:

$ gcloud dataproc jobs wait jobId

工作完成後,輸出結果會包含 Pi 的概略值。

493928df54f61386.png

8. 調整叢集大小

如要執行較大的運算,建議您在叢集中新增更多節點,以加快執行速度。Dataproc 可讓您隨時為叢集新增節點或移除節點。

檢查叢集設定:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

新增一些先佔節點,藉此擴充叢集:

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

再次檢查叢集:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

請注意,除了原始叢集說明的 workerConfig 以外,現在還有 secondaryWorkerConfig,包含先佔工作站的兩個 instanceNames。Dataproc 顯示新節點正在啟動期間的叢集狀態。

您一開始使用了兩個節點,現在有四個節點,因此 Spark 工作執行速度大約是兩倍。

9. 透過 SSH 登入叢集

透過 SSH 連線至主要節點。主要節點的執行個體名稱一律為附加 -m 的叢集名稱:

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

第一次在 Cloud Shell 中執行 SSH 指令時,系統會為您的帳戶產生 SSH 金鑰。您可以選擇先設定通關密語,也可以使用空白的通關密語;之後如果需要,請使用 ssh-keygen 進行變更。

在執行個體上檢查主機名稱:

$ hostname

由於您在建立叢集時指定了 --scopes=cloud-platform,因此您可以在叢集上執行 gcloud 指令。列出專案中的叢集:

$ gcloud dataproc clusters list

完成後,請登出 SSH 連線:

$ logout

10. 檢查廣告代碼

建立叢集時,您加入了 --tags 選項,可為叢集中的每個節點新增標記。標記是用來將防火牆規則附加至每個節點。您未在本程式碼研究室中建立任何相符的防火牆規則,不過您還是可以檢查節點上的標記,以及網路的防火牆規則。

列印主要節點的說明:

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

在輸出內容結尾附近尋找 tags:,您會看到其包含 codelab

列印防火牆規則:

$ gcloud compute firewall-rules list

請記下 SRC_TAGSTARGET_TAGS 欄。透過將標記附加至防火牆規則,您可以指定該標記應用於具有該標記的所有節點。

11. 關閉叢集

透過 Cloud Dataproc API clusters.delete 要求、使用 gcloud dataproc clusters delete 執行檔的指令列,或從 Google Cloud Platform 控制台關閉叢集。

我們使用 Cloud Shell 指令列關閉叢集:

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. 恭喜!

您已瞭解如何建立 Dataproc 叢集、提交 Spark 工作、調整叢集大小、使用 SSH 登入主要節點,以及透過 gcloud 檢查叢集、工作和防火牆規則,以及透過 gcloud 關閉叢集!

瞭解詳情

授權

本作品採用創用 CC 姓名標示 3.0 通用授權,以及 Apache 2.0 授權。