叢集網路介面

可用介面

Managed Service for Apache Spark 叢集主要執行個體提供下列介面 (請將 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 在 1.2 版之前的 Managed Service for Apache Spark 版本中,HDFS Namenode 網頁 UI 通訊埠為 50070。

YARN ResourceManager 的「Tracking UI」(追蹤 UI) 欄下方,有目前所有執行中和已完成的 MapReduce 和 Spark 應用程式網頁介面連結。

允許的 YARN ResourceManager REST API

建立叢集時,Managed Service for Apache Spark 會將 yarn-site.xml yarn.resourcemanager.webapp.methods-allowed屬性設為「GET,HEAD」,將可在 YARN Resource Manager 網頁 UI 和 REST API 上呼叫的 HTTP 方法限制為 GET 和 HEAD 方法。這項預設設定也會停用透過 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 的存取。

連線至網頁介面

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

  • 元件閘道:只要按一下,即可從 Google Cloud 控制台連線至 Hadoop、Spark 和其他元件網頁版使用者介面。您可以在建立叢集時啟用元件閘道。

  • 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 設為 Managed Service for Apache Spark 叢集中主要節點的名稱 (主要節點名稱結尾為 -m 後置字串)
  • 將 ZONE 設為 Managed Service for Apache Spark 叢集中 VM 的可用區 (例如「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 變數設為 Cloud Shell 通訊埠 (範圍為 8080 至 8084),並將 PORT2 變數設為 Managed Service for Apache Spark 叢集主要節點上的網頁介面通訊埠。
      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 透過 SOCKS Proxy 伺服器 localhost:${PORT} 傳送所有 http:// 和 https:// 網址要求,並使用第 5 版 SOCKS 通訊協定。${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 後,即可前往 Managed Service for Apache Spark 叢集上的網頁介面網址 (請參閱「可用的介面」)。瀏覽器網址的格式和內容如下: http://cluster-name-m:port (叢集介面通訊埠)

Cloud Shell

按一下 Cloud Shell 的「Web Preview」(網頁預覽) 按鈕 web-preview-button,然後選取下列其中一個選項:

  • 「透過以下通訊埠預覽: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,請執行下列 curl 指令 (適用於 Linux 和 macOS):

    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,將主要執行個體的通訊埠轉送至本機通訊埠。舉例來說,下列指令可讓您存取 localhost:1080,以便在不使用 SOCKS 的情況下連線至 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 網頁版 UI 正確解析 DNS 主機