使用 SSH 连接到 Amazon EMR 集群主节点 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 SSH 连接到 Amazon EMR 集群主节点

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 连接。有关修改安全组规则的更多信息,请参阅 使用 Amazon EMR 集群的安全组控制网络流量 Amazon EC2 用户指南中的向安全组添加规则

检索主节点的公有 DNS 名称

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

Console
使用新控制台检索主节点的公有 DNS 名称
  1. 登录 AWS Management Console,然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com

  2. EC2在左侧导航窗格的 EMR on 下,选择集群,然后选择要检索公有 DNS 名称的集群。

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

CLI
使用以下命令检索主节点的公有 DNS 名称 AWS CLI
  1. 要检索集群标识符,请键入以下命令。

    aws emr list-clusters

    输出列出了您的集群,包括集群 IDs。记下您连接的集群的集群 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 和亚马逊 EC2 私钥连接到主节点

要创建使用私钥文件进行身份验证的 SSH 连接,您需要在启动集群时指定 Amazon EC2 key pair 私钥。有关访问密钥对的更多信息,请参阅《亚马逊 EC2 用户指南》中的亚马逊 EC2 密钥对

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

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

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

在使用 Amazon EC2 key pair 私钥创建 SSH 连接之前,必须对.pem文件设置权限,这样只有密钥所有者才有权访问该文件。这是使用终端或创建 SSH 连接所必需的 AWS CLI。

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

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

  3. 键入以下命令以设置权限。~/mykeypair.pem替换为 keypair 私钥文件的完整路径和文件名。例如 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. 完成主节点上的工作以后,键入以下命令,以关闭 SSH 连接。

    exit

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

在 Windows 上使用 SSH 连接到主节点

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

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

有关转换密钥的更多信息,请参阅《亚马逊 EC2 用户指南》TTYgen中的 “使用 Pu 转换私钥”。

使用 PuTTY 连接到主节点
  1. 确保您已允许入站 SSH 流量。有关说明,请参阅 连接到 Amazon EMR 之前:授权入站流量

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

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

  4. 主机名(或 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 连接到主节点时遇到困难,请参阅排查实例的连接问题

使用 AWS CLI连接到主节点

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

要使用连接到主节点 AWS CLI
  1. 确保您已允许入站 SSH 流量。有关说明,请参阅 连接到 Amazon EMR 之前:授权入站流量

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

    aws emr list-clusters

    输出列出了您的集群,包括集群 IDs。记下您连接的集群的集群 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替换为文件(对于 Linux、Unix 和 Mac OS X)或.ppk文件(对于 Windows)的完整路径和文件名。.pem例如 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 连接到主节点时遇到困难,请参阅排查实例的连接问题