透過 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」,並啟用這項 API。

f782195d8e3d732a.png

4. 啟動 Cloud Shell

這部以 Debian 為基礎的虛擬機器,搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 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 後,您應該會看到驗證已完成,專案也已設為獲派的專案 ID 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 主控台提交工作。您也可以使用 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

工作完成後,輸出內容會包含圓周率的近似值。

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,其中包含先占 worker 的兩個 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 選項,可為叢集中的每個節點新增標記。標記用於將防火牆規則附加至每個節點。您在本 Codelab 中未建立任何相符的防火牆規則,但仍可檢查節點上的標記和網路上的防火牆規則。

列印主節點的說明:

$ 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 授權。