一般性问题

问:什么是 Amazon EMR?

Amazon EMR 是业界领先的云大数据平台,可用于使用 Apache Spark、Apache Hive 和 Presto 等开源框架进行数据处理、交互式分析和机器学习。

问:为什么应该使用 Amazon EMR?

借助 Amazon EMR,您可以专注于转换和分析数据,而不必担心管理计算容量或开源应用程序,从而为您节省成本。使用 EMR,您可以立即在 Amazon EC2 上根据自己的喜好预置任意数量的容量,并设置扩缩规则来管理不断变化的计算需求。您可以设置 CloudWatch 警报以告知您基础设施中的更改并立即采取措施。如果您使用 Kubernetes,还可以使用 EMR 将工作负载提交到 Amazon EKS 集群。无论您使用 EC2 还是 EKS,您都可以从 EMR 优化的运行时中受益,这些运行时可以加快分析速度并节省时间和成本。

问:如何部署和管理 Amazon EMR?

您可以使用 Amazon EC2、Amazon Elastic Kubernetes Service (EKS) 将您的工作负载部署到 EMR。

问:如何开始使用 Amazon EMR?

要注册 Amazon EMR,请单击 Amazon EMR 详细信息页面 (https://www.amazonaws.cn/en/elasticmapreduce/) 上的“立即注册”按钮。您必须注册 Amazon EC2 和 Amazon S3 才能访问 Amazon EMR;如果您尚未注册这些服务,系统将在 Amazon EMR 注册过程中提示您注册。注册后,请参阅 Amazon EMR 文档,其中包含了入门指南 – 开始使用服务的地方。

问:Amazon EMR 的可靠性如何?

请参阅 服务等级协议

开发和调试

问:使用命令行工具或 API 与亚马逊云科技管理控制台相比有什么优势?

命令行工具或 API 提供了以编程方式启动和监控集群运行进度的能力,以围绕集群创建额外的自定义功能(例如具有多个处理步骤、安排、工作流或监控的序列),或构建适用于其他 Amazon EMR 客户的增值工具或应用程序。相比之下,亚马逊云科技管理控制台提供了一个易于使用的图形界面,用于直接从 Web 浏览器启动和监控集群。

问:我是否可以向已在运行的集群添加步骤?

可以。任务运行后,您可以选择通过 AddJobFlowSteps API 向其添加更多步骤。AddJobFlowSteps API 将向当前步骤序列的末尾添加新步骤。您可能需要使用此 API 在集群中实现条件逻辑或进行调试。

问:我的集群完成后能否会收到通知?

您可以注册 Amazon SNS,并在完成后将集群发布到您的 SNS 主题。您还可以在亚马逊云科技管理控制台上查看集群进度,也可以使用命令行、开发工具包或 API 获取集群的状态。

问:我是否可以在步骤完成后终止集群?

可以。通过启用自动终止标志,您可以在所有步骤完成后自动终止集群。

问:Amazon EMR 支持哪些操作系统版本?

Amazon EMR 5.30.0 及更高版本,Amazon EMR 6.x 系列基于 Amazon Linux 2。您还可以指定基于 Amazon Linux 2 创建的自定义 AMI。这样一来,您几乎可以为任何应用程序执行复杂的预配置。有关更多信息,请参阅使用自定义 AMI

问:Amazon EMR 是否支持第三方软件包?

是。 您可以使用引导操作在集群上安装第三方软件包。您还可以使用 Hadoop 分布式缓存机制上载静态编译的可执行文件。EMR 6.x 支持 Hadoop 3,通过它,YARN NodeManager 可以直接在 EMR 集群主机或 Docker 容器内启动容器。请查看我们的文档以了解更多信息。

EMR Notebooks

问:什么是 EMR Notebooks?

EMR Notebooks 基于 Jupyter Notebook 提供托管式环境,使数据科学家、分析师和开发人员可以使用 EMR 集群来准备和可视化数据、与同事协作、构建应用程序以及执行交互式分析。尽管我们建议新客户使用 EMR Studio,但仍然支持 EMR Notebooks 以实现兼容性。

问:我可以使用 EMR Notebooks 做什么?

您可以使用 EMR Notebooks 轻松构建 Apache Spark 应用程序并在 EMR 集群上运行交互式查询。多个用户可以直接从控制台创建无服务器笔记本,将它们连接到现有的共享 EMR 集群,或直接从控制台预置集群,然后立即开始试用 Spark。您可以分离笔记本,然后将它们重新连接到新集群。笔记本会自动保存到 S3 存储桶中,您可以从控制台检索保存的笔记本以恢复工作。EMR Notebooks 与 Anaconda 存储库中的库预先打包在一起,从而使您可以在笔记本代码中导入和使用这些库,并使用它们来处理数据和可视化结果。此外,EMR Notebooks 还集成了 Spark 监控功能,您可以使用这些功能在笔记本中监控 Spark 任务的进度和调试代码。

问:如何开始使用 EMR Notebooks?

要开始使用 EMR Notebooks,请打开 EMR 控制台,然后在导航窗格中选择 Notebooks。在那里,只需选择 Create Notebook(创建笔记本),输入笔记本的名称,选择 EMR 集群或立即创建一个新集群,为笔记本提供要使用的服务角色,选择要在其中保存笔记本文件的 S3 存储桶,然后单击 Create Notebook(创建笔记本)。当笔记本显示 Ready(就绪)状态后,选择 Open(打开)以启动笔记本编辑器。

问:EMR Notebooks 支持哪些 EMR 发布版本?

EMR Notebooks 可以连接到运行 EMR 5.18.0 版或更高版本的 EMR 集群。

问:使用 EMR Notebooks 的成本是多少?

EMR Notebooks 免费提供给您。将像往常一样针对账户中附加的 EMR 集群向您收费。您可以通过访问 https://www.amazonaws.cn/en/elasticmapreduce/pricing/ 查找有关集群定价的更多信息

管理数据

问:如何将我的数据导入 Amazon S3?

Amazon EMR 提供了多种将数据导入集群的方法。最常见的方法是将数据上载到 Amazon S3,然后使用 Amazon EMR 的内置功能将数据加载到集群中。您可以使用 Hadoop 的分布式缓存功能将文件从分布式文件系统传输到本地文件系统。 

问:如何获取已终止集群的日志?

Hadoop 系统日志和用户日志将放置在创建集群时指定的 Amazon S3 存储桶中。 持久应用程序 UI 在集群外运行,Spark History Server、Tez UI 和 YARN 时间表服务器日志在应用程序终止后的 30 天内可用。

问:您会压缩日志吗?

不会。目前,Amazon EMR 不会在将日志移动到 Amazon S3 时对其进行压缩。

问:我是否可以从互联网或 Amazon S3 以外的其他地方加载数据?

是。您可以使用 Amazon Direct Connect 建立与亚马逊云科技的私有专用网络连接。如果您有大量数据,则可以使用 Amazon Import/Export。

计费

问:Amazon EMR 能否估计处理我的输入数据需要多长时间?

不能。由于每个集群和输入数据不同,我们无法估计您的任务持续时间。

问:Amazon EMR 的费用是多少?

Amazon EMR 定价简单并且可预测:您需要按照每秒使用的每秒费率付费,最低收费时长为 1 分钟。包括 Amazon EC2 在内的其他亚马逊云科技的使用与 Amazon EMR 分开计费。

问:我的 Amazon EMR 集群的账单周期怎么计算?

当集群准备好执行步骤时,Amazon EMR 计费开始。当您请求关闭集群时,Amazon EMR 计费结束。有关 Amazon EC2 何时开始和结束计费的更多详细信息,请参阅 Amazon EC2 计费常见问题

问:我可以在何处跟踪 Amazon EMR、Amazon EC2 和 Amazon S3 使用量?

您可以在账单与成本管理控制台中跟踪您的使用量。

问:如何计算控制台上显示的标准化实例小时数?

在亚马逊云科技管理控制台上,每个集群都有一个标准化实例小时数列,其中显示集群已使用的大致计算小时数,四舍五入到最接近的小时数。

标准化实例小时数是基于 m1.small 1 小时使用量 = 1 小时标准化计算时间的标准得出的计算小时数。您可以查看我们的文档以查看实例系列中不同大小的列表以及每小时相应的标准化因数。

例如,如果您运行一个 10 节点 r3.8xlarge 集群一个小时,控制台上显示的标准化实例小时总数将为 640(10 [节点数] x 64 [标准化因数] x 1 [集群运行的小时数] = 640)。

这是一个大概的数字,不应用于计费目的。请参阅账单与成本管理控制台了解可计费的 Amazon EMR 使用量。

问:Amazon EMR 是否支持 Amazon EC2 按需实例、Spot 实例和预留实例?

是。Amazon EMR 无缝支持按需实例、Spot 实例和预留实例。单击此处了解有关 Amazon EC2 预留实例的更多信息。单击此处了解有关 Amazon EC2 Spot 实例的更多信息。单击此处了解有关 Amazon EC2 容量预留的更多信息。

安全性与数据访问控制

问:如何防止他人在集群执行期间查看我的数据?

Amazon EMR 在两个 Amazon EC2 安全组中启动您的实例,一个用于主节点,另一个用于其他集群节点。主安全组开放了一个用于与服务进行通信的端口。它还打开了一个 SSH 端口,使您能够使用启动时指定的密钥 SSH 连接到实例。其他节点在单独的安全组中启动,该安全组仅允许与主实例进行交互。默认情况下,两个安全组都设置为不允许从外部来源(包括属于其他客户的 Amazon EC2 实例)进行访问。由于这些是您账户中的安全组,因此您可以使用标准的 EC2 工具或控制面板重新配置它们。 单击此处了解有关 EC2 安全组的更多信息。此外,如果规则允许在您未添加到异常列表中的任何端口上进行公共访问,您可以在每个区域中配置 Amazon EMR 阻止公共访问,以防止创建集群。

问:我的数据的安全性如何?

Amazon S3 提供身份验证机制,以确保存储的数据不会受到未经授权的访问。除非上载数据的客户另有说明,否则只有该客户才能访问数据。Amazon EMR 客户还可以选择使用 HTTPS 协议将数据发送到 Amazon S3,以实现安全传输。此外,Amazon EMR 始终使用 HTTPS 在 Amazon S3 与 Amazon EC2 之间发送数据。为了提高安全性,客户可以在将输入数据上载到 Amazon S3 之前对其进行加密(使用任何常见的数据加密工具);然后,当 Amazon EMR 从 Amazon S3 获取数据时,他们需要在集群的开头添加解密步骤。

问:是否可以获取对我的账户发起的所有 EMR API 调用的历史记录,以进行安全或合规性审计?

是。Amazon CloudTrail 是一项 Web 服务,用于记录账户的 Amazon API 调用,并向您发送日志文件。由 CloudTrail 生成的 Amazon API 调用历史记录可用于安全分析、资源变更跟踪以及合规性审计。在 Amazon CloudTrail 详细信息页面了解更多有关 CloudTrail 的信息,或者通过 CloudTrail 的 Amazon 管理控制台将它打开。

问:如何控制哪些 EMR 用户可以在 Amazon S3 中进行访问?

默认情况下,Amazon EMR 应用程序进程在调用其他 Amazon 服务时使用 EC2 实例配置文件。对于多租户集群,Amazon EMR 提供了三种选项来管理用户对 Amazon S3 数据的访问。

  1. 通过与 Amazon Lake Formation 的集成,您可以在 Amazon Lake Formation 中定义和管理精细的授权策略,以访问 Amazon Glue 数据目录中的数据库、表和列。您可以对通过 Amazon EMR Notebooks 和 Apache Zeppelin 提交的任务执行授权策略以实现交互式 EMR Spark 工作负载,并将审计事件发送至 Amazon CloudTrail。通过启用此集成,您还可以从与安全断言标记语言 (SAML) 2.0 兼容的企业身份系统启用到 EMR Notebooks 或 Apache Zeppelin 的联合单点登录。
  2. 通过与 Apache Ranger 的本机集成,您可以设置新的或现有的 Apache Ranger 服务器,以便为用户通过 Hive Metastore 访问 Amazon S3 数据的数据库、表和列定义和管理精细的授权策略。 您可以为 Hive 设置表、列和行级授权,为 Spark 设置表和列级授权,以及为 Amazon S3 设置前缀和对象级授权。Amazon EMR 会自动在集群上安装和配置相应的 Apache Ranger 插件。这些 Ranger 插件与授权策略的策略管理服务器同步,强制实施数据访问控制,并将审计事件发送到 Amazon CloudWatch Logs

区域和可用区

问:Amazon EMR 如何利用可用区?

Amazon EMR 在同一 Amazon EC2 可用区中启动给定集群的所有节点。在同一个可用区中运行集群可以提高任务流的性能。默认情况下,Amazon EMR 会选择可用资源最多的可用区来运行集群。但是,如果需要,您可以指定另一个可用区。您还可以选择针对价格最低的按需实例、最佳 Spot 容量来优化分配,或使用按需容量预留。

问:我应该选择哪个区域来运行我的集群?

创建集群时,通常应选择数据所在的区域。

部署选项

Amazon EC2 上的 Amazon EMR

问:什么是 Amazon EMR 集群?
集群是 Amazon Elastic Compute Cloud (Amazon EC2) 实例的集合。集群中的每个实例都称为节点,在集群中具有一个角色,称为节点类型。Amazon EMR 还在每种节点类型上安装不同的软件组件,在分布式应用程序(如 Apache Hadoop)中为每个节点赋予一个角色。每个集群都有一个以“j-”开头的唯一标识符。

问:集群中有哪些节点类型?
一个 Amazon EMR 集群具有三种节点类型:

  1. 主节点:通过运行软件组件来管理集群的节点,以协调数据和任务在其他节点之间的分配以进行处理。主节点跟踪任务的状态并监控集群的运行状况。每个集群都有一个主节点,并且可以创建只包含主节点的单节点集群。
  2. 核心节点:具有运行任务并将数据存储在集群上的 Hadoop 分布式文件系统 (HDFS) 中的软件组件的节点。多节点集群至少有一个核心节点。
  3. 任务节点:具有仅运行任务而不将数据存储在 HDFS 中的软件组件的节点。任务节点是可选的。

问:什么是集群步骤?
集群步骤是用户定义的处理单元,大致映射到一种操纵数据的算法。一个步骤是以 Java jar 或者在 Java、Ruby、Perl、Python、PHP、R 或 C++ 中编写的流式处理程序实施的 Hadoop MapReduce 应用程序。例如,要计算单词在文档中出现的频率并按计数排序对它们进行输出,第一步是用一个 MapReduce 应用程序来计算每个单词的出现次数,第二步是用一个 MapReduce 应用程序基于计数对第一步提供的输出进行排序。

问:集群状态有什么不同?
STARTING(开启)– 集群通过配置 EC2 实例开启。
BOOTSTRAPPING(引导启动)– 正在集群上执行引导操作。
RUNNING(正在运行)– 集群的一个步骤当前正在运行。
WAITING(等待中)– 集群当前处于活动状态,但没有要运行的步骤。
TERMINATING(正在终止)– 集群正在关闭中。
TERMINATED(已终止)– 集群已关闭,没有出现错误。
TERMINATED_WITH_ERRORS – 集群已关闭,存在错误。

问:有哪些不同的步骤状态?
PENDING(待处理)– 步骤正在等待运行。
RUNNING(正在运行)– 步骤当前正在运行。
COMPLETED(已完成)– 步骤已成功完成。
CANCELLED(已取消)– 步骤在运行前已被取消,因为之前的步骤失败或者集群在可以运行前被终止。
FAILED(失败)– 步骤在运行时失败。

启动集群

问:如何启动集群?
您可以通过亚马逊云科技管理控制台填写简单的集群申请表来启动集群。在申请表中,您可以指定集群的名称、输入数据在 Amazon S3 中的位置、处理应用程序、所需的数据输出位置以及要使用的 Amazon EC2 实例的数量和类型。或者,您可以指定存储集群日志文件的位置,以及在集群运行时登录集群所用的 SSH 密钥。或者,您可以使用 RunJobFlow API 或使用命令行工具中的“create”命令启动集群。有关使用 EMR Studio 启动集群的信息,请参阅上面的 EMR Studio 部分。

问:如何终止集群?
您可以随时通过亚马逊云科技管理控制台终止集群,方法是选择集群并单击“Terminate”(终止)按钮。或者,您可以使用 TerminateJobFlows API。如果您终止正在运行的集群,任何尚未保存到 Amazon S3 的结果都将丢失,并且所有 Amazon EC2 实例都将关闭。

问:Amazon EMR 是否同时支持多个集群?
您可以根据需要启动任意数量的集群。开始使用时,所有集群中的实例数限制为 20 个。如果需要运行更多实例,请填写 Amazon EC2 实例申请表。提高 Amazon EC2 限制后,新限制将自动应用于您的 Amazon EMR 集群。

管理集群

问:Amazon EMR 如何使用 Amazon EC2 和 Amazon S3?

您可以将输入数据和数据处理应用程序上载到 Amazon S3。然后,Amazon EMR 会启动您指定的很多 Amazon EC2 实例。该服务开始集群执行,同时使用 S3 URI 方案将输入数据从 Amazon S3 提取到启动的 Amazon EC2 实例中。集群完成后,Amazon EMR 会将输出数据传输到 Amazon S3,然后您可以在其中检索输出数据或将其用作另一个集群中的输入。

问:如何在 Amazon EMR 中进行计算?

Amazon EMR 使用 Hadoop 数据处理引擎来执行在 MapReduce 编程模型中实现的计算。客户根据 map() 和 reduce() 函数实现他们的算法。该服务启动客户指定数量的 Amazon EC2 实例,包括一个主节点和多个其他节点。Amazon EMR 在这些实例上运行 Hadoop 软件。主节点将输入数据划分为数据块,然后将数据块的处理分配给其他节点。然后,每个节点对已分配的数据运行 map 函数,生成中间数据。接着,对中间数据进行排序和分区,然后将其发送到在本地节点上应用 reducer 函数的进程。最后,reducer 任务的输出被收集在文件中。单个“集群”可能包含一系列此类 MapReduce 步骤。

问:Amazon EMR 支持哪些 Amazon EC2 实例类型?

有关最新可用实例类型和每个区域的定价的详细信息,请参阅 EMR 定价页面

问:运行我的集群需要多长时间?

集群的运行时间取决于多个因素,包括集群的类型、输入数据的量以及为集群选择的 Amazon EC2 实例的数量和类型。

问:如果集群中的主节点出现故障,Amazon EMR 是否能够恢复它?

是。您可以启动带有三个主节点的 EMR 集群(版本 5.23 或更高版本),并为 YARN 资源管理器、HDFS 名称节点、Spark、Hive 和 Ganglia 等应用程序实现高可用性。如果主节点出现故障或者资源管理器或名称节点等关键进程崩溃,Amazon EMR 会自动故障转移到备用主节点。由于主节点不是潜在的单点故障,因此您可以运行长期 EMR 集群而不发生中断。在进行故障转移时,Amazon EMR 会自动使用具有相同配置和引导操作的新主节点替换发生故障的主节点。 

问:如果集群中的另一个节点出现故障,Amazon EMR 是否能从中进行恢复?

是。Amazon EMR 对节点故障具有容错能力,并在节点出现故障时继续执行任务。当核心节点出现故障时,Amazon EMR 还会预置一个新节点。但是,如果集群中的所有节点都丢失,Amazon EMR 将不会替换节点。

问:我是否可以通过 SSH 连接我的集群节点?

是。您可以通过 SSH 连接到集群节点,然后直接从那里执行 Hadoop 命令。如果需要通过 SSH 连接到特定节点,则必须先通过 SSH 连接到主节点,然后再通过 SSH 连接到所需的节点。

问:什么是 Amazon EMR 引导操作?

引导操作是 Amazon EMR 中的一项功能,它为用户提供了一种在执行集群之前运行自定义设置的方法。引导操作可用于在运行集群之前安装软件或配置实例。您可以在 EMR 的开发人员指南中阅读有关引导操作的更多信息。

问:如何使用引导操作?

您可以使用已在集群实例上安装的任何语言编写引导操作脚本,包括 Bash、Perl、Python、Ruby、C++ 或 Java。有几个预定义的引导操作可用。编写脚本后,您需要将其上载到 Amazon S3,并在启动集群时引用其位置。有关如何使用引导操作的详细信息,请参阅《开发人员指南》。

问:如何为集群配置 Hadoop 设置?

EMR 原定设置 Hadoop 配置适用于大多数工作负载。但是,根据集群的特定内存和处理要求,调整这些设置可能很合适。例如,如果您的集群任务需要占用大量内存,则您可以选择在每个核心中使用更少的任务并减少任务跟踪器堆大小。在这种情况下,可以使用预定义的引导操作在启动时配置集群。有关配置详细信息和使用说明,请参阅《开发人员指南》中的配置需要占用大量内存的引导操作。另外还提供了一个预定义的引导操作,使您能够根据自己选择的任何值自定义集群设置。有关使用说明,请参阅《开发人员指南》中的配置 Hadoop 引导操作

问:我是否可以修改正在运行的集群中的节点数量?

是。节点可以有两种类型:(1) 核心节点,它们都使用 Hadoop 分布式文件系统 (HDFS) 托管持久性数据并运行 Hadoop 任务;(2) 只运行 Hadoop 任务的任务节点。当集群运行时,您可以增加核心节点的数量,也可以增加或减少任务节点的数量。此操作可以通过 API、Java 开发工具包或命令行客户端来完成。有关如何修改正在运行的集群大小的详细信息,请参阅《开发人员指南》中的调整正在运行的集群的大小部分。您还可以使用 EMR 托管式扩缩。

问:我想在什么时候使用核心节点而不是任务节点?

由于核心节点在 HDFS 中托管持久性数据且无法删除,因此在集群完成之前,应为所需的容量预留核心节点。由于任务节点可以添加或删除且不包含 HDFS,因此它们非常适合仅临时需要的容量。您可以在 Spot 实例上启动任务实例机群以增加容量,同时最大限度地降低成本。

问:为什么我要修改正在运行的集群中的节点数量?

在几种情况下,您可能需要修改正在运行的集群中的节点数量。如果集群的运行速度慢于预期,或者时间要求发生变化,则可以增加核心节点的数量来提高集群性能。如果集群的不同阶段有不同的容量需求,您可以从少量核心节点开始,然后增加或减少任务节点的数量,以满足集群不同的容量需求。 您还可以使用 EMR 托管式扩缩。

问:我是否能够自动修改集群步骤之间的节点数量?

是。您可以在工作流中包含一个预定义的步骤,该步骤会在已知具有不同容量需求的步骤之间自动调整集群的大小。由于所有步骤都保证按顺序运行,因此您可以设置将执行给定集群步骤的节点数。

问:如何允许其他 IAM 用户访问我的集群?

要在 EMR CLI 中创建对所有 IAM 用户都可见的新集群:请在创建集群时添加 --visible-to-all-users 标记。例如:elastic-mapreduce --create --visible-to-all-users。在管理控制台中,只需在创建集群向导的 Advanced Options(高级选项)窗格中选择“Visible to all IAM Users”(对所有 IAM 用户可见)。

要使现有集群对所有 IAM 用户可见,您必须使用 EMR CLI。使用 --set-visible-to-all-users 并指定集群标识符。例如:elastic-mapreduce --set-visible-to-all-users true --jobflow j-xxxxxxx。该操作只能由集群的创建者完成。

要了解更多信息,请参阅《EMR 开发人员指南》的配置用户权限部分。

标记集群

问:我可以标记哪些 Amazon EMR 资源?

您可以向活动的 Amazon EMR 集群添加标签。Amazon EMR 集群由 Amazon EC2 实例组成,添加到 Amazon EMR 集群的标签将传播到该集群中每个活动的 Amazon EC2 实例。您不能在已终止的集群或已终止的属于活动集群一部分的 Amazon EC2 实例中添加、编辑或删除标签。

问:Amazon EMR 标记是否支持 IAM 用户的基于资源的权限?

否,Amazon EMR 不支持按标签划分的基于资源的权限。但是,请务必注意,传播到 Amazon EC2 实例的标签与普通 Amazon EC2 标签的行为方式相同。因此,如果 Amazon EMR 传播的标签符合该策略中的条件,则适用于 Amazon EC2 的 IAM 策略将对这些标签采取行动。

问:我可以向一个资源添加多少个标签?

您最多可以在一个 Amazon EMR 集群上添加十个标签。

问:集群上的 Amazon EMR 标签是否会显示在该集群中的每个 Amazon EC2 实例上? 如果我删除 Amazon EMR 集群上的标签,该标签是否会自动从每个关联的 EC2 实例中删除?

是,Amazon EMR 会将添加到集群的标签传播到该集群的底层 EC2 实例。如果您向 Amazon EMR 集群添加标签,它也会出现在相关的 Amazon EC2 实例上。同样,如果您从 Amazon EMR 集群中删除标签,该标签也将从其关联的 Amazon EC2 实例中删除。但是,如果您将 IAM 策略用于 Amazon EC2 并计划使用 Amazon EMR 的标记功能,则应确保已授予使用 Amazon EC2 标记 API CreateTags 和 DeleteTags 的权限。

 

问:如何让我的标签显示在账单中以细分成本?

此处选择要在亚马逊云科技账单报告中使用的标签。然后,要查看合并资源的成本,您可以根据具有相同标签键值的资源来组织账单信息。

问:如何判断哪些 Amazon EC2 实例是 Amazon EMR 集群的一部分?

与 Amazon EMR 集群关联的 Amazon EC2 实例将具有两个系统标签:

  • aws:elasticmapreduce:instance-group-role=CORE
    • 键 = instance-group 角色;值 = [CORE or TASK];
  • aws:elasticmapreduce:job-flow-id=j-12345678
    • 键 = job-flow-id;值 = [JobFlowID]

问:我是否可以直接在 Amazon EC2 实例上编辑标签?

是,您可以直接在属于 Amazon EMR 集群一部分的 Amazon EC2 实例上添加或删除标签。但是,我们不建议这样做,因为 Amazon EMR 的标记系统不会将您所做的更改直接同步到关联的 Amazon EC2 实例。我们建议在 Amazon EMR 控制台、CLI 或 API 中添加和删除 Amazon EMR 集群的标签,以确保集群及其关联的 Amazon EC2 实例具有正确的标签。

Amazon EKS 上的 Amazon EMR

问:什么是 Amazon EKS 上的 Amazon EMR?
Amazon EKS 上的 Amazon EMR 是 Amazon EMR 的一种部署模型,使客户能够轻松、经济高效地处理大量数据。它利用在容器中灵活的 Amazon EKS 托管式服务上运行的托管分析框架,以及 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Fargate 和 Amazon Simple Storage Service (Amazon S3) 的 Web 规模基础设施。

问:为什么我应该使用 Amazon EKS 上的 Amazon EMR?
Amazon EKS 上的 Amazon EMR 使用基于容器的方法将分析任务与正在处理任务的服务和基础设施分离开来。由于 EKS 上的 EMR 会根据任务的计算、内存和应用程序依赖关系动态配置基础设施,因此您可以将更多精力集中在开发应用程序上,而不必专注于基础设施的运行。基础设施团队可以集中管理通用计算平台,以将 EMR 工作负载与其他基于容器的应用程序整合。多个团队、组织或业务部门可以在共享基础设施上同时独立地运行其分析流程,同时保持 Amazon EKS 和 Amazon Identity and Access Management (IAM) 启用的隔离。

问:对于已经在 Amazon EKS 上运行 Apache Spark 的用户来说,有什么益处?
如果您已在 Amazon EKS 上运行 Apache Spark,则可以获得 Amazon EMR 的所有益处,例如自动调配和扩缩以及使用最新的完全托管版本的开源大数据分析框架的能力。

问:此功能如何与其他服务相关并与其配合使用?
Amazon EKS 为客户提供在亚马逊云科技上运行 Kubernetes 的托管式体验,使您能够使用 EKS 托管节点组或使用 Amazon Fargate 来增加计算容量。在 EKS 上运行 EMR 任务可以访问他们在 Amazon S3 上的数据,而监控和日志记录可以与 Amazon CloudWatch 集成。Amazon Identity and Access Management (IAM) 为任务和相关 Amazon 服务启用了基于角色的访问控制。

问:我可以将哪些亚马逊云科技计算服务与 EKS 上的 Amazon EMR 结合使用?
您可以将适用于 EKS 的 Amazon EMR 与 Amazon Elastic Compute Cloud (EC2) 实例结合使用以支持更广泛的自定义选项,也可以使用无服务器 Amazon Fargate 服务来处理您的分析,而无需预置或管理 EC2 实例。通过将分析任务分布到多个 Amazon 可用区 (AZ),可以自动提高应用程序可用性。

问:如何开始使用 EKS 上的 EMR?
要开始使用,请在 Amazon EMR 上注册您的 Amazon EKS 集群。 注册后,通过将工作负载提交给 EMR 执行,在任务定义(包括应用程序依赖项和框架参数)中引用此注册。借助 EKS 上的 EMR,您可以为在同一 EKS 集群上运行的分析应用程序使用不同的开源大数据分析框架、版本和配置。 

问:如何向 EKS 上的 EMR 提交分析应用程序?
您可以使用亚马逊云科技开发工具包/CLI 提交分析应用程序。

问:我能否对 EKS 上运行的 EMR 集群和应用程序使用相同的 EMR 版本?

是,对于在 EMR 集群上运行的应用程序和在 EKS 上运行的应用程序,您可以使用相同的 EMR 版本。

问:如何对分析应用程序进行问题排查?
您可以使用 Amazon EMR Spark UI 对 Spark 应用程序进行诊断和问题排查。对于所有分析应用程序,EMR 在应用程序完成后的 30 天内提供对应用程序详细信息、相关日志和指标的访问。可以单独配置任务以将日志发送到 Amazon S3 位置或 Amazon CloudWatch。

问:我是否可以在 EKS 中查看 EMR 应用程序?
是,EMR 应用程序在 EKS 控制台中显示为 Kubernetes 任务和部署。

问:我是否能够在同一个 EKS 集群上将多个任务或应用程序彼此隔离?
是,Kubernetes 在本地提供任务隔离。此外,可以将每个任务配置为使用自己的执行角色运行,以限制该任务可以访问的亚马逊云科技资源。

问:EKS 上的 EMR 如何帮助降低成本?
EKS 上的 EMR 消除了运行专用集群的需要,从而降低了成本。您可以使用常见的共享 EKS 集群来运行需要不同版本的开源大数据分析框架的分析应用程序。您还可以使用同一个 EKS 集群来运行其他容器化的非 EMR 应用程序。

问:EKS 上的 EMR 如何收费?
EKS 上的 Amazon EMR 定价根据以每分钟粒度运行任务的一组容器请求的 vCPU 和内存资源计算得出。有关定价信息,请访问 Amazon EMR 定价页面

问:EKS 上的 EMR 和 EC2 上的 EMR 有什么区别?

功能

EKS 上的 EMR

EC2 上的 EMR

最新支持的 EMR 版本

Y

Y

对任务的多可用区支持

Y

N

具有非大数据工作负载的多租户

Y

N

EMR 版本范围

任务

集群

自动扩缩集群

Y

Y

托管式扩缩

N

Y

计算提供商

EC2、Fargate

EC2

数据加密

Y

Y

Kerberos 身份验证

N

Y

托管的应用程序

仅限 Spark

多个

Amazon Lake Formation

N

Y

Apache Ranger 集成

N

Y

自定义 AMI/映像

Y

Y

与 Sagemaker 和 Zeppelin 的集成

Y 与 Livy

Y

自托管式 Notebooks

N

Y

与 EMR Studio 的集成

Y

Y

Zeppelin、JEG

N

Y

使用 Apache Airflow 进行编排

Y

Y

使用 Amazon Step functions 进行编排

Y

Y

问:什么是一组容器模板?

EKS 上的 EMR 使您能够使用 Kubernetes 一组容器模板来自定义您的任务在 Kubernetes 集群中的运行位置和方式。Kubernetes 一组容器模板提供了可重复使用的设计模式或样板,可用于声明式地表达 Kubernetes Pod 应如何部署到 EKS 集群。

问:为什么我应该将一组容器模板与 EKS 上的 EMR 任务结合使用?

一组容器模板可以更好地控制您的任务在 Kubernetes 中的安排方式。例如,您可以通过在 Amazon EC2 Spot 实例上运行 Spark 驱动程序任务或仅允许需要 SSD 的任务在启用 SSD 的实例上运行来降低成本。将一组容器模板与 EKS 上的 EMR 结合使用可以对资源的分配方式进行精细控制,并在任务中运行自定义容器。因此,可以降低成本并提高任务性能。

问:什么是一组容器?

一组容器是在 Kubernetes Worker 节点上运行的一个或多个具有共享网络和存储资源的容器。EKS 上的 EMR 通过将 Spark 驱动程序和执行器任务安排为单独的一组容器来使用一组容器来运行您的任务。

问:一组容器模板有哪些使用案例?

您可以使用一组容器模板来优化性能和成本。例如,您可以通过定义要在 EC2 Spot 实例上运行的任务来节省成本,或者通过在 GPU 或 SSD 支持的 EC2 实例上安排这些任务来提高性能。客户通常需要精细的工作负载控制才能在 EKS 上支持多个团队或组织,一组容器模板可简化在团队指定的节点组上运行任务的过程。此外,您可以部署 sidecar 容器来运行任务的初始化代码,或者运行常用的监控工具(如 Fluentd)进行日志转发。

问:我是否可以为我的 Spark 驱动程序和 Spark 执行器指定不同的一组容器模板?

您可以(但不是必需)为驱动程序和执行器提供单独的模板。例如,您可以将 nodeSelector 和容忍度配置为将 Spark 驱动程序指定为仅在 Amazon EC2 按需实例上运行,将 Spark 执行器指定为仅在 Amazon Fargate 实例上运行。在任务提交中,配置 spark 属性 spark.kubernetes.driver.podTemplateFile 和 spark.kubernetes.executor.podTemplateFile 以引用模板的 S3 位置。

问:我可以指定哪些模板值?

您可以同时指定一组容器级别字段(包括卷、一组容器关联、初始化容器、节点选择器)和 Spark 主容器级别字段(包括 EnvFrom、工作目录、生命周期、容器卷挂载)。

问:为什么我应该将自定义映像与 EKS 上的 EMR 结合使用?

如果没有自定义映像,使用 EKS 上的 EMR 管理应用程序依赖项需要您在运行时从外部存储服务(如 Amazon S3)引用它们。现在,借助自定义映像支持,您可以使用应用程序及其依赖库创建独立的 Docker 镜像。您不再需要维护、更新或对外部存储的库进行版本控制,并且可以使用与其他容器化应用程序所用的相同的 DevOps 流程来开发大数据应用程序。只需指向您的映像然后运行它。

问:什么是自定义映像?

自定义映像是 EKS 上的 EMR 提供的 Docker 镜像(“基础映像”),其中包含 EMR 运行时和其他亚马逊云科技服务的连接器,您可以修改这些服务以包含应用程序依赖项或应用程序需要的其他软件包。新映像可以存储在 Amazon Elastic Container Registry (ECR) 或您自己的 Docker 容器注册表中。

问:自定义映像有哪些使用案例?

客户可以创建基础映像,添加公司标准库,然后将其存储在 Amazon Elastic Container Registry (Amazon ECR) 中。其他客户可以自定义映像以包含其应用程序特定的依赖项。生成的不可改变映像可以进行漏洞扫描,部署到测试和生产环境中。您可以添加的依赖项示例包括 Java 开发工具包、Python 或 R 库,您可以像使用其他容器化应用程序一样将它们直接添加到映像中。

问:我什么时候应该为 Spark 驱动程序和 Spark 执行器指定不同的自定义映像?

如果需要包含不同的依赖项或库,您可以为 Spark 驱动程序和执行器指定单独的映像。删除两个映像中不需要的库可能会导致图像尺寸变小,从而缩短任务开始时间。您可以为驱动程序和执行器指定单个映像 (spark.kubernetes.container.image),也可以为驱动程序 (spark.kubernetes.driver.container.image) 和执行器 (spark.kubernetes.executor.container.image) 指定不同的映像。

问:使用自定义映像是否需要额外付费?

使用自定义映像功能不收取任何费用。

EMR Serverless

一般性问题

问:什么是 Amazon EMR Serverless?

Amazon EMR Serverless 是 Amazon EMR 中的新部署选项,它可让您在不配置、管理和扩展集群的情况下运行 Apache Spark 和 Apache Hive 等大数据框架。

问:谁可以使用 EMR Serverless?

数据工程师、分析师和科学家可以使用 EMR Serverless,通过 Apache Spark 和 Apache Hive 等开源框架构建应用程序。他们可以使用这些框架来转换数据、运行交互式 SQL 查询和机器学习工作负载。

问:如何开始使用 EMR Serverless?

可以使用 EMR Studio、Amazon CLI 或 API 来提交任务、跟踪任务状态以及构建要在 EMR Serverless 上运行的数据管道。要开始使用 EMR Studio,请登录 Amazon Web Services 管理控制台,导航到“分析”类别下的 Amazon EMR,然后选择 Amazon EMR Serverless。按照 Amazon Web Services 中国管理控制台中的说明进行操作,导航到“分析”类别下的 Amazon EMR,然后选择 Amazon EMR Serverless。按照入门指南中的说明创建 EMR Serverless 应用程序并提交作业。可以参阅在 Amazon CLI 上与您的应用程序交互页面以使用 CLI 启动您的应用程序并提交作业。还可以在我们的 GitHub 存储库中找到 EMR Serverless 示例和示例代码。

问:EMR Serverless 支持哪些开源框架?

EMR Serverless 目前支持 Apache Spark 和 Apache Hive 引擎。如果您想获得其他框架的支持,例如 Apache Presto 或 Apache Flink,请联系 Amazon Web Services 中国支持部门

问:EMR Serverless 在哪些区域可用?

EMR Serverless 可在以下 Amazon Web Services 区域使用:亚太地区(孟买)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、由光环新网运营的中国(北京)区域。由西云数据运营的中国(宁夏)区域,加拿大(中部)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(伦敦)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩)、南美洲(圣保罗)、美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(北加利福尼亚)和美国西部(俄勒冈州)。

