选项 2,第 1 部分:使用动态端口转发设置通往主节点的 SSH 隧道
要连接到主节点上的本地 Web 服务器,您需要在计算机和主节点之间创建 SSH 隧道。这也称为端口转发(port forwarding)。如果您使用动态端口转发创建 SSH 隧道,则路由到指定未使用本地端口的所有流量都将转发到主节点上的本地 Web 服务器。这将创建 SOCKS 代理。然后,您可以将互联网浏览器配置为使用附加组件(例如 FoxyProxy 或 SwitchyOmega)来管理您的 SOCKS 代理设置。
使用代理管理附加组件,您可以根据文本模式自动筛选 URL,并将代理设置限制为与主节点公有 DNS 名称形式匹配的域。当您在查看主节点上托管的网站和互联网上托管的网站之间进行切换时,浏览器附加组件会自动处理打开和关闭代理的操作。
在开始之前,您需要主节点的公有 DNS 名称和密钥对私有密钥文件。有关如何查找主节点公有 DNS 名称的信息,请参阅 检索主节点的公有 DNS 名称。有关访问密钥对的更多信息,请参阅《Amazon EC2 用户指南》中的 Amazon EC2 密钥对。有关您可能希望在主节点上查看的站点的更多信息,请参阅 查看 Amazon EMR 集群上托管的 Web 界面。
使用 OpenSSH 的动态端口转发,设置通往主节点的 SSH 隧道
通过 OpenSSH 使用动态端口转发设置 SSH 隧道
-
确保您已允许入站 SSH 流量。有关说明,请参阅 连接到 Amazon EMR 之前:授权入站流量。
-
打开终端窗口。在 Mac OS X 上,选择 Applications (应用程序) > Utilities (实用程序) > Terminal (终端)。在其它 Linux 发布版上,终端通常位于 Applications (应用程序) > Accessories (附件) > Terminal (终端)。
-
键入以下命令以在本地计算机上打开 SSH 隧道。将
~/mykeypair.pem
替换为.pem
文件的位置和文件名,将8157
替换为一个未使用的本地端口号,并将ec2-###-##-##-###.compute-1.amazonaws.com
替换为集群的主公有 DNS 名称。ssh -i
~/mykeypair.pem
-N -D8157
hadoop@ec2-###-##-##-###.compute-1.amazonaws.com
在您发出此命令后,终端保持打开状态并且不返回响应。
注意
-D
表示使用动态端口转发,它允许您指定一个本地端口,用于将数据转发到主节点本地 Web 服务器上的所有远程端口。动态端口转发会创建一个本地 SOCKS 代理,侦听命令中指定的端口。 -
隧道处于活动状态后,请为您的浏览器配置 SOCKS 代理。有关更多信息,请参阅 选项 2,第 2 部分:配置代理设置以查看 Amazon EMR 集群主节点上托管的网站。
-
如果您已完成使用主节点上的 Web 界面,请关闭终端窗口。
通过 Amazon CLI 使用动态端口转发设置 SSH 隧道
您可以在 Windows 、Linux、Unix 和 Mac OS X 上使用 Amazon CLI 创建与主节点之间的 SSH 连接。如果在 Linux、Unix 或 Mac OS X 上使用 Amazon CLI,则必须对 .pem
文件设置权限(如 配置密钥对私有密钥文件权限 所示)。如果在 Windows 上使用 Amazon CLI,则 PuTTY 必须在路径环境变量中,否则您可能会收到错误(如 OpenSSH or PuTTY not available (OpenSSH 或 PuTTY 不可用)
)。
通过 Amazon CLI 使用动态端口转发设置 SSH 隧道
-
确保您已允许入站 SSH 流量。有关说明,请参阅 连接到 Amazon EMR 之前:授权入站流量。
-
创建与主节点的 SSH 连接,如 使用 Amazon CLI 连接到主节点 所示。
-
要检索集群标识符,请键入:
aws emr list-clusters
输出会列出您的集群(包括集群 ID)。记下您连接的集群的集群 ID。
"Status": { "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "AWS CLI cluster"
-
键入以下命令,以使用动态端口转发打开通往主节点的 SSH 隧道。在下面的示例中,将
j-2AL4XXXXXX5T9
替换为集群 ID,将~/mykeypair.key
替换为.pem
文件 (对于 Linux、Unix 和 Mac OS X) 或.ppk
文件 (对于 Windows) 的位置和文件名。aws emr socks --cluster-id
j-2AL4XXXXXX5T9
--key-pair-file~/mykeypair.key
注意
socks 命令会自动配置本地端口 8157 上的动态端口转发。目前,此设置无法修改。
-
隧道处于活动状态后,请为您的浏览器配置 SOCKS 代理。有关更多信息,请参阅 选项 2,第 2 部分:配置代理设置以查看 Amazon EMR 集群主节点上托管的网站。
-
如果您已完成使用主节点上的 Web 界面,请关闭 Amazon CLI 窗口。
有关在 Amazon CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr。
使用 PuTTY 设置通往主节点的 SSH 隧道
Windows 用户可以使用 SSH 客户端(如 PuTTY),创建通往主节点的 SSH 隧道。连接到 Amazon EMR 主节点之前,应下载并安装 PuTTY 和 PuTTYgen。可以从 PuTTY 下载页面
PuTTY 本身不支持 Amazon EC2 生成的密钥对私有密钥文件格式(.pem
)。您可使用 PuTTYgen 将密钥文件转换为所需的 PuTTY 格式(.ppk
)。您必须将密钥转换为此格式 (.ppk
),然后才能尝试使用 PuTTY 连接到主节点。
有关转换密钥的更多信息,请参阅《Amazon EC2 用户指南》中的使用 PuTTYgen 转换私有密钥。
通过 PuTTY 使用动态端口转发设置 SSH 隧道
-
确保您已允许入站 SSH 流量。有关说明,请参阅 连接到 Amazon EMR 之前:授权入站流量。
-
双击
putty.exe
以启动 PuTTY。也可以从 Windows 程序列表中启动 PuTTY。注意
如果您已经有与主节点之间的活动 SSH 会话,则可以通过右键单击 PuTTY 标题栏并选择 Change Settings(更改设置)来添加隧道。
-
如有必要,在 Category (类别) 列表中,选择 Session (会话)。
-
在 Host Name (主机名) 字段,键入
hadoop@
MasterPublicDNS
。例如,hadoop@
ec2-###-##-##-###.compute-1.amazonaws.com
。 -
在 Category (类别) 列表中,展开 Connection (连接) > SSH,然后选择 Auth (身份验证)。
-
对于 Private key file for authentication (用于身份验证的私有密钥文件),选择 Browse (浏览),然后选择您生成的
.ppk
文件。注意
PuTTY 本身不支持 Amazon EC2 生成的密钥对私有密钥文件格式(
.pem
)。您可使用 PuTTYgen 将密钥文件转换为所需的 PuTTY 格式(.ppk
)。您必须将密钥转换为此格式 (.ppk
),然后才能尝试使用 PuTTY 连接到主节点。 -
在 Category (类别) 列表中,展开 Connection (连接) > SSH,然后选择 Tunnels (隧道)。
-
在 Source port (源端口) 字段,键入
8157
(未使用的本地端口),然后选择 Add (添加)。 -
将 Destination (目标) 字段留空。
-
选择 Dynamic (动态) 和 Auto (自动) 选项。
-
选择 Open (打开)。
-
选择 Yes (是) 以取消 PuTTY 安全警告。
重要
登录主节点时,如果系统提示您输入用户名,请键入
hadoop
。 -
隧道处于活动状态后,请为您的浏览器配置 SOCKS 代理。有关更多信息,请参阅 选项 2,第 2 部分:配置代理设置以查看 Amazon EMR 集群主节点上托管的网站。
-
如果您已完成使用主节点上的 Web 界面,请关闭 PuTTY 窗口。