教程:Amazon EMR 入门 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:Amazon EMR 入门

概述

借助 Amazon EMR,您可以设置集群以便在几分钟内使用大数据框架处理和分析数据。本教程介绍如何使用 Spark 启动示例集群,以及如何运行存储在 Amazon S3 存储桶中的简单 PySpark 脚本。它涵盖了三个主要工作流类别中的基本 Amazon EMR 任务:计划和配置、管理以及清除。

在学习本教程时,您可以找到指向更详细主题的链接,以及 后续步骤 部分中其他步骤的想法。如果您有任何疑问或遇到困难,请在我们的论坛上联系 Amazon EMR 团队。


				Amazon EMR 的工作流程图,概览了计划和配置、管理以及清除这三个主要工作流程类别。
先决条件
  • 在启动 Amazon EMR 集群之前,请确保您已完成 设置 Amazon EMR 中的任务。

成本
  • 您创建的示例集群将在实际环境中运行。该集群产生最低费用。为避免额外费用,请确保您完成本教程最后一步中的清理任务。根据 Amazon EMR 定价,费用按秒计算。费用也因区域而有所不同。有关更多信息,请参阅 Amazon EMR 定价

  • 对于您在 Amazon S3 中存储的小文件,也可能会产生最低费用。如果您在 Amazon 免费套餐的使用限制内,则可能会免除 Amazon S3 所产生的部分或全部费用。有关更多信息,请参阅 Amazon S3 定价Amazon免费套餐

第 1 步:计划和配置 Amazon EMR 集群

为 Amazon EMR 准备存储

当您使用 Amazon EMR 时,您可以从各种文件系统中进行选择,以存储输入数据、输出数据和日志文件。在本教程,您可以使用 EMRFS 将数据存储在 S3 存储桶中。EMRFS 是 Hadoop 文件系统的一种实现方式,允许您读取常规文件并将其写入到 Amazon S3。有关更多信息,请参阅使用存储和文件系统

要为本教程创建存储桶,请参照《Amazon Simple Storage Service 控制台用户指南》中的如何创建 S3 存储桶?。在您计划启动 Amazon EMR 集群的同一Amazon区域中创建存储桶。例如,美国西部(俄勒冈)us-west-2。

您用于 Amazon EMR 的存储桶和文件夹具有以下限制:

  • 名称由小写字母、数字、句点 (.) 和连字符 (-) 组成。

  • 名称不能以数字结尾。

  • 对于所有Amazon账户,存储桶名称必须是唯一的。

  • 输出文件夹必须为空。

为 Amazon EMR 准备含有输入数据的应用程序

为 Amazon EMR 准备应用程序的最常见方法是将应用程序及其输入数据上传至 Amazon S3。然后,您在向集群提交工作时,指定脚本和数据的 Amazon S3 位置。

在此步骤中,您将示例 PySpark 脚本上传到 Amazon S3 存储桶。我们提供了 PySpark 脚本供您使用。该脚本处理食品企业检查数据并在 S3 存储桶中返回结果文件。结果文件列出了红色类违规最多的十大企业。

您还可以将示例输入数据上载到 Amazon S3 以供 PySpark 脚本处理。输入数据是修正版,其中包含 2006 年至 2020 年华盛顿州金县卫生部门的检查结果。有关更多信息,请参阅 King County Open Data: Food Establishment Inspection Data。以下是数据集中的示例行。