问:Amazon EMR Serverless、EC2 上的 Amazon EMR 和 EKS 上的 Amazon EMR 有什么区别?

Amazon EMR 提供了在基于 EC2 的集群、EKS 集群或无服务器上运行应用程序的选项。EC2 集群上的 EMR 适用于需要最大程度控制和灵活性来运行应用程序的客户。通过 EC2 集群上的 EMR,客户可以选择 EC2 实例类型以满足特定应用程序的性能需求,自定义 Linux AMI,自定义 EC2 实例配置,自定义和扩展开源框架,以及在集群实例上安装其他自定义软件。EKS 上的 Amazon EMR 适用于希望对 EKS 进行标准化以管理跨应用程序集群或在同一集群上使用不同版本开源框架的客户。EMR Serverless 适用于希望避免管理和操作集群并更喜欢使用开源框架运行应用程序的客户。

问:EMR Serverless 和 EC2 上的 Amazon EMR 之间有哪些功能区别?


功能


EMR Serverless


EC2 上的 Amazon EMR

EKS 上的 Amazon EMR


支持最新的开源版本


Y


Y

Y

抵御可用区故障


Y


N

Y

根据需要自动扩展和缩减资源


Y


Y

Y

对静态数据进行加密


Y


Y

Y


支持的开源框架


