叢集網路介面

Dataproc 叢集包含的一些核心開放原始碼元件,如 Apache HadoopApache Spark 會提供網路介面。這些介面可用於管理及監控叢集資源和設施,如 YARN 資源管理工具、Hadoop 分散式檔案系統 (HDFS)、MapReduce 和 Spark。您在叢集上安裝的其他元件或應用程式也可能會提供網路介面 (請參閱在 Dataproc 叢集上安裝及執行 Jupyter Notebook的範例)。

可用介面

以下為 Dataproc 叢集主要節點上可用的介面 (將 master-host-name 替換為主要節點的名稱)。

網路使用者介面 通訊埠 網址
YARN ResourceManager 80881 http://master-host-name:8088
HDFS NameNode 98702,3 http://master-host-name:9870

1 在啟用 Kerberos 的叢集上,YARN ResourceManager 網頁版 UI 通訊埠為 8090,且會在 HTTPS 上執行。

2 在啟用 Kerberos 的叢集上,HDFS Namenode 網頁版 UI 通訊埠為 9871,且會透過 HTTPS 執行。

3 在 Dataproc 之前版本中 (1.2 以前的版本),HDFS Namenode 網路 UI 通訊埠為 50070。

YARN ResourceManager 在「Tracking UI」資料欄下,提供了所有目前正在執行或已完成的 MapReduce 和 Spark 應用程式網路介面的連結。

允許使用的 YARN ResourceManager REST API

建立叢集時,Dataproc 會將 yarn-site.xml yarn.resourcemanager.webapp.methods-allowed 屬性 設為「GET,HEAD」,藉此將 YARN 資源管理員網頁介面和 REST API 可呼叫的 HTTP 方法限制為 GETHEAD 方法。這項預設設定也會透過 YARN REST API 停用工作提交和修改功能。

您可以將這個屬性設為一或多個以半形逗號分隔的 HTTP 方法名稱,藉此覆寫預設值,在通訊埠 8088 上啟用特定 HTTP 方法。ALL 值會允許通訊埠上的所有 HTTP 方法。

範例:

gcloud dataproc clusters create cluster-name \
    --properties=^#^yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE \
    --region=region \

建議:如果您將這項屬性設為允許非預設 HTTP 方法,請務必設定防火牆規則和其他安全性設定,限制對通訊埠 8088 的存取權。

連線至網路介面

您可以使用 Dataproc 元件閘道、專案的 Cloud Shell 或 Google Cloud CLI gcloud 指令列工具,連線至在 Dataproc 叢集上執行的網路介面:

  • 元件閘道:只要按一下 Google Cloud 主控台,即可連線至 Hadoop、Spark 和其他元件的網頁版 UI 介面。建立叢集時,請啟用元件閘道

  • Cloud Shell: Google Cloud 控制台中的 Cloud Shell 已預先安裝 gcloud CLI 指令和公用程式,並提供網頁預覽功能,讓您透過 SSH 通道快速連線至叢集上的網路介面通訊埠。不過,從 Cloud Shell 連線至叢集時,會使用本機通訊埠轉送功能,這只會開啟與叢集網路介面上一個通訊埠的連線,如需連線至多個通訊埠,您必須使用多個指令。此外,Cloud Shell 工作階段也會在閒置一段時間 (30 分鐘) 後自動結束。

  • Google Cloud CLI:gcloud compute ssh 指令與動態通訊埠轉送功能可讓您建立 SSH 通道,並在通道最上層運作 SOCKS Proxy 伺服器。發出這個指令後,必須將本機瀏覽器設為使用 SOCKS Proxy。這種連線方法可讓您連線至叢集網路介面上的多個通訊埠。詳情請參閱「我可以使用本機通訊埠轉送,而不用 SOCKS Proxy 嗎? 瞭解詳情。

設定常用的指令變數

如要在本機電腦或 Cloud Shell 中輕鬆複製及執行指令列範例,請設定 gcloud dataproc 指令變數。本頁中顯示的部分指令範例可能還需要設定其他變數。