name, inspection_result, inspection_closed_business, violation_type, violation_points 100 LB CLAM, Unsatisfactory, FALSE, BLUE, 5 100 PERCENT NUTRICION, Unsatisfactory, FALSE, BLUE, 5 7-ELEVEN #2361-39423A, Complete, FALSE, , 0
为 EMR 准备示例 PySpark 脚本
  1. 将下面的示例代码复制到您选择的编辑器中的新文件中。

    import argparse from pyspark.sql import SparkSession def calculate_red_violations(data_source, output_uri): """ Processes sample food establishment inspection data and queries the data to find the top 10 establishments with the most Red violations from 2006 to 2020. :param data_source: The URI of your food establishment data CSV, such as 's3://DOC-EXAMPLE-BUCKET/food-establishment-data.csv'. :param output_uri: The URI where output is written, such as 's3://DOC-EXAMPLE-BUCKET/restaurant_violation_results'. """ with SparkSession.builder.appName("Calculate Red Health Violations").getOrCreate() as spark: # Load the restaurant violation CSV data if data_source is not None: restaurants_df = spark.read.option("header", "true").csv(data_source) # Create an in-memory DataFrame to query restaurants_df.createOrReplaceTempView("restaurant_violations") # Create a DataFrame of the top 10 restaurants with the most Red violations top_red_violation_restaurants = spark.sql("""SELECT name, count(*) AS total_red_violations FROM restaurant_violations WHERE violation_type = 'RED' GROUP BY name ORDER BY total_red_violations DESC LIMIT 10""") # Write the results to the specified output URI top_red_violation_restaurants.write.option("header", "true").mode("overwrite").csv(output_uri) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( '--data_source', help="The URI for you CSV restaurant data, like an S3 bucket location.") parser.add_argument( '--output_uri', help="The URI where output is saved, like an S3 bucket location.") args = parser.parse_args() calculate_red_violations(args.data_source, args.output_uri)
  2. 将该文件保存为 health_violations.py

  3. health_violations.py 上传到您为本教程创建的 Amazon S3 存储桶中。有关说明,请参阅 Amazon Simple Storage Service 入门指南中的将对象上传到存储桶

为 EMR 准备示例输入数据
  1. 下载 zip 文件 food_establishment_data.zip

  2. 解压并保存 food_establishment_data.zip 至 计算机的 food_establishment_data.csv

  3. 将 CSV 文件上载到您为本教程创建的 S3 存储桶。有关说明,请参阅 Amazon Simple Storage Service 入门指南中的将对象上传到存储桶

有关为 EMR 设置数据的更多信息,请参阅准备输入数据

启动 Amazon EMR 集群

您在准备存储位置和应用程序之后,则可以启动示例 Amazon EMR 集群。在此步骤,您使用最新的 Amazon EMR 版本启动 Apache Spark 集群。

New console
使用新控制台启动安装有 Spark 的集群
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

  3. Create Cluster(创建集群)页面上,记下 Release(发行版)、Instance type(实例类型)、Number of instances(示例数量)和 Permissions(权限)的默认值。这些字段使用适用于通用型集群的值自动填充。

  4. Cluster name(集群名称)字段中,输入唯一的集群名称以帮助您识别集群,例如我的第一个集群

  5. Applications (应用程序) 下,选择 Spark 选项以在集群上安装 Spark。

    注意

    在启动集群之前,选择要在 Amazon EMR 集群上运行的应用程序。在启动集群之后,您无法在集群中添加或删除应用程序。

  6. Cluster logs(集群日志)下,选中 Publish cluster-specific logs to Amazon S3(将集群特定日志发布到 Amazon S3)复选框。将 Amazon S3 location(Amazon S3 位置)值替换为您创建的 Amazon S3 存储桶,后跟 /logs。例如,s3://DOC-EXAMPLE-BUCKET/logs。添加 /logs 会在存储桶中创建一个名为“logs”的新文件夹,Amazon EMR 可以从中复制集群的日志文件。

  7. Security configuration and permissions(安全配置和权限)下,选择您的 EC2 key pair(EC2 密钥对)。在同一部分中,选择 Service role for Amazon EMR(适用于 Amazon EMR 的服务角色)下拉菜单,然后选择 EMR_DefaultRole。然后,选择 IAM role for instance profile(实例配置文件的 IAM 角色)下拉菜单并选择 EMR_EC2_DefaultRole

  8. 选择 Create cluster(创建集群)以启动集群并打开集群详细信息页面。

  9. 找到集群名称旁边的集群 Status (状态)。Amazon EMR 预制集群过程中,状态会从 Starting (正在启动) 变为 Running (正在运行) 再变为 Waiting (正在等待)。您可能需要选择右侧的刷新图标或刷新您的浏览器才能查看状态更新情况。