Spark 和 Hive


多个

Spark


支持使用 Amazon Lake Formation 进行精细授权


N


Y

N

支持 Apache Hudi 和 Apache Iceberg

Y

Y

Y

与 Apache Ranger 集成,实现表级和列级权限控制


N


Y

N

自定义操作系统映像


N


Y

Y

自定义已安装的开源框架

Y

Y

Y

自定义和加载其他库与依赖项

Y

Y

Y

作为机器学习(ML)工作流程的一部分,从 SageMaker Studio 运行工作负载

N


Y

N

连接到自托管式 Jupyter Notebook

N

Y

Y

使用 Apache Airflow 和适用于 Apache Airflow 的 Amazon 托管工作流程(MWAA)构建和编排管道


Y


Y

Y

使用 Amazon Step Functions 构建和编排管道

N


Y

Y

问:EMR Serverless 中支持哪些 EMR 版本?

EMR Serverless 支持 EMR 发行标签 6.6 及更高版本。使用 EMR Serverless,您可以获得与其他 EMR 部署选项相同的性能优化 EMR 运行时间。这是与标准开源框架完全兼容的 API。

应用程序、工作程序和作业

问:什么是应用程序,如何创建应用程序?

使用 Amazon EMR Serverless,您可以创建一个或多个使用开源分析框架的 EMR Serverless 应用程序。要创建应用程序,必须指定以下属性:1) 要使用的开源框架版本的 Amazon EMR 发行版本,以及 2) 您希望应用程序使用的特定分析引擎,例如 Apache Spark 3.1 或 Apache Hive 3.0。创建应用程序后,您可以开始运行数据处理作业或面向应用程序的交互式请求。

