使用 SSH 连接到主节点 (master node) - Amazon EMR

使用 SSH 连接到主节点 (master node)

Secure Shell(SSH)是您可用于创建远程电脑安全连接的网络协议。建立连接后,请如同在远程电脑上运行那样,操作您在本地计算机上的终端。您在本地发出的命令会在远程电脑上运行,同时,远程计算机的命令输出将显示在终端窗口中。

当您将 SSH 与 AWS 结合使用时,您将连接到 EC2 实例(这是在云端运行的虚拟服务器)。与 Amazon EMR 一起使用时,SSH 最常见的用途是连接到充当集群主节点的 EC2 实例。

使用 SSH 连接到主节点可让您监控集群并与集群交互。您可以在主节点上发出 Linux 命令、以交互方式运行应用程序(如 Hive 和 Pig)、浏览目录、读取日志文件等。您还可以在 SSH 连接中创建隧道,以查看主节点上托管的 Web 界面。有关更多信息,请参阅查看 Amazon EMR 集群上托管的 Web 界面

为了使用 SSH 连接主节点,您需要主节点的公有 DNS 名称。此外,与主节点关联的安全组必须具有入站规则,允许来自源(其中包含发起 SSH 连接的客户端)的 SSH(TCP 端口 22)流量。您可能需要添加规则,以允许客户端通过 SSH 连接。有关修改安全组规则的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用安全组控制网络流量向安全组添加规则

检索主节点的公有 DNS 名称

可以使用 Amazon EMR 控制台和 AWS CLI 检索主节点公有 DNS 名称。

Console

使用 Amazon EMR 控制台检索主节点的公有 DNS 名称

  1. 打开 Amazon EMR 控制台:https://console.aws.amazon.com/emr

  2. Cluster List (集群列表) 页面上,选择您的集群的链接。

  3. 记下显示在 Cluster Details (集群详细信息) 页上 Summary (摘要) 部分中 Master public DNS (主节点公有 DNS) 的值。

    注意

    您还可以选择主节点公有 DNS 名称旁边的 SSH 链接,以获取有关创建 SSH 与主节点连接的说明。

CLI

使用 AWS CLI 检索主节点的公有 DNS 名称

  1. 要检索集群标识符,请键入以下命令。

    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": "My cluster"
  2. 要列出集群实例(包括集群的主节点公有 DNS 名称)。请键入以下命令之一。将 j-2AL4XXXXXX5T9 替换为上一个命令返回的集群 ID。

    aws emr list-instances --cluster-id j-2AL4XXXXXX5T9

    或者:

    aws emr describe-cluster --cluster-id j-2AL4XXXXXX5T9

    输出会列出集群实例(包括 DNS 名称和 IP 地址)。记下 PublicDnsName 值。

    "Status": { "Timeline": { "ReadyDateTime": 1408040779.263, "CreationDateTime": 1408040515.535 }, "State": "RUNNING", "StateChangeReason": {} }, "Ec2InstanceId": "i-e89b45e7", "PublicDnsName": "ec2-###-##-##-###.us-west-2.compute.amazonaws.com" "PrivateDnsName": "ip-###-##-##-###.us-west-2.compute.internal", "PublicIpAddress": "##.###.###.##", "Id": "ci-12XXXXXXXXFMH", "PrivateIpAddress": "###.##.#.###"

有关更多信息,请参阅 AWS CLI 中的 Amazon EMR 命令

在 Linux、Unix 和 Mac OS X 上使用 SSH 和 Amazon EC2 私有密钥连接到主节点

要创建使用私有密钥文件进行身份验证的 SSH 连接,您需要在启动集群时指定 Amazon EC2 密钥对私有密钥。如果您从控制台启动集群,需在 Create Cluster (创建集群) 页面上的 Security and Access (安全与访问) 部分中指定 Amazon EC2 密钥对私有密钥。有关访问密钥对的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的 Amazon EC2 密钥对

默认情况下,您的 Linux 电脑很可能包含 SSH 客户端。例如,大多数 Linux、Unix 和 macOS 操作系统上都会安装 OpenSSH。您可以通过在命令行键入 ssh 来检查 SSH 客户端。如果您的计算机无法识别该命令,请安装 SSH 客户端以便连接主节点。OpenSSH 项目会免费提供一套完整的 SSH 工具执行文件。有关更多信息,请访问 OpenSSH 网站。

以下说明演示如何在 Linux、Unix 和 Mac OS X 上打开与 Amazon EMR 主节点之间的 SSH 连接。

配置密钥对私有密钥文件权限

您必须先对 .pem 文件设置权限,以便只有密钥所有者才有权访问该文件,然后才能使用 Amazon EC2 密钥对私有密钥创建 SSH 连接。使用终端或 AWS CLI 创建 SSH 连接时必须这样做。

  1. 确保您已允许入站 SSH 流量。有关说明,请参阅连接之前:授权入站流量

  2. 找到您的 .pem 文件。这些说明假定文件名为 mykeypair.pem,并将其存储在当前用户的主目录中。

  3. 键入以下命令以设置权限。将 ~/mykeypair.pem 替换为您的密钥对私有密钥文件的完整路径和文件名。例如 C:\Users\<username>\.ssh\mykeypair.pem

    chmod 400 ~/mykeypair.pem

    如果您没有对 .pem 文件设置权限,您将收到一条错误消息,指出您的密钥文件不受保护,并且密钥将被拒绝。您只需在第一次使用密钥对私有密钥文件时设置权限即可连接。

