Dataproc 集群附带的一些核心开源组件(例如Apache Hadoop 和 Apache Spark)提供了 Web 界面。这些界面可用于管理和监控集群资源和设施,例如 YARN 资源管理器、Hadoop 分布式文件系统 (HDFS)、MapReduce 和 Spark。您在集群上安装的其他组件或应用也可能会提供网络界面(例如,请参阅在 Cloud Dataproc 集群上安装并运行 Jupyter 笔记本)。
可用的界面
以下界面在 Dataproc 集群主服务器节点上可用(将 master-host-name
替换为主节点的名称)。
Web 界面 | 端口 | 网址 |
---|---|---|
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 方法限制为 GET
和 HEAD
方法。此默认设置还将停用通过 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 和其他组件 Web 界面。您可以在创建集群时启用组件网关。
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 代理服务器。
在运行命令之前,请在本地计算机上执行以下操作:
- 设置常用的命令变量
- 为本地计算机上的开放端口设置端口变量。
端口
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
- 打开 Google Cloud Cloud Shell。
-
在 Cloud Shell 中运行下面的
gcloud
命令,设置从 Cloud Shell 预览端口到集群主节点上网络接口端口的 SSH 隧道。运行该命令前,请在 Cloud Shell 中执行以下操作:- 设置常用的命令变量
- 将 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 到集群 HOSTNAME:PORT2 的本地端口转发。
此
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 网页预览按钮 ,然后执行以下操作之一:
- “在端口 8080 上预览”,或
- “更改端口”,并在对话框中输入端口号
gcloud compute ssh
命令的 Cloud Shell PORT1 号(端口 8080 - 8084),在对话框中插入端口号。
此时将打开一个浏览器窗口,该窗口连接到集群主节点上的 Web 界面端口。
常见问题解答和调试技巧
如果我在浏览器中看不到界面,该怎么办?
如果您在浏览器中看不到界面,最常见的两个原因如下:
您可能由于防火墙而出现网络连接问题。 运行以下命令(在设置本地变量之后),以查看是否可以通过 SSH 连接到主实例。 如果不能连接,则表示存在连接问题。
Linux/macOS
gcloud compute ssh ${HOSTNAME}-m \ --project=${PROJECT}
Windows
gcloud compute ssh %HOSTNAME%-m ^ --project=%PROJECT%
另一个代理正在干扰 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
我可以使用本地端口转发,而不使用 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 主机