问:什么是工作程序?

EMR Serverless 应用程序在内部使用工作程序来执行您的工作负载。提交作业时,EMR Serverless 会计算作业所需的资源并安排工作程序。EMR Serverless 将您的工作负载分解为任务,使用开源框架预置和设置工作程序,并在作业完成后将其停用。EMR Serverless 可根据作业每个阶段所需的工作负载和并行度自动扩展或缩减工作程序,从而无需估算运行工作负载所需的工作程序数量。这些工作程序的默认规模取决于您的应用程序类型和 Amazon EMR 发行版本。在安排作业运行时,您可以覆盖这些大小。

问:我能否指定自己的作业可以使用的最小和最大工作程序数量?

使用 EMR Serverless,您可以指定并行工作程序的最小和最大数量以及工作程序的 vCPU 和内存配置。还可以设置应用程序资源的最大容量限制以控制成本。

问:我应该何时创建多个应用程序?

在执行以下任何操作时,请考虑创建多个应用程序:

  1. 使用不同的开源框架
  2. 针对不同的使用案例使用不同版本的开源框架
  3. 从一个版本升级到另一个版本时执行 A/B 测试
  4. 针对测试和生产场景维护单独的逻辑环境
  5. 通过独立的成本控制和使用情况跟踪,为不同的团队提供单独的逻辑环境
  6. 分离不同的业务范围应用程序

问:创建 EMR Serverless 应用程序后,我能否更改其默认属性?

可以,您可使用 EMR Studio 或 UpdateApplication API/CLI 调用修改应用程序属性,例如初始容量、最大容量限制和网络配置。

问:我应该何时使用预初始化的工作程序池创建应用程序?

没有预初始化工作程序的 EMR Serverless 应用程序最多需要 120 秒才能确定所需的资源并进行预置。EMR Serverless 提供了一项可选功能,可让工作程序在几秒钟内初始化并做好响应准备,从而有效地为应用程序创建待命的工作程序池。此功能称为预初始化容量,可以通过设置应用程序的初始容量参数为每个应用程序进行配置。

预初始化容量可让作业立即启动,因此非常适合实施时间敏感型作业。可以指定在启动 EMR Serverless 应用程序时要预初始化的工作程序数量。随后,当用户提交作业时,可以使用预初始化的工作程序立即启动作业。如果作业需要的工作程序多于您选择的预初始化数量,则 EMR Serverless 会自动添加更多工作程序(不超过您指定的最大并发限制)。作业完成后,EMR Serverless 会自动恢复到维护所指定预初始化工作程序的状态。如果工作程序已闲置 15 分钟,它们会自动关闭。可以使用 UpdateApplication API 或 EMR Studio 更改应用程序的默认空闲超时时间。

问:如何在 EMR Serverless 上提交和管理作业?

可以使用 EMR Studio、SDK/CLI 或我们的 Apache Airflow 连接器提交和管理 EMR Serverless 作业。

问:如何为要在 EMR Serverless 上运行的作业包含依赖项?

对于 PySpark,可以使用 virtualenv 打包 Python 依赖项,并使用 --archives 选项传递存档文件,这可让您的工作程序在作业运行期间使用依赖项。对于 Scala 或 Java,可以将依赖项打包为 jar 文件,将其上传到 Amazon S3,然后在运行 EMR Serverless 作业时使用 --jars 或 --packages 选项传递这些文件。

问:EMR Serverless Spark 和 Hive 应用程序是否支持用户定义函数(UDF)?

EMR Serverless 支持基于 Java 的 UDF。可以将它们打包为 jar 文件,上传到 S3,然后在 Spark 或 HiveQL 脚本中使用它们。

问:EMR Serverless 支持哪些工作程序配置?

有关详细信息,请参阅支持的工作程序配置

问:如果 EMR Serverless 作业的运行时间超过预期,我能否取消该作业?

可以,您可从 EMR Studio 或通过调用 cancelJobRun API/CLI 取消正在运行的 EMR Serverless 作业。

问:我能否为工作程序添加额外的存储空间?

EMR Serverless 为每个工作程序提供 20 GB 的短暂存储空间。如果您需要更多存储空间,可以在作业提交期间自定义存储空间,范围从 20 GB 到 200 GB 不等。

问:可在何处找到代码示例?

可以在 GitHub 存储库中找到 EMR Serverless 代码示例。

问:我应该在何时使用预初始化容量和按需容量?

EMR Serverless 提供两种处理容量的选项:按需容量和预初始化容量。

按需容量可让您的应用程序在需要时自动预置工作程序,并在处理完成时释放它们。这可以帮助您仅为所使用的资源付费,从而节省成本,并避免因闲置容量而产生任何额外费用。按需容量可根据您的工作负载扩展或缩减应用程序,因此您不必担心资源预置过剩或预置不足。

预初始化的容量可让您的工作程序预先初始化并在几秒钟内做好响应准备,从而减少作业启动延迟。这就为应用程序有效创建了工作程序热池。预初始化容量可帮助您避免冷启动,冷启动是在 EMR Serverless 必须为您的应用程序预置资源时发生的延迟。

问:我能否在多个可用区(AZ)配置 EMR Serverless 应用程序?

按需:当您使用按需容量时,默认情况下,EMR Serverless 会将作业分配到多个可用区,但每个作业仅在一个可用区内运行。可以通过将子网与可用区关联来选择要使用的可用区。如果一个可用区出现故障,EMR Serverless 会自动在另一个正常的可用区中运行您的作业。

预初始化:当您启动具有预初始化容量的应用程序时,EMR Serverless 会从您指定的子网中选择正常的可用区。在您停止应用程序之前,作业将提交到该可用区。如果某个可用区受损,您可以重新启动应用程序以切换到另一个正常的可用区。

问:我能否连接到其他区域中的数据存储?

EMR Serverless 只能访问同一区域中的某些亚马逊云科技资源。要访问其他区域中的亚马逊云科技资源或非亚马逊云科技 源,您需要设置 VPC 访问和 NAT 网关以路由到亚马逊云科技资源的公有端点。

监控和调试

问:如何监控 Amazon EMR Serverless 应用程序和作业运行?

Amazon EMR Serverless 应用程序和作业级别的指标每 30 秒一次发布至 Amazon CloudWatch。

问:如何使用 EMR Serverless 启动 Spark UI 和 Tez UI?

在 EMR Studio 中,可以选择正在运行或已完成的 EMR Serverless 作业,然后单击 Spark UI 或 Tez UI 按钮将其启动。

安全性和数据控制

问:我能否访问自己的 Amazon Virtual Private Cloud(VPC)中的资源?

可以,您可配置 Amazon EMR Serverless 应用程序以访问自己的 VPC 中的资源。要了解更多信息,请参阅文档中的配置 VPC 访问权限部分。 

问:使用 EMR Serverless 应用程序可以实现何种隔离?

每个 EMR Serverless 应用程序都与其他应用程序隔离,并在安全的 Amazon VPC 上运行。

基于账户级 vCPU 的配额

问:Amazon EMR Serverless 服务配额有何变化?
Amazon EMR Serverless 推出了一项称为“每个账户最大并发 vCPU”的新服务配额。这种基于 vCPU 的配额可让您设置应用程序能够在区域内纵向扩展到的最大 vCPU 聚合 vCPU 数量。基于工作程序的现有应用程序级配额(最大活跃工作程序)将于 2023 年 2 月 1 日结束支持。

