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

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

使用 SSH 连接到主节点

安全 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 EC2 用户指南(适用于 Linux 实例)添加规则。

检索主节点的公有 DNS 名称

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

Console

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

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.aws.amazon.com/elasticmapreduce/

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

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

    注意

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

CLI

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

  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 名称),请键入以下命令之一。Replace 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": "###.##.#.###"

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

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

要创建使用私有密钥文件进行身份验证的 SSH 连接,您需要在启动集群时指定 Amazon EC2 密钥对私有密钥。如果您从控制台启动群集,需在 Amazon EC2Create Cluster (创建群集) 页面上的 Security and Access (安全与访问) 部分中指定 密钥对私有密钥。有关访问密钥对的更多信息,请参阅 中的 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 Amazon EC2 用户指南(适用于 Linux 实例) 密钥对。

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

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

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

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

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

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

  3. 键入以下命令以设置权限。Replace ~/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. 要建立与主节点的连接,请键入以下命令。Replace 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
    重要

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

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

  4. 在完成主节点上的工作后,键入以下命令以关闭 SSH 连接。

    exit

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

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

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

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

使用 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。

  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 (更改设置) 来更改设置。

使用 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

    输出将列出您的集群,包括集群 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 替换为 .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 窗口。

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