Linux/mac/Shell

export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • PROJECT 設為您的 Google Cloud 專案 ID
  • HOSTNAME 設為 Dataproc 叢集中主要節點的名稱 (主要節點會有 -m 的尾碼)
  • ZONE 設為 Dataproc 叢集中虛擬機器的區域 (例如「us-central1-b」)

建立 SSH 通道

gcloud 指令

在本機電腦上執行下列 gcloud 指令,設定從本機電腦上的開放通訊埠通往叢集主要執行個體的 SSH 通道,並運作在通訊埠接聽的本機 SOCKS Proxy 伺服器。

在執行指令前,請先在您的本機電腦上:

  1. 設定常用的指令變數
  2. PORT 變數設為本機電腦上的開放通訊埠。通訊埠 1080 是任意但常見的選擇,因為它通常是開放的。
    PORT=number
    

Linux/macOS

gcloud compute ssh ${HOSTNAME} \
    --project=${PROJECT} --zone=${ZONE}  -- \
    -D ${PORT} -N

Windows

gcloud compute ssh %HOSTNAME% ^
    --project=%PROJECT% --zone=%ZONE%  -- ^
    -D %PORT% -N

-- 分隔符可讓您將 SSH 引數新增至 gcloud compute ssh 指令,如下所示:

  • -D 指定動態應用程式層級通訊埠轉送。
  • -N 指示 gcloud 不要開啟遠端殼層。

這個 gcloud 指令會建立在其他 SSH 殼層工作階段之外獨立運作的 SSH 通道,將通道相關錯誤留在殼層輸出之外,防止通道意外關閉。

如果 ssh 指令失敗並傳回錯誤訊息 bind: Cannot assign requested address,造成錯誤的原因可能是要求的通訊埠正在使用中。請嘗試使用不同的 PORT 變數值執行指令。

上述指令會在前景中執行,並且必須保持執行狀態以維持通道暢通。如果您刪除叢集,指令應會自動結束。

Cloud Shell

  1. 開啟 Google Cloud Cloud Shell
  2. 在 Cloud Shell 中執行以下的 gcloud 指令,設定從 Cloud Shell 預覽通訊埠通往叢集主要節點上網路介面通訊埠的 SSH 通道。執行指令前,請先在 Cloud Shell 中:

    1. 設定常用的指令變數
    2. PORT1 變數設為範圍介於 8080 至 8084 之間的 Cloud Shell 通訊埠,並將 PORT2 變數設為 Dataproc 叢集主要節點上的網路介面通訊埠。
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    -- 分隔符可讓您將 SSH 引數新增至 gcloud compute ssh 指令,如下所示:

    • -4 指示 ssh 只能使用 IPv4。
    • -N 指示 gcloud 不要開啟遠端殼層。
    • -L ${PORT1}:${HOSTNAME}:${PORT2} 指定從特定的 Cloud Shell PORT1 到叢集 HOSTNAME:PORT2 的本機通訊埠轉送。

    這個 gcloud 指令會建立在其他 SSH 殼層工作階段之外獨立運作的 SSH 通道,將通道相關錯誤留在殼層輸出之外,防止通道意外關閉。

設定瀏覽器

gcloud 指令

SSH 通道支援使用 SOCKS 通訊協定的流量 Proxy。 如要將瀏覽器設定為使用 Proxy,請使用 Proxy 伺服器參數開啟新的瀏覽器工作階段。以下是使用 Google Chrome 瀏覽器的範例。 HOSTNAME 是叢集主要節點的名稱 (請參閱設定常用的指令變數一節)。

Linux

/usr/bin/google-chrome \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

macOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

Windows

"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^
    --proxy-server="socks5://localhost:%PORT%" ^
    --user-data-dir="%Temp%\%HOSTNAME%"