集群已启动且正在运行,并准备好接受工作时,集群状态会变更为 Waiting (正在等待)。有关读取集群摘要的更多信息,请参阅查看集群状态和详细信息。有关集群状态的信息,请参阅了解集群的生命周期

Old console
使用旧控制台启动安装有 Spark 的集群
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 选择 Create cluster (创建集群) 以打开 Quick Options wizard (快速选项向导)

  3. Create Cluster - Quick Options(创建集群 - 快速选项)页面上,记下 Release(发行版)、Instance type(实例类型)、Number of instances(实例数量)和 Permissions(权限)的原定设置值。这些字段使用为通用型集群操作的值自动填充。

  4. 输入 Cluster name (集群名称) 以帮助您标识集群。例如我的第一个集群

  5. 启用 Logging (日志记录),但将 S3 folder (S3 文件夹) 的值替换为您创建的 Amazon S3 存储桶,后跟 /logs。例如,s3://DOC-EXAMPLE-BUCKET/logs。在存储桶中创建名为“logs”的/logs,EMR 可以从中复制集群的日志文件。

  6. Applications (应用程序) 下,选择 Spark 选项以在集群上安装 Spark。

    注意

    在启动集群之前,选择要在 Amazon EMR 集群上运行的应用程序。在启动集群之后,您无法在集群中添加或删除应用程序。

  7. Security and access (安全与访问) 选择 EC2 key pair (EC2 密钥对)

  8. 选择 Create cluster (创建集群),启动集群并打开集群状态页面。

  9. 找到集群名称旁边的集群 Status (状态)。Amazon EMR 预制集群过程中,状态会从 Starting (正在启动) 变为 Running (正在运行) 再变为 Waiting (正在等待)。您可能需要选择右侧的刷新图标或刷新您的浏览器才能查看状态更新情况。

集群已启动且正在运行,并准备好接受工作时,集群状态会变更为 Waiting (正在等待)。有关读取集群摘要的更多信息,请参阅查看集群状态和详细信息。有关集群状态的信息,请参阅了解集群的生命周期