问:可在何处查看和管理我账户的 vCPU 配额?
可以在 Amazon Web Services 中国服务配额管理控制台中查看、管理和请求增加配额。有关更多信息,请参阅服务配额用户指南中的申请增加配额

问:账户级 vCPU 配额和应用程序级 maximumCapacity 属性之间有什么区别?
EMR Serverless 提供两种成本控制措施 - 1/ 每个账户的最大并发 vCPU 配额适用于您账户中某个区域内的所有 EMR Serverless 应用程序。2/ maximumCapacity 参数限制特定 EMR Serverless 应用程序的 vCPU。应使用基于 vCPU 的配额来限制区域中所有应用程序使用的最大并发 vCPU,并且使用 maximumCapacity 属性来限制特定应用程序使用的资源。例如,如果您有 5 个应用程序,并且每个应用程序最多可以纵向扩展到 1000 个 vCPU,请将每个应用程序的 maximumCapacity 属性设置为 1000 个 vCPU,并将基于账户级 vCPU 的配额配置为 5 * 1000 = 5000 个 vCPU。

问:如何知道我是否达到了基于 vCPU 的账户配额?
如果您超过账户级 vCPU 配额,EMR Serverless 将停止预置新容量。如果您在超过配额后尝试创建新应用程序,则应用程序创建将失败并显示一条错误消息:“应用程序创建失败,因为您已超过“每个账户最大并发 vCPU”的服务配额。可以使用 Amazon Web Services 服务配额控制台查看和管理自己的服务配额。” 如果您在超过配额后提交新作业,该作业将失败并显示一条错误消息:“作业失败,因为您已超过“每个账户最大并发 vCPU”的服务配额。可以使用 Amazon 服务配额控制台查看和管理自己的服务配额。” 有关更多详细信息,请参阅文档

定价

问:Amazon EMR Serverless 如何帮助节省大数据部署的成本?

Amazon EMR Serverless 可以通过三种方式帮助您节省成本。首先,管理、保护和扩展集群没有相应的运营开销。其次,EMR Serverless 会在处理作业的每个阶段自动纵向扩展工作程序,并在不需要时缩减工作程序。您需要为从工作程序开始运行到停止期间(四舍五入到最接近的秒,最少 1 分钟)所使用的聚合 vCPU、内存和存储资源付费。例如,您的作业在处理作业的前 10 分钟可能需要 10 个工作程序,在接下来的 5 分钟内可能需要 50 个工作程序。借助精细的自动扩展,您只需支付 10 个工作程序在 10 分钟内产生的成本,以及 50 个工作程序在 5 分钟内产生的成本。因此,您不必为未充分利用的资源付费。第三,EMR Serverless 包括针对 Apache Spark 和 Apache Hive 以及 Presto 进行性能优化的 Amazon EMR 运行时。Amazon EMR 运行时与 API 兼容,其速度是标准开源分析引擎的两倍多,因此您的作业运行速度更快,产生的计算成本更低。

问:EMR Serverless 的成本是否与 EC2 Spot 实例上的 Amazon EMR 相当?

这取决于当前 EMR 对 EC2 集群的利用率。如果您使用 EC2 按需实例运行 EMR 集群,则在当前的集群利用率低于 70% 时,EMR Serverless 将提供更低的总拥有成本(TCO)。如果您使用的是 EC2 Savings Plans,则在当前的集群利用率低于 50% 时,EMR Serverless 将提供更低的 TCO。此外,如果您使用 EC2 竞价型实例,EC2 上的 Amazon EMR 和 EKS 上的 Amazon EMR 将继续更具成本效益。

问:即使在作业运行完成之后,预初始化的工作程序也会产生费用吗?

是,如果您在作业完成后未停止工作程序,则预初始化的工作程序会产生费用。

问:如果要提出问题、评论和功能请求,我应该联系谁?

如果您对 EMR Serverless 有任何问询和宝贵反馈,请联系 Amazon Web Services 中国支持部门

使用 EBS 卷

问:我现在能做什么以前做不到的事情?

大多数 EC2 实例都具有附加到实例的固定存储容量,称为“实例存储”。现在,您可以将 EBS 卷添加到 Amazon EMR 集群中的实例中,从而可以自定义实例上的存储。此功能还允许您在仅限 EBS 的实例系列(如 M4 和 C4)上运行 Amazon EMR 集群。

问:向在 Amazon EMR 上运行的实例添加 EBS 卷有什么益处?

在以下情况下,您可以通过向实例添加 EBS 卷受益:

  1. 您的处理要求如此之高,使您需要大量 HDFS(或本地)存储,而实例目前提供的存储就是这样。借助对 EBS 卷的支持,您将能够相对于实例提供的计算容量自定义实例上的存储容量。优化实例上的存储可以让您节省成本。
  2. 您在较早一代实例系列(例如 M1 和 M2 系列)上运行,并且希望迁移到最新一代实例系列,但受到下一代实例类型上每个节点的可用存储空间的限制。现在,您可以使用任何新一代实例类型并添加 EBS 卷来优化存储。内部基准测试表明,通过从旧一代实例系列(M1 或 M2)迁移到新一代实例系列(M4、C4 和 R3),您可以节省成本并提高性能。Amazon EMR 团队建议您运行应用程序以得出正确的结论。
  3. 您想要使用或迁移到下一代仅限 EBS 的 M4 和 C4 系列。

问:集群终止后,我能否将数据保存在 EBS 卷上?

目前,集群终止后,Amazon EMR 将删除卷。如果您想在集群的生命周期之外保留数据,请考虑使用 Amazon S3 作为数据存储。

问:我可以将哪种 EBS 卷附加到实例?

Amazon EMR 允许您使用不同的 EBS 卷类型:通用型 SSD (GP2)、磁性和预置 IOPS (SSD)。

问:终止集群后,EBS 卷会发生什么?

EMR 集群终止后,Amazon EMR 将删除这些卷。

问:我能否将 EBS 用于已有实例存储的实例?

是,您可以向具有实例存储的实例添加 EBS 卷。

问:我能否将 EBS 卷附加到正在运行的集群?

不可以,目前您只能在启动集群时添加 EBS 卷。

问:我是否能够从集群中拍摄卷的快照?

EBS API 使您能够为集群创建快照。但是,Amazon EMR 目前不允许您从快照还原。

问:我是否可以使用加密的 EBS 卷?

您可以使用 Amazon KMS 作为密钥提供程序来加密 EBS 根设备和存储卷。有关更多信息,请参阅本地磁盘加密

问:从正在运行的集群中删除连接的卷时会发生什么情况?

从正在运行的集群中删除连接的卷将被视为节点故障。Amazon EMR 将使用相同的节点和 EBS 卷替换节点和 EBS 卷。

EMR 工作负载

问:什么是 Apache Spark?

Apache SparkTM 是一个开源的分布式处理系统,用于大数据工作负载。它利用内存缓存和优化的查询执行,可针对任何大小的数据进行快速分析查询。Amazon EMR 是在云中部署 Apache Spark 的好地方,因为它集商业 Spark 发行版的集成和测试严谨性与云的规模、简单性和成本效益于一身。它使您能够在几分钟内启动 Spark 集群,而无需进行节点调配、集群设置、Spark 配置或集群优化。EMR 具有适用于 Apache Spark 的 Amazon EMR 运行时,这是针对 Apache Spark 的性能优化型运行时环境,默认情况下在 Amazon EMR 集群上处于活动状态。 

问:什么是 Presto?

Presto 是一个开源的分布式 SQL 查询引擎,专为针对任何大小的数据进行快速分析查询而设计。借助 Amazon EMR,您可以在几分钟内启动 Presto 集群,而无需进行节点调配、集群设置、Presto 配置或集群优化。EMR 使您能够在几分钟内预置一个、数百个或数千个计算实例。Presto 具有两个社群项目 – PrestoDB 和 PrestoSQL。Amazon EMR 同时支持这两个项目。

使用 Hive

问:什么是 Apache Hive?

Hive 是一个在 Hadoop 之上运行的开源数据仓库和分析软件包。Hive 由一种称为 Hive QL 的基于 SQL 的语言进行操作,用户可以使用该语言构建、汇总和查询存储在 Amazon S3 中的数据源。Hive QL 超越了标准 SQL,增加了对 map/reduce 函数和复杂的可扩展用户定义数据类型(如 Json 和 Thrift)的强大支持。此功能允许处理复杂甚至非结构化的数据源,例如文本文档和日志文件。Hive 允许通过用 Java 编写并通过 Amazon S3 中的存储部署的用户定义函数进行用户扩展。

问:如果 Hive 在 Amazon EMR 上运行,我可以做什么?

将 Hive 与 Amazon EMR 结合使用时,您可以使用熟悉的类 SQL 语言和 Amazon EMR 提供的易于使用的工具来实施复杂的数据处理应用程序。借助 Amazon EMR,您可以将 Hive 应用程序转换为可靠的数据仓库,以执行数据分析、监控和业务情报收集等任务。

问:Hive 与传统 RDBMS 系统有何不同?

传统的 RDBMS 系统提供事务语义和 ACID 属性。它们还允许对表进行索引和缓存,以便能够非常迅速地检索少量数据。它们能够快速更新少量数据,并实施引用完整性约束。它们通常运行在一台大型计算机上,但不支持对表执行 map 和 reduce 函数,通常也不支持对用户定义的复杂数据类型执行操作。

相比之下,Hive 使用 MapReduce 来执行类似于 SQL 的查询。因此,它经过优化,可以在计算机集群上运行时执行全表扫描,因此能够处理非常多的数据。Hive 提供了分区表,这样它就能够扫描表的分区而不是整个表(如果适合它正在执行的查询)。

当需要事务语义和引用完整性以及经常进行小规模更新时,非常适合使用传统的 RDBMS 系统。Hive 适用于大型数据集的离线报告、转换和分析,例如对一个或多个大型网站执行点击流分析。 

其中一种常见做法是将数据从 RDBMS 系统导出到 Amazon S3,在那里可以使用运行 Hive 的 Amazon EMR 集群执行离线分析。

问:如何开始在 Amazon EMR 上运行 Hive?

首先最好查看我们位于此处的书面文档。

问:Hive 中是否有专门用于 Amazon EMR 的新功能?

是。有关更多详细信息,请参阅文档

  • 您可以启动具有多个主节点的 EMR 集群,以支持 Apache Hive 的高可用性。如果主节点出现故障或者资源管理器或名称节点等关键进程崩溃,Amazon EMR 会自动故障转移到备用主节点。这意味着您可以在 EMR 集群上无中断地运行 Apache Hive。
  • Amazon EMR 允许为·Apache Hive 集群定义 EMR 托管式扩缩,以帮助优化资源的使用情况。使用 EMR 托管式扩缩,可以自动调整集群大小,从而以尽可能低的成本获得最佳性能。使用 EMR 托管式扩缩,您可以为您的集群指定最小和最大计算限制,而 Amazon EMR 将自动调整它们的大小,以实现最佳性能和最高资源利用率。EMR 托管式扩缩会持续对与在集群上运行的工作负载相关的关键指标进行采样。
  • Amazon EMR 6.0.0 增加了对 Hive LLAP 的支持,实现了两倍于 EMR 5.29 的平均运行速度。
  • 现在,您可以在 Amazon EMR 上将 S3 Select 与 Hive 结合使用,以提高性能。S3 Select 允许应用程序从对象中检索一部分数据,因此减少了在 Amazon EMR 与 Amazon S3 之间传输的数据量。
  • Amazon EMR 还可以快速处理复杂的 Apache Hive 查询。默认情况下,EMR 使用 Apache Tez,它的速度要快得多。Apache MapReduce 使用多个阶段,因此会将复杂的 Apache Hive 查询分解为四到五个任务。Apache Tez 专为更复杂的查询而设计,因此 Apache Tez 上的同一个任务会在一个任务中运行,这样就大大加快了任务的运行速度。
  • 使用 Amazon EMR,可以选择将元存储保留在本地或将其外在化。EMR 可以与 Amazon Glue 数据目录、Amazon Aurora、Amazon RDS 和 Amazon Lake Formation 集成。Amazon EMR 可以直接从 Glue 或 Lake Formation 拉取信息,以填充元存储。
  • 可以从 Amazon S3 自动加载表分区。而在以前,要导入分区表,需要对表中的每个分区使用单独的 alter table 语句。Amazon EMR 现在包含一个面向 Hive 语言的新语句类型:alter table recover partitions。 此语句可轻松将表同时导入到多个集群,而无需保留共享的元数据存储。使用此功能可以从外部进程正在向其存放数据的那些表(例如日志文件)读取数据。
  • 您可以将数据直接写入到 Amazon S3。向 Amazon S3 中的表写入数据时,Amazon EMR 中安装的 Hive 版本会直接写入到 Amazon S3,而无需使用临时文件。这样就大大提高了性能,但这意味着从 Hive 的角度来看,HDFS 和 S3 的行为方式有所不同。如果一个表位于 Amazon S3 中,将无法在同一个语句中对这个表同时执行读取和写入操作。如果希望更新位于 S3 中的表,请在集群的本地 HDFS 文件系统中创建一个临时表,并将结果写入到此表中,然后将其复制到 Amazon S3。
  • 您可以访问位于 Amazon S3 中的资源。Amazon EMR 中安装的 Hive 版本可以直接从 Hive 脚本(例如 add jar s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar)内引用资源,例如用于自定义 map 和 reduce 运算的脚本,或者位于 Amazon S3 中的其他库。

