集群 Web 界面

Dataproc 集群附带的一些核心开源组件(例如Apache HadoopApache Spark)提供了 Web 界面。这些界面可用于管理和监控集群资源和设施,例如 YARN 资源管理器、Hadoop 分布式文件系统 (HDFS)、MapReduce 和 Spark。您在集群上安装的其他组件或应用也可能会提供网络界面(例如,请参阅在 Cloud Dataproc 集群上安装并运行 Jupyter 笔记本)。

可用的界面

以下界面在 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 网页界面端口为 8090,它在 HTTPS 上运行。

2 在启用了 Kerberos 的集群上,HDFS Namenode 网页界面端口为 9871,它在 HTTPS 上运行。

3 在早期 Dataproc 版本(1.2 版之前)中,HDFS Namenode 的 Web 界面端口为 50070。

YARN ResourceManager 具有所有当前正在运行以及已完成的 MapReduce 和 Spark 应用 Web 界面的链接(位于“跟踪界面”列下)。

允许的 YARN ResourceManager REST API

创建集群时,Dataproc 会将 yarn-site.xml yarn.resourcemanager.webapp.methods-allowed属性设置为“GET,HEAD”,从而将 YARN Resource Manager Web 界面和 REST API 上可调用的 HTTP 方法限制为 GETHEAD 方法。此默认设置还将停用通过 YARN REST API 提交和修改作业的功能。

要在端口 8088 上启用特定的 HTTP 方法,只需替换默认值,将此属性设置为一个或多个 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 和其他组件网页界面界面。您可以在创建集群时启用组件网关

  • Cloud Shell:Google Cloud 控制台中的 Cloud Shell 预安装了 gcloud CLI 命令和实用程序,并提供网页预览功能,使您可以通过 SSH 隧道快速连接到集群上的网页界面端口。但是,从 Cloud Shell 到集群的连接使用了本地端口转发,此功能打开的连接只会连接到集群网页界面上的一个端口(需要运行多个命令才能连接到多个端口)。另外,Cloud Shell 会话会在一段时间(30 分钟)不活动之后自动退出。

  • Google Cloud CLI:具有动态端口转发功能的 gcloud compute ssh 命令允许您建立 SSH 隧道并在该隧道上运行 SOCKS 代理服务器。发出此命令后,您必须将本地浏览器配置为使用 SOCKS 代理。此连接方法允许您连接到集群网络界面上的多个端口。请参阅我可以使用本地端口转发,而不使用 SOCKS 代理吗?了解详情。

设置常用的命令变量

要更轻松地在本地机器或 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
  • 在 Dataproc 集群中将 HOSTNAME 设置为主节点的名称(主实例名称以 -m 后缀结尾)
  • ZONE 设置为 Dataproc 集群中虚拟机的地区(例如“us-central1-b”)

创建 SSH 隧道

gcloud 命令

在本地计算机上运行以下 gcloud 命令,设置从本地计算机上开放端口到集群主实例的 SSH 隧道,并运行侦听该端口的本地 SOCKS 代理服务器。

在运行命令之前,请在本地计算机上执行以下操作:

  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

-- 分隔符允许您向 gcloud compute ssh 命令添加 SSH 参数,如下所示:

  • -D 指定动态应用级层端口转发。
  • -N 指示 gcloud 不要打开远程 shell。

gcloud 命令可创建一个独立于其他 SSH shell 会话的 SSH 隧道,可将与隧道有关的错误排除在 shell 输出之外,并有助于防止无意关闭隧道。

如果 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}
    

    -- 分隔符允许您向 gcloud compute ssh 命令添加 SSH 参数,如下所示:

    • -4 指示 ssh 只使用 IPv4。
    • -N 指示 gcloud 不要打开远程 shell。
    • -L ${PORT1}:${HOSTNAME}:${PORT2}指定从指定的 Cloud Shell PORT1 到集群 HOSTNAMEPORT2 的本地端口转发。

    gcloud 命令可创建一个独立于其他 SSH shell 会话的 SSH 隧道,可将与隧道有关的错误排除在 shell 输出之外,并有助于防止无意关闭隧道。

配置浏览器

gcloud 命令

SSH 隧道支持使用 SOCKS 协议的流量代理。 要将浏览器配置为使用代理,请使用代理服务器参数启动新的浏览器会话。使用 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 代理服务器 localhost:${PORT},利用 SOCKS 协议第 5 版发送所有 http://https:// 网址请求。${PORT} 是您在创建 SSH 隧道中设置的端口变量。网址的主机名由代理服务器解析,而不是由 Chrome 本地解析。
  • --user-data-dir=/tmp/${HOSTNAME} 强制 Chrome 打开一个与现有 Chrome 会话无关的新窗口。如果没有此标记,Chrome 可能会打开一个附加到现有 Chrome 会话的新窗口(忽略您的 --proxy-server 设置)。为 --user-data-dir 设置的值可以是任何不存在的路径。

Cloud Shell

使用 Cloud Shell 时,您无需配置本地浏览器。 创建 SSH 隧道后,请使用 Cloud Shell 网页预览功能连接到集群界面

连接到集群界面

gcloud 命令

将本地浏览器配置为使用代理后,您可以导航到您的 Dataproc 集群上的 Web 界面网址(请参阅可用的界面)。浏览器网址采用以下格式和内容:http://cluster-name-m:port(集群界面端口)

Cloud Shell

点击 Cloud Shell 网页预览按钮 web-preview-button,然后执行以下操作之一:

  • “在端口 8080 上预览”,或
  • “更改端口”,并在对话框中输入端口号
根据您在创建 SSH 隧道中传递给 gcloud compute ssh 命令的 Cloud Shell PORT1 编号(端口 8080 - 8084)确定。

此时将打开一个浏览器窗口,该窗口连接到集群主节点上的 Web 界面端口。

常见问题解答和调试技巧

如果我在浏览器中看不到界面,该怎么办?

如果您在浏览器中看不到界面,最常见的两个原因如下:

  1. 您可能由于防火墙而出现网络连接问题。 运行以下命令(在设置本地变量之后),以查看是否可以通过 SSH 连接到主实例。 如果不能连接,则表示存在连接问题。

    Linux/macOS

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

    Windows

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

  2. 另一个代理正在干扰 SOCKS 代理。要检查代理,请运行以下 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 响应,则表明代理正在运行,因此 SOCKS 代理可能正被其他代理或浏览器扩展程序中断。

我可以使用本地端口转发,而不使用 SOCKS 代理吗?

您可以通过 SSH 本地端口转发(将主实例端口转发到本地端口)来访问主实例上运行的网络应用界面,而不使用 SOCKS 代理。例如,以下命令让您可在没有 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 代理而不是本地端口转发,因为代理:

  • 允许您访问所有网络应用端口,而无需为每个界面端口设置端口转发隧道
  • 允许 Spark 和 Hadoop Web 界面正确解析 DNS 主机