CLI
使用 Amazon CLI 启动安装有 Spark 的集群
  1. 创建 IAM 原定设置角色,然后您可以使用该角色通过以下命令创建集群。

    aws emr create-default-roles

    有关 create-default-roles 的更多信息,请参阅 Amazon CLI 命令参考

  2. 使用以下命令创建 Spark 集群。使用 --name 选项为您的集群输入一个名称,并使用 --ec2-attributes 选项指定您的 EC2 密钥对的名称。

    aws emr create-cluster \ --name "<My First EMR Cluster>" \ --release-label <emr-5.36.1> \ --applications Name=Spark \ --ec2-attributes KeyName=<myEMRKeyPairName> \ --instance-type m5.xlarge \ --instance-count 3 \ --use-default-roles

    请注意 --instance-type--instance-count--use-default-roles 的其它必需值。这些值是为通用型集群选择的。有关 create-cluster 的更多信息,请参阅 Amazon CLI 命令参考

    注意

    为了便于读取,包含 Linux 行继续符 (\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字符 (^)。

    将会看到类似下面的输出。输出将显示新集群的ClusterIdClusterArn。记下您的ClusterId。您可以使用ClusterId检查集群状态并提交工作。

    { "ClusterId": "myClusterId", "ClusterArn": "myClusterArn" }
  3. 使用以下命令检查集群状态。

    aws emr describe-cluster --cluster-id <myClusterId>

    您应看到类似下面的输出,可以使用Status对象适用于新集群。

    { "Cluster": { "Id": "myClusterId", "Name": "My First EMR Cluster", "Status": { "State": "STARTING", "StateChangeReason": { "Message": "Configuring cluster software" } } } }

    在 Amazon EMR 预置集群时,State值从STARTING变为RUNNING,再变为WAITING

集群已启动且正在运行,并准备好接受工作时,集群状态会变更为 WAITING。有关集群状态的信息,请参阅 了解集群的生命周期

第 2 步:管理 Amazon EMR 集群

将工作提交到 Amazon EMR

启动集群后,可以向正在运行的集群提交工作,从而处理分析数据。提交工作至 Amazon EMR 集群,作为 step (步骤)。步骤是由一个或多个任务组成的工作单位。例如,您可以提交一个步骤来计算值,或传输和处理数据。可以在创建集群时提交步骤,也可以将步骤提交到正在运行的集群。教程这部分内容中,您向正在运行的集群提交health_violations.py步骤。要了解有关步骤的更多信息,请参阅向集群提交工作

New console
使用新控制台以步骤的形式提交 Spark 应用程序
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择要提交工作的集群。集群状态必须为 Waiting (正在等待)

  3. 选择 Steps(步骤)选项卡,然后选择 Add step(添加步骤)。

  4. 根据以下准则配置步骤:

    • 对于 Type(类型),选择 Spark application(Spark 应用程序)。您应该会看到 Deploy Mode(部署模式)、Application location(应用程序位置)和 Spark-submit options(Spark-submit 选项)的其他字段。

    • 对于 Name(名称),输入新名称。如果您在集群中有很多步骤,命名每个步骤有助于您跟踪它们。

    • 对于 Deploy mode(部署模式),保留默认值 Cluster mode(集群模式)。有关 Spark 部署模式的更多信息,请参阅 Apache Spark 文档中的 Cluster mode overview(集群模式概览)。

    • 对于 Application location(应用程序位置),输入 Amazon S3 中 health_violations.py 脚本的位置,例如 s3://DOC-EXAMPLE-BUCKET/health_violations.py

    • Spark-submit options(Spark-submit 选项)字段留空。有关 spark-submit 选项的更多信息,请参阅 Launching applications with spark-submit(使用 spark-submit 启动应用程序)。

    • Arguments (参数) 字段中,输入以下参数和值:

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv 替换为您在 为 Amazon EMR 准备含有输入数据的应用程序 中准备的输入数据的 S3 存储桶 URI。

      DOC-EXAMPLE-BUCKET 替换为您为本教程创建的存储桶名称,并将 myOutputFolder 替换为您集群输出文件夹的名称。

    • 对于 Action if step fails(步骤失败时的操作),接受默认选项 Continue(继续)。这样,如果步骤失败,集群将继续运行。

  5. 选择 Add (添加) 以提交步骤。该步骤应出现在控制台中,状态为 Pending (待处理)

  6. 监控步骤状态。状态将从 Pending(待处理)变为 Running(正在运行)再变为 Completed(已完成)。要更新控制台中的状态,请选择 Filter(筛选条件)右侧的刷新图标。运行该脚本大约需要一分钟时间。步骤成功完成后,该状态将变为 Completed(已完成)。

Old console
使用旧控制台以步骤的形式提交 Spark 应用程序
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. Cluster List (集群列表) 中,选择集群名称。集群状态必须为 Waiting (正在等待)

  3. 选择 Steps (步骤),然后选择 Add step (添加步骤)

  4. 根据以下准则配置步骤:

    • 对于 Step type (步骤类型),选择 Spark application (Spark 应用程序)。您应该会看到 Deploy Mode (部署模式)Spark-submit options (Spark-submit 选项)Application location (应用程序位置) 的其它字段显示。

    • 对于 Name (名称),可以保留默认值或键入新名称。如果您在集群中有很多步骤,命名每个步骤有助于您跟踪它们。

    • 对于 Deploy mode (部署模式),保留默认值 Cluster (集群)。有关 Spark 部署模式的更多信息,请参阅 Apache Spark 文档中的集群模式概览

    • Spark-submit options (Spark-submit 选项) 字段留空。有关 spark-submit 选项的更多信息,请参阅使用 spark-submit 启动应用程序

    • 对于 Application location (应用程序位置),输入您的 health_violations.py 脚本在 Amazon S3 中的位置。例如,ss3://DOC-EXAMPLE-BUCKET/health_violations.py

    • Arguments (参数) 字段中,输入以下参数和值:

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv 替换为您在 为 Amazon EMR 准备含有输入数据的应用程序 中准备的输入数据的 S3 URI。

      DOC-EXAMPLE-BUCKET 替换为您为本教程创建的存储桶的名称,并将 myOutputFolder 替换为您的集群输出文件夹的名称。

    • 对于 Action on failure (出现故障时的操作),保留默认选项 Continue (继续),以使集群能够在步骤失败时继续运行。

  5. 选择 Add (添加) 以提交步骤。该步骤应出现在控制台中,状态为 Pending (待处理)

  6. 检查步骤状态从 Pending (待处理) 变为Running (正在运行) 再变为Completed (已完成)。要更新控制台中的状态,请选择 Filter (筛选条件) 右侧的刷新图标。运行该脚本大约需要一分钟时间。

当状态更改为 Completed (已完成) 时,您将知道该步骤已成功完成。

CLI
使用 Amazon CLI 以步骤的形式提交 Spark 应用程序
  1. 确保您拥有在 启动 Amazon EMR 集群 中启动的集群的 ClusterId。您还可以使用以下命令检索集群 ID。

    aws emr list-clusters --cluster-states WAITING
  2. 通过 add-steps 命令和 ClusterId,将 health_violations.py 以步骤的形式提交。

    • 您可以通过替换 "My Spark Application" 为您的步骤指定一个名称。在 Args 数组中,将 s3://DOC-EXAMPLE-BUCKET/health_violations.py 替换为您的 health_violations.py 应用程序的位置。

    • s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv 替换为您的 food_establishment_data.csv 数据集的 S3 位置。

    • s3://DOC-EXAMPLE-BUCKET/MyOutputFolder 替换为您指定存储桶的 S3 路径和您的集群输出文件夹的名称。

    • ActionOnFailure=CONTINUE 表示如果步骤失败,集群将继续运行。

    aws emr add-steps \ --cluster-id <myClusterId> \ --steps Type=Spark,Name="<My Spark Application>",ActionOnFailure=CONTINUE,Args=[<s3://DOC-EXAMPLE-BUCKET/health_violations.py>,--data_source,<s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv>,--output_uri,<s3://DOC-EXAMPLE-BUCKET/MyOutputFolder>]

    有关使用 CLI 提交步骤的更多信息,请参阅 Amazon CLI 命令参考

    提交步骤后,您应该会看到包含 StepIds 的列表的输出,类似于下列内容。由于您提交了一个步骤,因此列表中只有一个 ID。复制步骤 ID。使用步骤 ID,检查步骤状态。

    { "StepIds": [ "s-1XXXXXXXXXXA" ] }
  3. 使用带有 describe-step 命令的步骤,查询步骤的状态。

    aws emr describe-step --cluster-id <myClusterId> --step-id <s-1XXXXXXXXXXA>

    您应该会看到包含步骤相关内容的输出,类似于以下内容。

    { "Step": { "Id": "s-1XXXXXXXXXXA", "Name": "My Spark Application", "Config": { "Jar": "command-runner.jar", "Properties": {}, "Args": [ "spark-submit", "s3://DOC-EXAMPLE-BUCKET/health_violations.py", "--data_source", "s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv", "--output_uri", "s3://DOC-EXAMPLE-BUCKET/myOutputFolder" ] }, "ActionOnFailure": "CONTINUE", "Status": { "State": "COMPLETED" } } }

    随着步骤的运行,步骤的 StatePENDING 变为 RUNNING,再变为 COMPLETED。运行该步骤大约需要一分钟,因此您可能需要多次检查状态。

State 更改为 COMPLETED 时,您将知道该步骤已成功。

有关步骤生命周期的更多信息,请参阅运行步骤以处理数据

查看结果

步骤成功运行后,您可以在 Amazon S3 输出文件夹中查看其输出结果。

查看 health_violations.py 的结果
  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择 Bucket name (存储桶名称),然后选择您在提交步骤时指定的输出文件夹。例如,选择 DOC-EXAMPLE-BUCKET 然后选择 myOutputFolder

  3. 验证以下项目是否位于输出文件夹中:

    • 称为 _SUCCESS 的小格式对象。

    • 以前缀 part- 开头的 CSV 文件,包含结果。

  4. 选择包含结果的对象,然后选择 Download (下载) 以将结果保存到本地文件系统。

  5. 在选定编辑器中打开结果。输出文件列出了红色违规最多的十大食品企业。输出文件还显示每个机构的红色违规总数。

    以下是 health_violations.py 结果的示例。

    name, total_red_violations SUBWAY, 322 T-MOBILE PARK, 315 WHOLE FOODS MARKET, 299 PCC COMMUNITY MARKETS, 251 TACO TIME, 240 MCDONALD'S, 177 THAI GINGER, 153 SAFEWAY INC #1508, 143 TAQUERIA EL RINCONSITO, 134 HIMITSU TERIYAKI, 128

有关 Amazon EMR 集群输出的更多信息,请参阅配置输出位置

当您使用 Amazon EMR 时,您可能希望连接到正在运行的集群,以读取日志文件、调试集群或使用类似于 Spark shell 的 CLI 工具。通过 Amazon EMR,您可以使用 Secure Shell(SSH)协议连接到集群。本部分介绍如何配置 SSH、集群连接以及查看 Spark 的日志文件。有关连接到集群的更多信息,请参阅 对 Amazon EMR 集群节点进行身份验证

授权与集群的 SSH 连接

在连接到集群之前,您需要修改集群安全组以授权入站 SSH 连接。Amazon EC2 安全组充当虚拟防火墙以控制至您的集群的入站和出站流量。为本教程创建集群时,Amazon EMR 代表您创建了以下安全组:

ElasticMapReduce-master

与主节点关联的默认 Amazon EMR 托管安全组。在 Amazon EMR 集群中,主节点是管理集群的 Amazon EC2 实例。

ElasticMapReduce-slave

与核心和任务节点关联的默认安全组。

New console
使用新控制台允许主要安全组的可信来源进行 SSH 访问

要编辑安全组,您必须具有权限来管理集群所在 VPC 的安全组。有关更多信息,请参阅《IAM 用户指南》中的更改用户的权限和允许管理 EC2 安全组的示例策略

  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择要更新的集群。集群详细信息页面随即打开。应预先选择此页面上的 Properties(属性)选项卡。

  3. Properties(属性)选项卡的 Networking(联网)下,选择 EC2 security groups (firewall) [EC2 安全组(防火墙)] 旁边的箭头以展开此部分。在 Primary node(主节点)下,选择安全组链接。完成以下步骤后,可以选择返回此步骤,选择 Core and task nodes(核心节点和任务节点),然后重复以下步骤以允许 SSH 客户端访问核心节点和任务节点。

  4. 此操作将打开 EC2 控制台。选择 Inbound rules(入站规则)选项卡,然后选择 Edit inbound rules(编辑入站规则)

  5. 通过以下设置检查允许公有访问的入站规则。如果存在,请选择 Delete (删除) 以将其删除。

    • Type

      SSH

    • 端口

      22

    • 自定义 0.0.0.0/0

    警告

    2020 年 12 月之前,ElasticMapRemoe-Master 安全组有一个预先配置的规则,允许来自所有来源的端口 22 入站流量。此规则的创建可以简化与主节点 (master node) 的初始 SSH 客户端连接。我们强烈建议您移除此入站规则,限制流量进入可信来源。

  6. 滚动到规则列表的底部并选择 Add Rule (添加规则)

  7. 对于Type (类型),选择 SSH。选择 SSH,自动为 Protocol (协议) 输入 TCP,为 Port Range (端口范围) 输入 22

  8. 针对源,选择 My IP(我的 IP),自动添加您的 IP 地址作为源地址。您也可以添加一系列 Custom (自定义) 可信客户端 IP 地址,或创建针对其他客户端的其他规则。许多网络环境动态分配 IP 地址,因此您以后可能需要更新受信任客户端的 IP 地址。

  9. 选择 Save(保存)。

  10. 或者,从列表中选择 Core and task nodes(核心节点和任务节点)并重复上述步骤,以允许 SSH 客户端访问核心节点和任务节点。

Old console
使用旧控制台向可信源 SSH 授予主要安全组访问权限

要编辑安全组,您必须具有权限来管理集群所在 VPC 的安全组。有关更多信息,请参阅《IAM 用户指南》中的更改用户的权限和允许管理 EC2 安全组的示例策略

  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 选择 Clusters (集群)。选择您要修改的集群的 Name(名称)

  3. Security and access (安全与访问) 下,选择 Security groups for Master (主节点的安全组) 链接。

  4. 从列表中选择 ElasticMapReduce-master

  5. 选择 Inbound rules(入站规则)选项卡,然后选择 Edit inbound rules(编辑入站规则)

  6. 通过以下设置检查允许公有访问的入站规则。如果存在,请选择 Delete (删除) 以将其删除。

    • Type

      SSH

    • 端口

      22

    • 自定义 0.0.0.0/0

    警告

    2020 年 12 月之前,ElasticMapRemoe-Master 安全组有一个预先配置的规则,允许来自所有来源的端口 22 入站流量。创建此规则可简化与主节点的初始 SSH 客户端连接。我们强烈建议您移除此入站规则,限制流量进入可信来源。

  7. 滚动到规则列表的底部并选择 Add Rule (添加规则)

  8. 对于Type (类型),选择 SSH

    选择 SSH,自动为 Protocol (协议) 输入 TCP,为 Port Range (端口范围) 输入 22

  9. 针对源,选择 My IP(我的 IP),自动添加您的 IP 地址作为源地址。您也可以添加一系列 Custom (自定义) 可信客户端 IP 地址,或创建针对其他客户端的其他规则。许多网络环境动态分配 IP 地址,因此您以后可能需要更新受信任客户端的 IP 地址。

  10. 选择 Save(保存)。

  11. 或者,从列表中选择 ElasticMapReduce-slave 并重复上述步骤,以允许对核心和任务节点执行 SSH 客户端访问。

使用 Amazon CLI 连接到您的集群。

无论您的操作系统如何,都可以使用 Amazon CLI 创建 SSH 连接到集群。

要使用 Amazon CLI 连接到集群并查看日志文件
  1. 使用以下命令开启与集群的 SSH 连接。将 <mykeypair.key> 替换为密钥对的完整路径和文件名。例如,C:\Users\<username>\.ssh\mykeypair.pem

    aws emr ssh --cluster-id <j-2AL4XXXXXX5T9> --key-pair-file <~/mykeypair.key>
  2. 导航到 /mnt/var/log/spark 访问集群主节点 (master node) 上的 Spark 日志。然后查看该位置的文件。有关主节点 (master node) 上其他日志文件的列表,请参阅 查看主节点上的日志文件

    cd /mnt/var/log/spark ls

第 3 步:清除 Amazon EMR 资源

终止集群

现在,您已向集群提交工作并查看了 PySpark 应用程序的结果,因此可以终止集群。终止集群会停止所有集群关联的 Amazon EMR 费用和 Amazon EC2 实例。

在终止集群后,Amazon EMR 将有关集群的元数据免费保留两个月。归档元数据有助于为新任务克隆集群 (clone the cluster) 或为了参考的目的重新访问集群配置。元数据包括集群写入 S3 的数据,或存储在集群上的 HDFS 中的数据。

注意

Amazon EMR 控制台不允许您在关闭集群后从列表视图中终止集群。当 Amazon EMR 清除其元数据时,终止的集群将从控制台消失。

New console
使用新控制台终止集群
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 选择 Clusters(集群),然后选择要终止的集群。

  3. Actions(操作)下拉菜单下,选择 Terminate cluster(终止集群)。

  4. 在对话框中选择 Terminate(终止)。根据集群配置,终止可能需要 5 至 10 分钟。有关如何终止 Amazon EMR 集群的更多信息,请参阅 终止集群

Old console
使用旧控制台终止集群
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 选择 Clusters (集群),然后选择要终止的集群。例如,我的第一个 EMR 集群

  3. 选择 Terminate (终止) 以打开 Terminate cluster (终止集群) 提示。

  4. 在打开提示中选择Terminate (终止)。根据集群配置,终止可能需要 5 至 10 分钟。有关终止 Amazon EMR 集群的更多信息,请参阅终止集群

    注意

    如果您已严格遵循本教程,则终止保护应已关闭。集群终止保护防止意外终止。如果终止保护处于开启状态,则在终止集群之前,您将看到更改此设置的提示。选择 Change (更改),然后选择 Off (关闭)

CLI
使用 Amazon CLI 终止集群
  1. 使用以下命令启动集群终止过程。将 <myClusterId> 替换为示例集群 ID。命令不会返回输出。

    aws emr terminate-clusters --cluster-ids <myClusterId>
  2. 要检查集群终止过程是否正在进行,请使用以下命令检查集群状态。

    aws emr describe-cluster --cluster-id <myClusterId>

    以下是 JSON 格式的示例输出。集群 Status 应从 TERMINATING 更改为 TERMINATED。终止可能需要 5 到 10 分钟,具体取决于集群配置。有关终止 Amazon EMR 集群的更多信息,请参阅终止集群

    { "Cluster": { "Id": "j-xxxxxxxxxxxxx", "Name": "My Cluster Name", "Status": { "State": "TERMINATED", "StateChangeReason": { "Code": "USER_REQUEST", "Message": "Terminated by user request" } } } }

删除 S3 资源

为避免产生额外费用,您应删除 Amazon S3 存储桶。删除存储桶意味着将删除本教程中的所有 Amazon S3 资源。您的存储桶应包含:

  • PySpark 脚本

  • 输入数据集

  • 您的输出结果文件夹

  • 您的日志文件夹

如果您将 PySpark 脚本或输出保存在不同位置,您可能需要采取额外的步骤来删除存储的文件。

注意

在删除存储桶之前,必须终止集群。否则,可能不允许您清空存储桶。

要删除存储桶,请参照《Amazon Simple Storage Service 用户指南》如何删除 S3 存储桶?的说明。

后续步骤

您现在已经从头到尾启动了第一个 Amazon EMR 集群。您还完成了基本的 EMR 任务,例如:准备和提交大数据应用程序、查看结果以及终止集群。

可以使用以下主题了解如何自定义 Amazon EMR 工作流程的更多信息。

了解 Amazon EMR 的大数据应用程序

《Amazon EMR 版本指南》中发现并比较您可以在集群上安装的大数据应用程序。《发布指南 (Release Guide)》详细介绍了每个 EMR 发布版本,并包括使用 Amazon EMR 上的 Spark 和 Hadoop 等框架的提示。

规划集群硬件、联网和安全

本教程中,您将创建一个简单的 EMR 集群,而无需配置高级选项。高级选项允许您指定 Amazon EC2 实例类型、集群联网和集群安全性。有关规划和启动满足您要求的集群的更多信息,请参阅计划和配置集群Amazon EMR 中的安全性

管理集群

深入了解如何在管理集群中运行的集群。要管理集群,您可以连接到集群、调试步骤以及跟踪集群活动和健康状况。您还可以通过 EMR 托管扩展,调整集群资源以响应工作负载需求。

使用不同的界面

除了 Amazon EMR 控制台之外,您还可以使用 Amazon Command Line Interface、Web 服务 API 或众多受支持的 Amazon SDK 之一来管理 Amazon EMR。有关更多信息,请参阅管理界面

您可以通过多种方式与安装在 Amazon EMR 集群上的应用程序进行交互。某些应用程序(如 Apache Hadoop)会发布您可以查看的 Web 界面。有关更多信息,请参阅查看 Amazon EMR 集群上托管的 Web 界面

浏览 EMR 技术博客

有关新的 Amazon EMR 功能的示例演练和深入的技术讨论,请参阅Amazon大数据博客