问:支持哪些类型的 Hive 集群?

Hive 支持两种类型的集群:交互式集群和批处理集群。在交互模式下,客户可以直接在主节点上启动一个集群,并以交互方式运行 Hive 脚本。此模式通常用于执行临时数据分析和应用程序开发。在批处理模式下,Hive 脚本存储在 Amazon S3 中,并在集群启动时被引用。批处理模式通常用于可重复的任务,例如生成报告。

问:如何启动 Hive 集群?

批处理集群和交互式集群都可以从亚马逊云科技管理控制台、EMR 命令行客户端或 API 启动。有关如何启动 Hive 集群的更多详细信息,请参阅《发行指南》中的 Hive 部分。

问:应当何时使用 Hive 和PIG?

Hive 和 PIG 都提供了高级数据处理语言,并支持在大型数据集上执行复杂数据类型的运算。Hive 语言是 SQL 的一种变体,因此已经熟悉 SQL 和关系数据库的人员很容易就能上手。Hive 支持分区表,这些表允许 Amazon EMR 集群仅下拉刷新与正在执行的查询相关的表分区,而不是执行全表扫描。PIG 和 Hive 都具有查询计划优化功能。PIG 能够跨整个脚本进行优化,而 Hive 查询在语句层级进行优化。

最终,选择使用 Hive 还是 PIG 将取决于应用程序域的确切要求以及执行者和查询编写人员的偏好。

问:Amazon EMR 支持哪个版本的 Hive?

要获得 Amazon EMR 上的 Hive 的最新版本,请参阅文档

问:我能否同时从两个集群对表执行写入操作?

不能。Hive 不支持同时对表执行多个写入操作。应当避免对同一个表同时执行多个写入操作,或者在对一个表执行写入操作时对其执行读取操作。当同时执行读取和写入操作或者同时执行多个写入操作时,Hive 的行为将变得不确定。

问:我能否在集群之间共享数据?

是。通过在脚本的顶部添加 create external table 语句,可以在 Hive 脚本内读取 Amazon S3 中的数据。您访问的每个外部资源都需要一个 create table 语句。

问:我应当运行一个大型集群,然后在多个用户之间共享此集群,还是在多个小型集群之间共享此集群?

Amazon EMR 提供了一个独特的功能,以使您能够使用这两种方法。一方面,当处理常规批处理工作负载时,一个大型集群可能更为高效。另一方面,如果需要执行临时查询或处理随时间变化的工作负载,则可以选择创建多个单独的集群,以适应共享存储在 Amazon S3 中的数据源的特定任务。 可以使用 EMR 托管式扩缩来优化资源的使用情况。

问:我能否访问本地文件系统上的脚本或 jar 资源?

不能。必须首先将脚本或 jar 上载到 Amazon S3 或者集群的主节点,才能引用此脚本或 jar。要上载到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。

问:我能否运行持久性集群,以执行多个 Hive 查询?

是。您需要在手动终止模式下运行集群,以防止它在 Hive 步骤之间终止。为了降低数据丢失的风险,我们建议定期将所有的重要数据持久保留在 Amazon S3 中。最好定期将工作传输到新集群,以测试从主节点故障中恢复的过程。

问:多个用户能否对同一个源数据执行 Hive 步骤?

是。多个用户在单独的集群上执行的 Hive 脚本可能包含 create external table 语句,以同时导入驻留在 Amazon S3 中的源数据。

问:多个用户能否在同一个集群上运行查询?

是。在批处理模式下,会将步骤序列化。多个用户可以向同一个集群添加多个 Hive 步骤,但这些步骤将依次执行。在交互模式下,多个用户可以登录到同一个集群,并同时执行 Hive 语句。

问:能否在多个用户之间共享数据?

是。可以使用此处介绍的标准 Amazon S3 共享机制来共享数据。

问:Hive 是否支持从 JDBC 访问?

是。Hive 提供了 JDBC 驱动程序,可用于以编程方式执行 Hive 语句。要在集群中启动一项 JDBC 服务,您需要在 Amazon EMR 命令行客户端中传递一个可选的参数。您还需要建立一个 SSH 隧道,因为安全组不允许外部连接。

问:如何在 EMR AMI 上更新软件包?

首次启动时,用于 EMR 的 Amazon Linux AMI 会连接到 Amazon Linux AMI yum 存储库,以安装安全更新。使用自定义 AMI 时,可以禁用此功能,但出于安全原因,我们不建议这样做。

问:我能否在 EMR 集群上更新自己的软件包?

是。您可以使用引导操作在集群上安装软件包的更新。

问:我能否使用 Hive 处理 DynamoDB 数据?

是。只需根据您的 DynamoDB 表定义一个外部 Hive 表。随后可以使用 Hive 分析存储在 DynamoDB 中的数据,然后将结果加载回 DynamoDB 或将它们归档到 Amazon S3 中。有关更多信息,请访问《开发人员指南》。

使用 Hudi

问:什么是 Apache Hudi?

Apache Hudi 是一个开源数据管理框架,用于简化递增数据处理和数据管道开发。使用 Apache Hudi,您可以在 Amazon S3 中的记录层级管理数据,以简化变更数据捕获 (CDC) 和流式数据摄入,并提供一个框架来处理需要执行记录层级更新和删除的数据隐私使用案例。Apache Hudi 管理的数据集使用开放存储格式存储在 S3 中,与 Presto、Apache Hive、Apache Spark 和 Amazon Glue 数据目录的集成使您能够使用熟悉的工具近乎实时地访问更新后的数据。

问:应该何时使用 Apache Hudi?

Apache Hudi 可以帮助您处理需要在 S3 上执行记录层级数据管理的使用案例。五种常见的使用案例可以从这些能力中受益:

  1. 遵守数据隐私法律,这些法律要求企业移除用户数据,或者在用户选择更改他们对自身数据的使用方式偏好时更新用户偏好。借助 Apache Hudi,您可以使用 Apache Parquet 和 Apache Avro 等开源数据格式,对存储在 S3 中的数据执行记录层级的插入、更新和删除操作。
  2. 使用实时数据流以及应用来自企业系统的变更数据捕获日志。很多企业要求在 Amazon S3 中提供企业数据仓库 (EDW) 和运营数据存储 (ODS) 数据,以使 Apache Hive 和 Presto 等 SQL 引擎能够访问这些数据以执行数据处理和分析。Apache Hudi 简化了变更日志的应用,使用户能够近乎实时地访问数据。
  3. 恢复迟到或不正确的数据。当数据迟到或不正确时,需要重新声明这些数据,并更新现有的数据集以整合新建或更新后的记录。Apache Hudi 允许将记录“更新插入”到现有的数据集内,并根据记录是否存在于数据集内,利用框架来插入或更新记录。
  4. 跟踪对数据集进行的变更,并提供回滚变更的功能。使用 Apache Hudi,将对数据集进行的每个变更作为一个提交来跟踪,并能够轻松回滚,因此您可以查找对数据集进行的特定变更并将它们“撤消”。
  5. 简化 S3 上的文件管理。为了确保高效地调整数据文件的大小,客户必须构建自定义解决方案,以监控大量的小文件并将它们重写为数量更少的大文件。使用 Apache Hudi 可以管理 S3 上的数据文件,用户只需配置用于存储数据的最佳文件大小,随后 Hudi 会合并文件以创建具有最佳大小的文件。
  6. 将增量写入到目标 Hudi 数据集。可以以递增方式拉取 Hudi 数据集,这意味着您可以只获取所有自指定的时刻以来更新和新建的行。

问:如何创建 Apache Hudi 数据集?

需要使用 Apache Spark 来创建 Apache Hudi 数据集。创建数据集就像编写 Apache Spark DataFrame 一样简单。可以选择性地将 Apache Hudi 数据集的元数据存储在 Amazon Glue 数据目录或 Hive 元存储中,以简化数据发现并与 Apache Hive 和 Presto 集成。

问:Apache Hudi 如何管理数据集?

使用 Apache Hudi 创建数据集时,可以选择应当针对哪种类型的数据访问模式来优化数据集。对于高读取量的使用案例,可以选择“写入时复制”数据管理策略,以针对数据集的频繁读取操作进行优化。此策略使用列式存储格式来组织数据,并在写入更新时合并现有的数据和新的更新。对于高写入量的工作负载,Apache Hudi 使用“读取时合并”数据管理策略,此策略使用列式存储格式和行式存储格式的组合来组织数据,这样会以基于行的存储格式将更新附加到文件中,并在读取时执行合并以提供更新后的结果。

问:如何向 Apache Hudi 数据集执行写入操作?

需要使用 Apache Spark 对 Apache Hudi 数据集进行更改。借助 Apache Spark,可以使用 Spark DataSource API 来操作 Apache Hudi 数据集,以便能够读取和写入数据。当 DataFrame 包含新添加的数据或对现有数据的更新时,可以使用相同的 DataSource API 对 DataFrame 执行写入操作。也可以使用 Hudi DeltaStreamer 实用工具。

问:如何从 Apache Hudi 数据集读取数据?

可以使用 Apache Spark、Apache Hive、Presto、Amazon Redshift Spectrum 或 Amazon Athena 来读取数据。当创建一个数据集时,可以选择在 Amazon Glue 数据目录或 Hive 元存储中发布此数据集的元数据。如果选择在元存储中发布元数据,那么您的数据集看起来就像普通的表一样,您可以使用 Apache Hive 和 Presto 来查询此表。

问:当使用 Apache Hudi 时,我应该了解哪些注意事项或限制?

有关在 Amazon EMR 上使用 Apache Hudi 时的注意事项和限制的完整列表,请参阅 Amazon EMR 文档

问:我如何将现有的数据与 Apache Hudi 结合使用?

如果您现在希望使用 Apache Hudi 来管理现有的数据,则可以使用 Amazon EMR 上的 Apache Hudi 提供的导入工具,轻松将 Apache Parquet 数据转换为 Apache Hudi 数据集,也可以使用 Hudi DeltaStreamer 实用工具或 Apache Spark 将现有的数据重写为 Apache Hudi 数据集。

使用 Impala

问:什么是 Impala?

Impala 是 Hadoop 生态系统中的一个开源工具,用于使用 SQL 语法执行交互式临时查询。它并不使用 MapReduce,而是利用类似于传统关系数据库管理系统 (RDBMS) 中的大规模并行处理 (MPP) 引擎。使用这种架构,可以非常迅速地查询 HDFS 或 HBase 表中的数据,并利用 Hadoop 的能力来处理各种类型的数据以及在运行时提供架构。这样,Impala 就能够执行交互式、低延迟的分析。此外,Impala 还使用 Hive 元存储来保留有关输入数据的信息,包括分区名称和数据类型。不过,Amazon EMR 上的 Impala 要求 AMI 运行 Hadoop 2.x 或更高版本。单击此处了解有关 Impala 的更多信息。