這個指令使用下列 Chrome 瀏覽器標記:

  • -proxy-server="socks5://localhost:1080" 告訴 Chrome 使用第 5 版 SOCKS 通訊協定,透過 SOCKS Proxy 伺服器 localhost:${PORT} 傳送所有的 http://https:// 網址要求。 ${PORT} 是您在建立 SSH 通道中設定的通訊埠變數。網址的主機名稱會由 Proxy 伺服器解析,而不是由 Chrome 在本機解析。
  • --user-data-dir=/tmp/${HOSTNAME} 強制 Chrome 開啟一個未與任何現有 Chrome 工作階段繫結的新視窗。如果沒有此標記,Chrome 可能會開啟與現有 Chrome 工作階段繫結的新視窗,並且忽略您的 --proxy-server 設定。為 --user-data-dir 設定的值可以是任何不存在的路徑。

Cloud Shell

使用 Cloud Shell 時,您無需設定本機瀏覽器。 建立 SSH 通道後,即可使用 Cloud Shell 網頁預覽功能連線至叢集介面

連線至叢集介面

gcloud 指令

只要將本機瀏覽器設為使用 Proxy,您就可以連往 Dataproc 叢集上的網路介面網址 (請參閱可用介面一節)。瀏覽器網址的格式及內容如下: http://cluster-name-m:port (叢集介面通訊埠)

Cloud Shell

點選 Cloud Shell [Web Preview] (網頁預覽) 按鈕 web-preview-button,然後選取:

  • 「Preview on port 8080」(透過以下通訊埠預覽:8080),或
  • 「變更通訊埠」,並在對話方塊中插入通訊埠編號
,請根據您在「建立 SSH 通道」中傳遞至 gcloud compute ssh 指令的 Cloud Shell PORT1 號碼 (通訊埠 8080 至 8084) 進行設定。

連線至叢集主要節點上的網路介面通訊埠的瀏覽器視窗將會開啟。

常見問題和偵錯提示

如果在瀏覽器中看不到使用者介面該怎麼辦?

如果您在瀏覽器中看不到使用者介面,最常見的兩個原因是:

  1. 您發生網路連線問題,而且原因可能是防火牆。 請執行以下指令 (在設定本機變數之後),檢查您是否能透過 SSH 通道連線至主要執行個體。如果無法,表示發生連線問題。

    Linux/macOS

    gcloud compute ssh ${HOSTNAME}-m \
        --project=${PROJECT}
    

    Windows

    gcloud compute ssh %HOSTNAME%-m ^
        --project=%PROJECT%
    

  2. SOCKS Proxy 受到其他 Proxy 的干擾。如要檢查 Proxy,請執行 (Linux 和 macOS 提供的) 以下 curl 指令:

    Linux/macOS

    curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    

    Windows

    curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    
    如果看見 HTTP 回應,表示 Proxy 運作正常,因此原因可能是 SOCKS Proxy 受到其他 Proxy 或瀏覽器擴充功能的干擾。

我可以使用本機通訊埠轉送,而不用 SOCKS Proxy 嗎?

除了 SOCKS Proxy 之外,您也可以使用 SSH 本機通訊埠轉送功能來存取主要執行個體上執行的網路應用程式 UI,此功能可將主要執行個體的通訊埠轉送至本機通訊埠。例如,以下指令可讓您在未使用 SOCKS 的情況下,透過 localhost:1080 存取 cluster-name-m:8088 (請參閱「設定常用的指令變數」一節):

Linux/macOS

gcloud compute ssh ${HOSTNAME}-m \
    --project=${PROJECT} -- \
    -L 1080:${HOSTNAME}-m:8088 -N -n

Windows

gcloud compute ssh %HOSTNAME%-m ^ 
    --project=%PROJECT% -- ^ 
    -L 1080:%HOSTNAME%-m:8088 -N -n

使用 SOCKS Proxy 可能比使用本機通訊埠轉送功能適合,原因是 Proxy:

  • 可讓您存取所有網路應用程式通訊埠,而不用費心為每個 UI 通訊埠設定通訊埠轉送通道。
  • 可讓 Spark 和 Hadoop 網路使用者介面正確解析 DNS 主機