使用终端连接到主节点

  1. 打开终端窗口。在 Mac OS X 上,选择 Applications (应用程序) > Utilities (实用程序) > Terminal (终端)。在其它 Linux 发布版上,终端通常位于 Applications (应用程序) > Accessories (附件) > Terminal (终端)

  2. 要建立与主节点之间的连接,请键入以下命令。将 ec2-###-##-##-###.compute-1.amazonaws.com 替换为您的集群的主节点公有 DNS 名称,并将 ~/mykeypair.pem 替换为您的 .pem 文件的完整路径和文件名。例如 C:\Users\<username>\.ssh\mykeypair.pem

    ssh hadoop@ec2-###-##-##-###.compute-1.amazonaws.com -i ~/mykeypair.pem
    重要

    在连接到 Amazon EMR 主节点时,必须使用登录名 hadoop,否则可能会遇到类似于 Server refused our key 的错误。

  3. 警告指出无法验证您正在连接的主机真实性。键入 yes 以继续。

  4. 当您完成主节点 (master node) 上的工作以后,键入以下命令以关闭 SSH 连接。

    exit

如果您在使用 SSH 连接到主节点 (master node) 时遇到困难,请参阅排查实例的连接问题

在 Windows 上使用 SSH 连接到主节点 (master node)

Windows 用户可以使用 SSH 客户端(如 PuTTY)连接到主节点。连接到 Amazon EMR 主节点之前,应下载并安装 PuTTY 和 PuTTYgen。可以从 PuTTY 下载页面下载这些工具。

PuTTY 本身不支持 Amazon EC2 生成的密钥对私有密钥文件格式(.pem)。您可使用 PuTTYgen 将密钥文件转换为所需的 PuTTY 格式(.ppk)。您必须将密钥转换为此格式(.ppk),然后才能尝试使用 PuTTY 连接到主节点。

有关转换密钥的更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用 PuTTYgen 转换私有密钥

使用 PuTTY 连接到主节点

  1. 确保您已允许入站 SSH 流量。有关说明,请参阅连接之前:授权入站流量

  2. 打开 putty.exe。也可以从 Windows 程序列表中启动 PuTTY。

  3. 如有必要,在 Category (类别) 列表中,选择 Session (会话)

  4. 对于 Host Name (or IP address) [主机名 (或 IP 地址)],键入 hadoop@MasterPublicDNS。例如,hadoop@ec2-###-##-##-###.compute-1.amazonaws.com

  5. 类别 (Category) 列表中,选择 Connection (连接) > SSH, Auth (SSH,身份验证)。

  6. 对于 Private key file for authentication (用于身份验证的私有密钥文件),选择 Browse (浏览),然后选择您生成的 .ppk 文件。

  7. 依次选择 Open (打开)Yes (是) 以取消 PuTTY 安全警告。

    重要

    登录主节点时,如果系统提示您输入用户名,请键入 hadoop

  8. 当您完成主节点上的工作以后,您可以通过关闭 PuTTY 关闭 SSH 连接。

    注意

    为了防止 SSH 连接超时,您可以在 Category (类别) 列表中选择 Connection (连接),然后选择 Enable TCP_keepalives (启用 TCP_keepalives) 选项。如果在 PuTTY 中有活动的 SSH 会话,则可以通过打开 PuTTY 标题栏的上下文(右键单击)菜单,然后选择 Change Settings (更改设置) 来更改设置。

如果您在使用 SSH 连接到主节点 (master node) 时遇到困难,请参阅排查实例的连接问题

使用 AWS CLI 连接到主节点

可以在 Windows、Linux、Unix 和 Mac OS X 上使用 AWS CLI 创建与主节点之间的 SSH 连接。无论使用何种平台,都需要主节点的公有 DNS 名称和 Amazon EC2 密钥对私有密钥。如果在 Linux、Unix 或 Mac OS X 上使用 AWS CLI,则还必须对私有密钥(.pem.ppk)文件设置权限(如 配置密钥对私有密钥文件权限 所示)。

使用 AWS CLI 连接到主节点

  1. 确保您已允许入站 SSH 流量。有关说明,请参阅连接之前:授权入站流量

  2. 要检索集群标识符,请键入:

    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"
  3. 键入以下命令以打开与主节点的 SSH 连接。在下面的示例中,将 j-2AL4XXXXXX5T9 替换为集群 ID,将 ~/mykeypair.key 替换为 .pem 文件(对于 Linux、Unix 和 Mac OS X)或 .ppk 文件(对于 Windows)的完整路径和文件名。例如 C:\Users\<username>\.ssh\mykeypair.pem

    aws emr ssh --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key
  4. 当您完成主节点上的工作以后,关闭 AWS CLI 窗口。

    有关更多信息,请参阅 AWS CLI 中的 Amazon EMR 命令。如果您在使用 SSH 连接到主节点 (master node) 时遇到困难,请参阅排查实例的连接问题