问:使用运行在 Amazon EMR 上的 Impala,我可以执行哪些操作?

与将 Hive 与 Amazon EMR 结合使用类似,将 Impala 与 Amazon EMR 结合使用时,可以通过 SQL 语法实现复杂的数据处理应用。但 Impala 是为在某些使用案例中更快地执行而构建的(见下文)。借助 Amazon EMR,您可以将 Impala 用作可靠的数据仓库,以执行数据分析、监控和业务情报收集等任务。下面是三种使用案例:

  • 在长时间运行的集群上,使用 Impala 而不是 Hive 来执行临时查询。Impala 将交互式查询的用时缩短到几秒钟,因此成为了一个快速执行调查的绝佳工具。可以在与批处理 MapReduce 工作流相同的集群上运行 Impala,在拥有 Hive 和 PIG 并长时间运行的分析集群上使用 Impala,或者创建一个专门针对 Impala 查询进行调整的集群。
  • 在临时性 Amazon EMR 集群上,使用 Impala 而不是 Hive 来执行批处理 ETL 任务。Impala 速度更快,可以为这些工作负载提供更高的性能。和 Hive 一样,Impala 也使用 SQL,因此可以轻松将查询从 Hive 切换到 Impala。
  • 将 Impala 与第三方业务情报工具结合使用。将客户端 ODBC 或 JDBC 驱动程序与集群连接,以便将 Impala 用作强大的可视化工具和控制面板的引擎。

批处理和交互式 Impala 集群都可以在 Amazon EMR 中创建。例如,可以让运行 Impala 并长时间运行的 Amazon EMR 集群执行临时的交互式查询,或者使用临时性的 Impala 集群执行快速的 ETL 工作流。

问:Impala 与传统的 RDBMS 有何不同?

传统的关系数据库系统提供事务语义和数据库原子性、一致性、隔离性和持久性 (ACID) 属性。它们还允许对表进行索引和缓存,以便能够非常迅速地检索少量数据,还能够快速更新少量数据,并实施引用完整性约束。它们通常运行在一台大型计算机上,但不支持对用户定义的复杂数据类型执行操作。Impala 使用类似于 RDBMS 中的分布式查询系统,但查询存储在 HDFS 中的数据,并使用 Hive 元存储来保留有关输入数据的信息。和 Hive 一样,在运行时提供用于查询的架构,因此可以更轻松地切换架构。此外,Impala 还可以查询多种复杂的数据类型,并执行用户定义的函数。但由于 Impala 处理内存数据,因此了解集群的硬件限制并优化查询以获得最佳的性能非常重要。

问:Impala 与 Hive 有何不同?

Impala 使用大规模并行处理 (MPP) 引擎执行 SQL 查询,而 Hive 使用 MapReduce 执行 SQL 查询。Impala 避免了 Hive 在创建 MapReduce 任务方面的开销。但 Impala 会使用大量的内存资源,而集群的可用内存限制了任何查询可以消耗的内存量。而 Hive 没有这样的限制,它可以使用相同的硬件成功处理更大的数据集。您通常应当使用 Impala 进行快速的交互式查询,而 Hive 更适合大型数据集上的 ETL 工作负载。Impala 专为速度而构建,非常适合临时调查,但需要使用大量的内存来执行代价高昂的查询或处理非常大的数据集。由于这些限制,建议将 Hive 用于更注重成功完成而不是追求速度的工作负载。单击此处查看 Impala 和 Hive 的一些性能基准。

问:我能否使用 Hadoop 1?

不能,Impala 需要 Hadoop 2,而且不会在 AMI 运行 Hadoop 1.x 的集群上运行。

问:我的 Impala 集群应当使用哪些实例类型?

为了获得最佳的 Impala 体验,我们建议为集群使用内存优化型实例。不过我们已经证明,当使用标准实例类型时,性能也要优于 Hive。我们建议您阅读《Amazon EMR 开发人员指南》中的性能测试和查询优化部分,以便更好地估算集群需要为您的数据集和查询类型使用的内存资源量。压缩类型、分区和实际查询(联接数量、结果大小等等)都会影响所需的内存量。可以使用 EXPLAIN 语句来估算 Impala 查询所需的内存和其他资源量。

问:如果我的查询内存不足,会发生什么情况?

如果内存不足,查询将失败,受影响的节点上安装的 Impala 守护进程将关闭。随后,Amazon EMR 将在此节点上重新启动守护进程,以使 Impala 准备好运行另一个查询。此节点上的 HDFS 中的数据仍然可用,因为只有在此节点上运行的守护进程会关闭,而不是整个节点本身。对于使用 Impala 执行的临时分析,查询用时通常只有几秒钟;因此,如果查询失败,您可以迅速发现问题并能够快速、连续提交新的查询。

问:Impala 是否支持用户定义的函数?

是,Impala 支持用户定义的函数 (UDF)。可以使用 Java 或 C++ 编写特定于 Impala 的 UDF。此外,还可以修改为 Hive 创建的 UDF 或用户定义的聚合函数,以便与 Impala 结合使用。

问:供 Impala 查询的数据存储在哪里?

Impala 查询 HDFS 或 HBase 表中的数据。

问:我能否在集群上同时运行 Impala 和 MapReduce?

可以,您可以使用 Impala 和 MapReduce 建立一个多租户集群。但您应确保在 Hadoop 2.x 上使用 YARN 将资源(内存、磁盘和 CPU)分配给每个应用程序。分配的资源应当取决于您计划在每个应用程序上执行的任务的需求。

问:Impala 是否支持 ODBC 和 JDBC 驱动程序?

在安装了业务情报工具的客户端计算机上,使用 SSH 或 VPN,通过端口 21050 将 JDBC 驱动程序连接到 Impala 集群的主节点。有关更多信息,请参阅打开通向主节点的 SSH 隧道

使用 PIG

问:什么是 Apache PIG?

PIG 是一个在 Hadoop 之上运行的开源分析软件包。PIG 由一种名为 PIG Latin 的基于 SQL 的语言进行操作,用户可以使用该语言构建、汇总和查询存储在 Amazon S3 中的数据源。除了类似于 SQL 的运算以外,PIG Latin 还增加了对 map/reduce 函数和复杂的可扩展用户定义数据类型的强大支持。此功能允许处理复杂甚至非结构化的数据源,例如文本文档和日志文件。PIG 允许通过用 Java 编写并通过 Amazon S3 中的存储部署的用户定义函数进行用户扩展。

问:如果 PIG 在 Amazon EMR 上运行,我可以做什么?

将 PIG 与 Amazon EMR 结合使用时,您可以使用熟悉的类 SQL 语言和 Amazon EMR 提供的易于使用的工具来实施复杂的数据处理应用程序。借助 Amazon EMR,您可以将 PIG 应用程序转换为可靠的数据仓库,以执行数据分析、监控和业务情报收集等任务。

问:如何开始在 Amazon EMR 上运行 PIG?

首先最好查看我们位于此处的书面文档。

问:PIG 中是否有专门用于 Amazon EMR 的新功能?

是。三项新功能让 PIG 在与 Amazon EMR 结合使用时变得更加强大,这些功能包括:

a/ 访问多个文件系统。默认情况下,PIG 任务只能访问一个远程文件系统,无论是 HDFS 存储还是 S3 存储桶,用于存放输入、输出和临时数据。EMR 扩展了 PIG,因此任何任务都可以访问任意数量的文件系统。这样可以获得一个优势:临时的任务内数据始终存储在本地 HDFS 中,因此提高了性能。

b/ 从 S3 加载资源。EMR 扩展了 PIG,允许来自于 S3 文件系统的自定义 JAR 和脚本,例如 REGISTER s3:///my-bucket/piggybank.jar。

c/ 用于处理字符串和 DateTime 的附加 Piggybank 函数。

问:支持哪些类型的 PIG 集群?

PIG 支持两种类型的集群:交互式集群和批处理集群。在交互模式下,客户可以直接在主节点上启动一个集群,并以交互方式运行 PIG 脚本。此模式通常用于执行临时数据分析和应用程序开发。在批处理模式下,PIG 脚本存储在 Amazon S3 中,并在集群启动时被引用。批处理模式通常用于可重复的任务,例如生成报告。

问:如何启动 PIG 集群?

批处理集群和交互式集群都可以从 Amazon 管理控制台、EMR 命令行客户端或 API 启动。

问:Amazon EMR 支持哪个版本的 PIG?

Amazon EMR 支持多个版本的 PIG。

问:我能否同时从两个集群向 S3 存储桶写入数据?

可以,您能够从两个并发集群向同一个存储桶写入数据。

问:我能否在集群之间共享 S3 中的输入数据?

可以,您能够从两个并发集群读取 S3 中的相同数据。

问:能否在多个用户之间共享数据?

是。可以使用此处介绍的标准 Amazon S3 共享机制来共享数据。

问:我应当运行一个大型集群,然后在多个用户之间共享此集群,还是在多个小型集群之间共享此集群?

Amazon EMR 提供了一个独特的功能,以使您能够使用这两种方法。一方面,当处理常规批处理工作负载时,一个大型集群可能更为高效。另一方面,如果需要执行临时查询或处理随时间变化的工作负载,则可以选择创建多个单独的集群,以适应共享存储在 Amazon S3 中的数据源的特定任务。

问:我能否访问本地文件系统上的脚本或 jar 资源?

不能。必须首先将脚本或 jar 上载到 Amazon S3 或者集群的主节点,才能引用此脚本或 jar。要上载到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。

问:我能否运行持久性集群,以执行多个 PIG 查询?

是。您需要在手动终止模式下运行集群,以防止它在 PIG 步骤之间终止。为了降低数据丢失的风险,我们建议定期将所有的重要数据持久保留在 Amazon S3 中。最好定期将工作传输到新集群,以测试从主节点故障中恢复的过程。

问:PIG 是否支持从 JDBC 访问?

不支持。PIG 不支持通过 JDBC 进行访问。 

使用 HBase

问:什么是 Apache HBase?

HBase 是仿照 Google 的 BigTable 进行建模的开源、非关系、分布式数据库。它的开发是 Apache Software Foundation 的 Hadoop 项目的一部分,而且它在 Hadoop 分布式文件系统 (HDFS) 上方运行,以便为 Hadoop 提供类似于 BigTable 的功能。HBase 为您提供一种具有容错能力的高效方式,以采用基于列的压缩和存储来存储大量稀疏数据。此外,HBase 还可以快速查找数据,因为数据存储在内存中而不是磁盘上。HBase 针对顺序写入操作进行过优化,可非常高效地批处理插入、更新与删除。HBase 与 Hadoop 无缝兼容,共享它的文件系统并充当 Hadoop 任务的直接输入和输出。HBase 还与 Apache Hive 集成,实现对 HBase 表进行类似 SQL 的查询、与基于 Hive 的表联接,以及支持 Java 数据库连接 (JDBC)。

问:HBase 中是否有专门用于 Amazon EMR 的新功能?

借助 Amazon EMR,您可以使用 Amazon S3 上的 HBase 将集群的 HBase 根目录和元数据直接存储到 Amazon S3,并创建只读副本和快照。请查看我们的文档以了解更多信息。

问:Amazon EMR 支持哪些版本的 HBase?

您可以在此处查看 Amazon EMR 支持的最新 HBase 版本。

Kinesis Connector

问:EMR Connector to Kinesis 可执行哪些操作?

此连接器使 EMR 能够直接读取和查询 Kinesis 流中的数据。现在,可以使用现有的 Hadoop 生态系统工具(例如 Hive、PIG、MapReduce、Hadoop Streaming 和 Cascading)对 Kinesis 流执行批处理。

问:EMR connector to Kinesis 可执行哪些我以前无法执行的操作?

要读取和处理 Kinesis 流中的数据,需要编写、部署和维护独立的流式处理应用程序。这需要投入很多的时间和精力。而使用此连接器,只需编写一个简单的 Hive 或 PIG 脚本,即可开始读取和分析 Kinesis 流。这意味着您可以使用 SQL 来分析 Kinesis 流! 当然,也可以使用其他的 Hadoop 生态系统工具。您无需开发或维护一组新的处理应用程序。

问:此功能能够让哪些人员受益?

下面这几种用户会发现此集成非常有用:

  • 希望利用一组完备的 Hadoop 生态系统工具来分析 Kinesis 流的 Hadoop 用户。
  • 正在寻求一种简单的方法,以利用 Kinesis 数据流式处理和 ETL 实现启动和运行的 Kinesis 用户。
  • 希望使用熟悉的工具(例如 SQL [通过 Hive] 或脚本语言(例如 PIG)对 Kinesis 流中的数据执行临时分析的业务分析师和 IT 专业人员。

问:此集成有哪些使用案例?

下面是此集成支持的一些具有代表性的使用案例:

  • 流式日志分析:可以分析流式网络日志,以便每隔几分钟按区域、浏览器和访问域生成 10 大错误类型的列表。
  • 复杂的数据处理工作流:可以将 Kinesis 流与存储在 S3、DynamoDB 表和 HDFS 中的数据联接。可以编写查询,以便将来自 Kinesis 的点击流数据与存储在 DynamoDB 表中的广告活动信息联接,从而确定在特定的网站上展示的最有效的广告类别。
  • 临时查询:可以定期将数据从 Kinesis 加载到 HDFS 中,并将它们作为本地 Impala 表提供,以执行快速、交互式的分析查询。

问:我需要哪个 EMR AMI 版本才能使用此连接器?

您需要使用 EMR 的 AMI 版本 3.0.4 和更高版本。

问:此连接器是否是一个独立的工具?

不式,它是 Hadoop 的 Amazon 发行版的一个内置组件,存在于 EMR AMI 3.0.4 和更高版本中。客户只需启动一个具有 AMI 3.0.4 或更高版本的集群,即可开始使用此功能。

问:要允许 EMR 读取 Kinesis 流中的数据,需要使用哪种数据格式?

EMR Kinesis 集成并不特定于数据格式。您可以读取任何格式的数据。各个 Kinesis 记录将作为标准记录呈现给 Hadoop,可以使用任何 Hadoop MapReduce 框架来读取这些记录。Hive、PIG 和 Cascading 等单独框架内置了有助于序列化和反序列化的组件,使开发人员能够轻松从多种格式查询数据,而无需实现自定义代码。例如,在 Hive 中,用户可以在定义表时指定适当的 Hive SerDe,以便从 JSON 文件、XML 文件和 SEQ 文件中读取数据。Hadoop 用户可以利用 Hadoop 适配器组成的全面生态系统,而无需编写特定于格式的代码。您还可以实施自定义反序列化格式,以便在任一种这样的工具中读取特定于域的数据。

问:如何在 EMR 中使用 Hive 来分析 Kinesis 流?

创建一个引用 Kinesis 流的表。随后,可以像分析 Hive 中的任何其他表那样分析此表。有关更多详细信息,请查看我们的教程

问:使用 Hive,如何创建将 Kinesis 流数据与其他数据源组合在一起的查询?

首先创建一个引用 Kinesis 流的表。创建 Hive 表之后,可以将它与映射到 Amazon S3、Amazon DynamoDB 和 HDFS 等其他数据源的表联接。这样可以有效地将 Kinesis 流中的数据联接到其他数据源。

问:此集成是否只适用于 Hive?

不是,您可以使用 Hive、PIG、MapReduce、Hadoop Streaming 和 Cascading。

问:如何将计划的任务设置为在 Kinesis 流上运行?

EMR Kinesis 输入连接器提供的功能可以帮助您在传统的调度引擎(例如 Cron)中配置和管理计划的定期任务。例如,您可以开发一个每 N 分钟运行一次的 Hive 脚本。在任务的配置参数中,可以为任务指定一个逻辑名称。逻辑名称是一个标签,用于向 EMR Kinesis 输入连接器告知任务的各个实例是同一个定期计划的成员。逻辑名称允许进程利用迭代,下面将对此进行说明。

由于 MapReduce 是一个批处理框架,因此为了使用 EMR 来分析 Kinesis 流,需要将连续流分成几个批次。每个批次都被称为一个迭代。每个迭代都被分配一个以 0 开头的数字。每个迭代的边界都由起始序列号和终止序列号定义。随后由 EMR 依次处理迭代。

如果尝试失败,EMR Kinesis 输入连接器会在逻辑名称内从迭代的已知起始序列号重新尝试迭代。此功能可确保对同一个迭代的连续尝试具有与之前的尝试完全相同的来自 Kinesis 流的输入记录。这样可以保证 Kinesis 流的幂等(一致)处理。

可以在相应的 Hadoop 工具中将逻辑名称和迭代指定为运行时参数。例如,在教程的“使用检查点运行查询”部分中,代码示例显示了一个计划的 Hive 查询,还为查询指定了一个逻辑名称,并随着任务的每次连续运行而递增迭代次数。

此外,教程中还提供了一个 cron 调度脚本示例。

问:逻辑名称和迭代的元数据存储在哪里?

允许 EMR Kinesis 输入连接器在计划的定期工作流中工作的元数据存储在 Amazon DynamoDB 中。必须预置一个 Amazon DynamoDB 表,并将其指定为 Hadoop 任务的输入参数。为此表配置适当的 IOPS 以支持此集成非常重要。有关设置 Amazon DynamoDB 表的更多信息,请参阅入门教程

问:当迭代处理失败时,会发生什么情况?

迭代标识符是用户提供的值,它们映射到 Kinesis 流中的特定边界(起始序列号和终止序列号)。与这些边界对应的数据将在 MapReduce 任务的 Map 阶段加载。此阶段由框架管理,当任务失败时,会自动重新执行此阶段(默认执行三次)。如果所有重试都失败,您仍然可以选择从上次成功的数据边界或以前的数据边界开始重新尝试进行处理。这一行为是由在处理过程中提供的 kinesis.checkpoint.iteration.no 参数控制的。 

问:我能否在同一个迭代中运行多个查询?

可以,您可以在连续处理中设置 kinesis.checkpoint.iteration.no 参数,以指定之前运行的迭代。此实现可确保对同一个迭代的连续运行具有与之前的运行完全相同的来自 Kinesis 流的输入记录。

问:如果迭代中的记录从 Kinesis 流中过期,会发生什么情况?

如果迭代的起始序列号和/或终止序列号属于从 Kinesis 流中过期的记录,Hadoop 任务将失败。您需要使用另一个逻辑名称,从 Kinesis 流开始时处理数据。

问:我能否将数据从 EMR 推送到 Kinesis 流?

不能。EMR Kinesis 连接器目前不支持将数据写回到 Kinesis 流。

问:用于 Kinesis 的 EMR Hadoop 输入连接器是否支持连续流式处理?

Hadoop MapReduce 框架是一个批处理系统。因此,它不支持连续查询。但可以使用一组新兴的 Hadoop 生态系统框架,例如 Twitter Storm 和 Spark Streaming,它们使开发人员能够构建用于连续流式处理的应用程序。 

此外,开发人员还可以利用 Kinesis 客户端库来开发实时流式处理应用程序。您可以在此处的 Kinesis 文档中找到有关如何开发自定义 Kinesis 应用程序的更多信息。

问:我能否指定访问凭证,以读取在另一个亚马逊云科技账户中管理的 Kinesis 流?

是。通过指定拥有 Kinesis 流的账户的相应访问凭证,您可以读取另一个亚马逊云科技账户中的流。默认情况下,Kinesis Connector 使用创建集群时由用户指定并提供的访问凭证。通过设置 kinesis.accessKey 和 kinesis.secretKey 参数,您可以覆盖这些凭证,以访问其他亚马逊云科技账户中的流。以下示例说明了如何在 Hive 和 PIG 中设置 Kinesis.accessKey 和 Kinesis.secretKey 参数。

Hive 的代码示例:
...
STORED BY
'com.amazon.emr.kinesis.hive.KinesisStorageHandler'
TBLPROPERTIES(
"kinesis.accessKey"="AwsAccessKey",
"kinesis.secretKey"="AwsSecretKey",
);

PIG 的代码示例:

raw_logs = LOAD 'AccessLogStream' USING com.amazon.emr.kinesis.pig.Kin
esisStreamLoader('kinesis.accessKey=AwsAccessKey', 'kinesis.secretKey=AwsSecretKey'
) AS (line:chararray);

问:我能否对单个 Kinesis 流运行多个并行查询? 对性能有影响吗?

可以,客户可以为每个查询使用单独的逻辑名称,以便对同一个流运行多个并行查询。但从 Kinesis 流内的分区读取的速率限制为 2MB/秒。因此,如果对同一个流运行 N 个并行查询,对于流中的每个分区,每个查询将获得大约 (2/N) MB/秒的输出速率。这样可能会减缓处理速度,在某些情况下会导致查询失败。

问:我能否在 EMR 中联接并分析多个 Kinesis 流?

可以,比如在 Hive 中,您可以创建两个表,将它们映射到两个不同 Kinesis 流,并在这两个表之间创建联接。

问:EMR Kinesis Connector 是否处理 Kinesis 扩缩事件,例如合并和拆分事件?

是。此实现会处理拆分和合并事件。Kinesis Connector 将各个 Kinesis 分区(Kinesis 流内的逻辑扩展单元)与 Hadoop MapReduce map 任务关联在一起。在迭代的逻辑周期内存在于一个流中的每个唯一分区将只生成一个 map 任务。如果发生分区拆分或合并事件,Kinesis 将提供新的唯一分区 ID。因此,MapReduce 框架将预置更多的 map 任务,以便从 Kinesis 读取数据。所有这些操作对用户都是透明的。

问:如果我的流中出现一段时间的“静默”,会发生什么情况?

此实现允许您配置一个名为 kinesis.nodata.timeout 的参数。例如,考虑这样一个场景:kinesis.nodata.timeout 设置为 2 分钟,而您希望每 10 分钟运行一次 Hive 查询。此外,考虑自上次迭代(10 分钟前)以来已将一些数据写入到流中。但目前没有任何新记录到来,也就是说,流中出现了“静默”。在这种情况下,当查询的当前迭代启动时,Kinesis Connector 会发现没有任何新记录到来。连接器会继续对此流轮询 2 分钟,如果在这段时间内没有任何记录到达,它将停止,并只处理当前的流批次中已读取的那些记录。但如果在达到 kinesis.nodata.timeout 超时时间之前开始有新的记录到来,连接器将等待与名为 kinesis.iteration.timeout 的参数相对应的另一个时间间隔。请查看教程,以了解如何定义这些参数。

问:如何调试在每次迭代中依然失败的查询?

当处理失败时,您可以利用调试人员当前在调试 Hadoop 任务时使用的那些工具。包括 Amazon EMR Web 控制台,它可以帮助识别和访问错误日志。可以在此处查看有关调试 EMR 任务的更多详细信息。

问:如果我指定了一个我无权访问的 DynamoDB 表,会发生什么情况?

任务将失败,任务的错误日志中将出现异常。

问:如果任务没有失败,但 DynamoDB 的检查点操作失败,会发生什么情况?

任务将失败,任务的错误日志中将出现异常。

问:如何最大限度地提高从 Kinesis 流向 EMR 读取数据时的吞吐量?

Kinesis 流的吞吐量随着使用的实例大小和 Kinesis 流中的记录大小而增加。对于此功能的主节点和核心节点,我们建议使用 m1.xlarge 和更高版本。 

服务等级协议

问:什么是 Amazon EMR 服务等级协议?

请参阅服务等级协议

问:Amazon EMR 服务等级协议提供了哪些内容?

亚马逊云科技将作出在商业上合理的努力,保证在任何月度计费周期内,每项 Amazon EMR 服务在各个亚马逊云科技中国区域的月度正常运行时间百分比至少为 99.9%(以下简称“服务承诺”)。

问:如果你们未履行自己的服务承诺,会发生什么情况?

如果任何 Amazon EMR 服务不符合服务承诺,您将有资格获得服务积分。

详细了解 Amazon EMR 定价

访问定价页面
准备好开始构建了吗?
Amazon EMR 入门

开始使用亚马逊云科技免费构建

开始使用亚马逊云科技免费构建

关闭
热线

热线

1010 0766
由光环新网运营的
北京区域
1010 0966
由西云数据运营的
宁夏区域