开始使用 Amazon EMR

创建免费账户

如果您的数据处理需求规模庞大,可以申请更低的价格。

联系我们了解详细情况。



问:什么是 Amazon EMR?

Amazon EMR 是一种 Web 服务,它能让企业、研究人员、数据分析师和开发人员能够轻松、经济高效地处理海量数据。它是一种托管的 Hadoop 框架,基于 Web 规模的 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Simple Storage Service (Amazon S3) 基础架构运行。

问:Amazon EMR 有什么作用?

Amazon EMR 能即时灵活配置自身所需容量大小,执行数据密集型应用计算,完成诸如 Web 索引、数据挖掘、日志文件分析、机器学习、财务分析、科学模拟和生物信息研究等任务。Amazon EMR 技术让您专注于数据分析,无需担心费时的 Hadoop 集群设置、管理或调整,也无需担心所需要的计算能力。

Amazon EMR 可有效解决需要快速、高效处理大量数据之类的问题。借助 Web 服务界面,您可以构建处理工作流程并以编程方式监控集群的运行进度。此外,您还可以使用 AWS 管理控制台简洁的 Web 界面启动集群,并监控对 Amazon EC2 实例集群进行的处理密集型计算。

问:谁可以使用 Amazon EMR?

希望以简便的方式实现强大数据分析的任何用户都可使用 Amazon EMR。您无需具备任何软件开发经验,即可试用开发人员指南AWS Big Data Blog 中提供的多种示例应用程序。

问:使用 Amazon EMR 可以做到哪些之前我无法做到的事情?

对于耗时的设置和管理工作,Amazon EMR 可大幅降低其复杂性。和优化数据所在的 Hadoop 集群或计算容量的复杂程度。您在几分钟内即可立即开始加速处理大型 Hadoop 集群,无需等待数小时或数天。 除非您另有指定,否则集群在完成处理后将自动终止,因此您无需为不再需要的资源付费。

使用此服务,可以快速执行应用程序的数据密集型任务,例如,Web 检索、数据挖掘、日志文件分析、机器学习、财务分析、科学模拟及生物信息研究。

作为软件开发人员,您也可以运行自己更为复杂的应用程序,允许您添加计划、工作流、监控等其他特性与功能。

问:Amazon EMR 后台采用什么数据处理引擎?

Amazon EMR 采用 Apache Hadoop 作为其分布式数据处理引擎。Hadoop 是一种开源 Java 软件框架,支持在商用硬件大型集群中运行的数据密集型分布式应用程序。Hadoop 实施名为“MapReduce”的编程模型,其中的数据可分为许多小的工作段,每个工作段都可在集群的任何节点上执行。该框架已在开发人员、企业和初创公司中广泛运用,并被证明是可靠的软件平台,可在数千台商用机器的集群中处理多达数 PB 的数据。

问:什么是 Amazon EMR 集群?

Amazon EMR 的“集群”传统上指的是 Amazon EMR 集群(以及分配给该集群的所有处理步骤)。 每个集群都会有一个以“j-”开头的唯一标识符。

问:什么是集群步骤?

集群步骤是由用户定义的处理单位,大约与操作数据的一种算法相对应。 一个步骤就是作为以 Java、Ruby、Perl、Python、PHP、R 或 C++ 编写的 Java Jar 或流程序实施的 Hadoop MapReduce 应用程序。例如,要计算文档中单词的出现频率并按计数排序输出它们,第一步则是计算每个单词出现次数的 MapReduce 应用程序,第二步是根据计数对第一步的输出排序的 MapReduce 应用程序。

问:集群有哪些不同的状态?

STARTING – 集群预置、启动和配置 EC2 实例。
BOOTSTRAPPING – 集群上正在执行引导操作。
RUNNING – 集群当前正在运行的步骤。
WAITING – 集群当前处于活动状态,但没有运行步骤。
TERMINATING – 集群正在关闭。
TERMINATED – 集群已在未发生错误的情况下关闭。
TERMINATED_WITH_ERRORS – 集群在发生错误的情况下关闭。

问:步骤有哪些不同的状态?

PENDING – 该步骤正在等待运行。
RUNNING – 该步骤当前正在运行。
COMPLETED – 该步骤已成功完成。
CANCELLED – 该步骤在运行前被取消,因为上一步出现故障或集群在运行前已终止。
FAILED – 该步骤在运行中出现故障。

问:EMR 最佳做法有哪些?

如果您在生产中运行 EMR,那么应该指定 AMI 版本、Hive 版本、Pig 版本等等, 以确保版本不会出现意外更改(例如,当 EMR 稍后添加对于较新版本的支持时就会如此)。 如果您的集群属于关键任务型,那么请仅在任务节点上使用竞价型实例,因为竞价型实例价格上涨时您会失去这些实例。 在开发中,请使用记录并启用调试以便更快地找出和纠正错误。 如果您使用的是 GZIP,请将文件大小控制在 1 – 2GB 之间,因为 GZIP 文件无法拆分。 单击此处下载有关 Amazon EMR 最佳实践的白皮书。

返回页首 >>


问:如何访问 Amazon EMR?

您可以使用 AWS 管理控制台、命令行工具、软件开发工具包或者 EMR API 访问 Amazon EMR。

问:如何启动集群?

您可以通过在 AWS 管理控制台中填写简单的集群请求表启动集群。 在请求表中,需要指定集群的名称、Amazon S3 中输入数据的位置、处理应用程序、理想的数据输出位置、希望使用的 Amazon EC2 实例数量和类型。 您也可以指定一个存储集群日志文件和 SSH 密钥的位置,以便在集群运行时进行登录。 此外,您可以使用 RunJobFlow API 或在命令行工具中使用 ‘create’ 命令启动集群。

问:如何开始使用 Amazon EMR?

要注册 Amazon EMR,请单击 Amazon EMR 详细信息页面 http://aws.amazon.com/elasticmapreduce 中的“立即注册”按钮。您必须注册 Amazon EC2 和 Amazon S3 才能访问 Amazon EMR;如果您尚未注册这些服务,在 Amazon EMR 注册过程中系统将会提示您进行注册。注册后,请参阅 Amazon EMR 文档,其中包括我们的“入门指南”,能够很好地协助您开始使用此服务。

问:如何终止集群?

您可以随时在 AWS 管理控制台中选择集群并单击“终止”按钮来终止集群。 此外,也可以使用 TerminateJobFlows API。如果终止正在运行的集群,Amazon S3 中尚未保存的任何结果都将丢失,并且所有 Amazon EC2 实例都会关闭。

问:Amazon EMR 是否支持多个集群同时操作?

是。即使已在运行一个或多个集群,您也可以随时创建新的集群。

问:我可以同时运行多少个集群?

您可以根据需要运行任何数量的集群。 但在所有集群中,运行的实例数限额为 20 个。 如果需要更多实例,请填写 Amazon EC2 实例请求表和您的使用案例,我们将考虑增加您的实例数。如果您的 Amazon EC2 限额已提升,将会对您的 Amazon EMR 集群应用新的限额。

返回页首 >>


问:可以在哪里找到代码示例?

有关示例代码,请参阅这些文章和教程

问:如何开发数据处理应用程序?

您可以在台式机中开发数据处理任务,例如使用 Eclipse 或 NetBeans 插件(如适用于 Eclipse (http://www.alphaworks.ibm.com/tech/mapreducetools) 或 Karmasphere Studio () 的 IBM MapReduce 工具)。 使用这些工具,可以轻松地开发和调试 MapReduce 任务,并在自己的机器中对它们进行本地测试。此外,您可以使用一个或多个实例直接在 Amazon EMR 开发自己的集群。

问:使用命令行工具或 API 及 AWS 管理控制台有什么优势?

命令行工具或 API 能够以编程方式启动和监控集群的运行进度、围绕集群创建更多自定义的功能(例如,对多个处理步骤排序、计划、工作流或监控)或为其他 Amazon EMR 客户构建增值工具或应用程序。相比而言,AWS 管理控制台提供易用的图形界面,可以直接从 Web 浏览器启动和监控集群。

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

是。一旦任务运行后,您可以通过 AddJobFlowSteps API 选择性地添加更多步骤。AddJobFlowSteps API 将向当前的步骤序列结尾添加新的步骤。您可能希望使用此 API 在集群中执行条件逻辑或进行调试。

问:是否可运行持续性的集群?

是。使用 –alive 标记启动的 Amazon EMR 集群将一直运行,直到被明确终止。这样,允许客户根据需要向集群添加步骤。 您可能希望使用此服务来调试应用程序,而不必重复等待集群启动。 您也可以使用持续性的集群来运行长时间运行的数据仓库集群。 它们可以与 Hadoop 顶部运行的数据仓库和分析软件包(如 Hive 和 Pig)结合使用。

问:当集群完成时,我是否会收到通知?

您可以注册 Amazon SNS。注册完成后,就可以在您的 SNS 主题中收到该集群的帖子。 您还可以在 AWS 管理控制台上查看集群进度,或者使用命令行、软件开发工具包或者 API 获取集群的状态。

问:Amazon EMR 支持哪些编程语言?

您可以使用 Java 执行 Hadoop 自定义 Jar。此外,也可以通过 Hadoop 流使用包括 Perl、Python、Ruby、C++、PHP 和 R 在内的其他语言。请参阅开发人员指南,了解使用 Hadoop 流的相关说明。

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

当前,Amazon EMR 支持 32 位和 64 位模式的 Debian/Squeeze。

问:当集群运行时,是否可查看 Hadoop UI?

是。请参阅开发人员指南中的 Hadoop UI 部分,了解如何访问 Hadoop UI 的相关说明。

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

是。推荐使用引导操作在集群中安装第三方软件包。此外,您可以将任何第三方库直接打包到您的 Mapper 或 Reducer 可执行文件。此外,也可以使用 Hadoop 分布式缓存机制上传静态编译的可执行文件。

问:Amazon EMR 支持哪些 Hadoop 版本?

有关 Amazon EMR 支持的最新版本,请参阅该文档

问:是否可使用 Hadoop 以外的其他数据处理引擎?

是,一些 EMR 客户将 Spark 和 Shark(内存中 MapReduce 和数据仓库)用作处理引擎。 有关如何操作的指导说明,请参阅这篇文章

问:Amazon 是否有助于 Hadoop 改进开源社区?

是。Amazon EMR 积极参与开源社区,并为 Hadoop 源代码贡献了许多修复程序。

问:Amazon EMR 是否可更新其支持的 Hadoop 版本?

Amazon EMR 会根据社区发布的 Hadoop,定期更新其支持的 Hadoop 版本。Amazon EMR 可能会选择跳过一些 Hadoop 版本。

问:Amazon EMR 多长时间后会不再支持 Hadoop 旧版本?

Amazon EMR 服务会在 Hadoop 版本过期几个月后不再支持旧版本。但是,Amazon EMR API 可以向后兼容,所以如果您基于这些 API 构建工具,即便在 Amazon EMR 更新其使用的 Hadoop 版本后,也可以使用它们。

返回页首 >>


问:如何调试集群?

在 AWS 管理控制台,首先选择要调试的集群,然后单击“调试”按钮以访问调试集群窗口。 这让您能够跟踪集群的进度,并发现集群步骤、任务、任务或任务尝试中的问题。 此外,您可以直接 SSH 到运行您集群的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,并使用喜欢的命令行调试程序来排除集群故障。

问:什么是集群调试工具?

集群调试工具是 AWS 管理控制台的一部分,从中可以跟踪集群的进度,并发现集群步骤、任务、任务或任务尝试中的问题。 要访问集群调试工具,请首先选择要调试的集群,然后单击“调试”按钮。

问:如何对集群启用调试?

要启用调试,您需要在创建集群时在 AWS 管理控制台中设置“Enable Debugging”旗标。此外,也可以在创建集群时在命令行客户端中传送 --enable-debugging 和 --log-uri 标志

问:在哪里可以找到调试集群窗口的使用说明?

请参阅开发人员指南的 AWS 管理控制台部分,了解如何访问和使用调试集群窗口的相关说明。

问:使用调试集群窗口可以调试哪些类型的集群?

您可以调试 Amazon EMR 当前支持的所有类型的集群,包括自定义 jar、流、Hive 和 Pig。

问:为什么必须注册 Amazon SimpleDB 才能使用集群调试?

Amazon EMR 将在您的 Amazon SimpleDB 账户下存储 Hadoop 作业、任务和任务尝试的状态信息。您可以在此订阅 Amazon SimpleDB。

问:是否可以不订阅 Amazon SimpleDB,就使用集群调试功能?

如果不订阅 Amazon SimpleDB,您可以浏览集群步骤和步骤日志,但不能浏览 Hadoop 任务、任务或任务尝试。

问:是否可从 Amazon SimpleDB 中删除历史集群数据?

是。您可以删除 Amazon EMR 代表您创建的 Amazon SimpleDB 域。有关说明,请参阅 Amazon SimpleDB 文档

返回页首 >>


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

您可以使用 Amazon S3 API 将数据上传到 Amazon S3。此外,您可以使用许多开源或商用客户端轻松将数据上传到 Amazon S3。

问:如何获得已完成集群的日志?

Hadoop 系统日志及用户日志存放在您在创建集群时指定的 Amazon S3 存储段中。

问:您是否会压缩日志?

不会。目前,Amazon EMR 在将日志迁移到 Amazon S3 时,不会压缩日志。

问:是否可从 Internet 或 Amazon S3 以外的其他位置加载数据?

是。您的 Hadoop 应用程序可从 Internet 上的任何位置或其他 AWS 服务加载数据。请注意,如果从 Internet 加载数据,将会应用 EC2 带宽费用。Amazon EMR 还能基于 Hive 访问 DynamoDB 中的数据。

返回页首 >>


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

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

问:Amazon EMR 的收费如何?

对于其他 AWS 服务,您仅需按使用量付费。没有最低费用,也无需预先承诺或长期购买。Amazon EMR 的费用是在 Amazon EC2 和 Amazon S3 标准定价之外收取的。

有关 Amazon EMR 定价消息,请访问 EMR 的定价页

Amazon EC2、Amazon S3 和 Amazon SimpleDB 是单独计费的。Amazon EMR 定价的依据是从集群开始处理直至集群终止,每种实例类型消耗的实例小时。运行未满一小时的实例,将按一小时计费。有关 Amazon EC2 实例类型、Amazon EC2 竞价型实例定价、Amazon EC2 预留实例定价、Amazon S3 定价或 Amazon SimpleDB 定价的更多详细信息,请参阅以下链接:

Amazon EC2 实例类型

Amazon EC2 预留实例定价

Amazon EC2 竞价型实例定价

Amazon S3 定价

Amazon SimpleDB 定价

问:Amazon EMR 集群的账单周期如何计算?

账单从 Amazon EMR 开始运行集群开始。您只需要为实际使用的资源而付费。例如,假定您为 Amazon EMR 集群启动了 100 个 Amazon EC2 标准小型实例,Amazon EMR 计费方式为每个实例每小时费用为 0.015 USD。Amazon EC2 实例将立即启动,但并非在同一时刻全部启动。Amazon EMR 将在每个实例启动时开始跟踪,并将其签入集群中,以便它能够接受处理任务。

在您发出启动请求的最初 10 分钟之内,Amazon EMR 将启动您的集群(如果您所有实例均可用)或签入尽可能多的实例。一旦 10 分钟标记过后,请求的可用实例达到 90%,则 Amazon EMR 立即开始处理您的集群(并开始对其计费)。在签入剩余的 10% 已请求的实例后,Amazon EMR 也开始对这些实例计费。

所以,在上述示例中,如果您请求的 100 个实例在请求启动后 10 分钟内全部可用,则开始每小时计费 1.50 USD(100 * 0.015 USD)直到集群完成。 如果在 10 分钟标记内仅有 90 个请求的实例可用,则只要运行您的集群的该实例数目不变,每小时计费 1.35 USD(90 * 0.015 USD)。 一旦其余的 10 个实例签入后,每小时计收费 1.50 USD(100 * 0.015 USD)直到集群的剩余部分完成。

所有集群将会一直运行,直至出现以下情况终止:您使用 TerminateJobFlows API 调用(或等价工具)终止集群;集群自行关闭;集群由于软件或硬件故障而终止。 未满一小时的实例按一小时计费。

问:在哪里可以跟踪我的 Amazon EMR、Amazon EC2 和 Amazon S3 使用情况?

您可以在“账单与收费管理控制台”跟踪您的使用情况。

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

在 AWS 管理控制台中,每个集群都有一栏“标准实例小时数”,显示该集群大约所使用的计算小时数。“标准实例小时数”是基于“1 小时 m1.small 用量 = 1 小时标准计算时间”得出的计算时间小时数。下表概述了计算各种实例大小的标准实例小时数所用的标准化因子:

实例大小 标准化因子
小型 1
中型 2
大型 4
超大型 8
2xlarge 16
4xlarge 32
8xlarge 64

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

这只是大致时间,不应用作账单。请参阅“账单与收费管理控制台”,了解可计费的 Amazon EMR 使用量。请注意,近期我们更改了标准化因子以期准确反映实例权重,但是标准化因子并不会反映您的月度账单。

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

是。Amazon EMR 可无缝支持按需实例、竞价型实例和预留实例。单击此处详细了解 Amazon EC2 预留实例。单击此处详细了解 Amazon EC2 竞价型实例。


问:你们的价格包括税费吗?

除非另行说明,否则我们的价格不包括适用的税费和税收(包括增值税和适用销售税)。使用日本账单地址的客户若使用亚太地区(东京),则需承担日本消费税。了解更多

返回页首 >>


问:在集群执行过程中,如何防止其他用户查看我的数据?

Amazon EMR 在两个 Amazon EC2 安全组中启动您的实例,一组用于主实例,另一组用于从实例。主安全组的端口是开放的,以便与服务进行通信。它的 SSH 端口也呈开放状态,以允许您使用启动时指定的密钥 SSH 到实例。从实例在单独的安全组中启动,仅允许与主实例进行交互。默认情况下,两个安全组都设置为不允许从属于其他客户的 Amazon EC2 实例等外部源进行访问。由于这些是您账户内的安全组,所以您可以使用标准 EC2 工具或控制面板重新配置它们。单击此处详细了解 EC2 安全组。

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

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

问:我能否获得我的账户上所有的 EMR API 调用历史记录以用于安全或合规性审计?

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

返回页首 >>


问:Amazon EMR 如何运用可用区域?

Amazon EMR 可启动同一 Amazon EC2 可用区域中给定集群的所有节点。在同一可用区内运行集群可提高任务流的性能,因为它可提供更高的数据访问速率。默认情况下,Amazon EMR 选择运行集群的可用资源最多的可用区域。不过,如果需要,您可以指定其他可用区。

问:在哪些区域可以使用 Amazon EMR?

要了解支持 Amazon EMR 的 AWS 区域列表,请访问所有 AWS 全球基础设施的 AWS 区域表

问:我应选择哪个地区来运行集群?

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

问:在美国地区运行的集群中是否可使用欧洲数据(反之亦然)?

是的,可以。如果您在不同的地区之间传输数据,将对您收取带宽费用。有关带宽定价信息,请访问 EC2 详细信息页面上的定价部分。

问:AWS GovCloud(美国)地区有何不同之处?

AWS GovCloud(美国)区域专为美国政府机构和客户而设计。它遵循 US ITAR 要求。在 GovCloud,EMR 不支持竞价型实例或启用调试功能。EMR 管理控制台在 GovCloud 尚不可用。

返回页首 >>


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

客户将其输入数据和数据处理应用程序上传到 Amazon S3。然后,Amazon EMR 按客户指定启动一定数量的 Amazon EC2 实例。该服务开始执行集群,同时使用 S3N 协议将输入数据从 Amazon S3 推入启动的 Amazon EC2 实例。一旦集群完成后,Amazon EMR 即可将输出数据传输到 Amazon S3,客户在此可以取回数据或将其用作其他集群的输入数据。

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

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

问:Amazon EMR 的可靠性如何?

Amazon EMR 使用 Amazon 高可用性、已经证实的网络基础设施和数据中心管理 Amazon EC2 的计算实例集群。Amazon EMR 使用业界已经证实的容错型 Hadoop 软件作为其数据处理引擎。Hadoop 将数据分隔为多个子集,并将每个子集分配到多个 Amazon EC2 实例中。所以,如果某个 Amazon EC2 实例无法处理一个数据子集,还可以使用其他 Amazon EC2 实例的结果。

问:集群启动、运行和处理输入数据的速度能有多快?

Amazon EMR 几乎可以立即启动 Amazon EC2 按需实例的资源预配置。如果实例不可用,Amazon EMR 将尝试为您的集群预配置资源,直到已预配置完成或已取消您的请求。以最大的努力完成实例预配置,具体取决于请求的实例数、集群的创建时间以及系统中的请求总数。 预置资源后,通常需要不到 15 分钟的时间来开始处理。

为保证您需要集群时的容量,您可以对 Amazon EC2 预留实例支付一次性费用来以折扣的小时费率预留中的实例容量。与按需实例相同,客户仅需为其实例运行的时间付费。这样,预留实例可让实例要求已知的企业维持按需实例的弹性和灵活性,同时进一步降低其预测的使用费用。

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

Amazon EMR 支持 12 种 EC2 实例类型,包括标准型、CPU 增强型、内存增强型、集群计算型、高 I/O 和高存储型。标准型实例的内存与 CPU 的比例适合大多数通用应用程序。CPU 增强型实例的 CPU 资源比例要高于内存 (RAM),因此非常适合计算密集型应用程序。内存增强型实例可提供高吞吐量应用程序所需的大内存。集群计算型实例具有较高的 CPU 比例,可提供更高的网络性能,非常适合高性能计算 (HPC) 应用程序和其他要求苛刻的网络绑定应用程序。高存储型实例提供了跨 24 块磁盘的 48 TB 存储量,非常适合要求顺序访问较大数据集(如数据仓储和日志处理)的应用程序。有关可用实例类型和各地区定价的详细信息,请参阅 EMR 定价页

问:如何选择正确的 Amazon EC2 实例类型?

在选择实例类型时,应当就资源使用率方面考量您的应用程序特点,选择最佳的实例系列。对于 Amazon EMR 选择 Amazon EC2 的优势之一是您只需按使用量付费,这使您能够方便地基于不同类型和数量的实例测试集群的性能,且经济实惠。启动若干小的集群并以此为基准测试您的集群,是确定最适合的实例类型的有效方式之一。

问:如何为我的集群选择正确数量的实例?

集群中使用的实例数取决于应用程序,并基于存储和处理数据所需的资源量以及完成任务认可的时间量。 一般而言,我们建议您限制 60% 的磁盘空间来存储要处理的数据,剩余空间用于中间输出。因此,假使 HDFS 上为 3 倍复制,如果您想在有 1 690GB 磁盘空间的 m1.xlarge 实例上处理 5 TB 数据,我们建议您的集群中至少包含 (5TB * 3) / (1 690GB * .6) = 15 m1.xlarge 个核心节点。 如果您的任务生成了大量中间数据或有很高的 I/O 要求,则可能要增加此数量。您也可能希望包含更多任务节点来提高处理性能。请参阅 Amazon EC2 实例类型,了解每个实例类型配置的本地实例存储的详细信息。

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

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

问:如果集群中的主节点出现故障,Amazon EMR 是否可以使其恢复?

不会。如果主节点出现故障,集群将会终止,您必须返回任务。 Amazon EMR 当前不支持主节点自动故障转移或主节点状态恢复。如果主节点出现故障,AWS 管理控制台将显示“主节点被终止”消息,向您指示启动新的集群。 客户可以在其集群中实施检查点,以便在 Amazon S3 中保存中间数据(在集群尚未缩减时创建的数据)。 这样,在出现故障时将能够从最后一个检查点恢复集群。

问:如果集群中的从节点出现故障,Amazon EMR 是否可以从其恢复?

是。Amazon EMR 对于从节点故障具有容错功能,当从节点出现故障时将继续执行任务。在当前版本中,Amazon EMR 不会自动预配置其他节点来接管出现故障的从节点。

问:是否可以 SSH 到我的集群节点?

是。您可以 SSH 到自己的集群节点,并从该位置直接执行 Hadoop 命令。如果您需要 SSH 到从节点,则必须首先 SSH 到主节点,然后再 SSH 到从节点。

问:对于 Amazon EMR,是否可使用 Microsoft Windows 实例?

目前,Amazon EMR 支持 32 位和 64 位模式的 Debian/Lenny。我们始终关注客户的反馈,随时间推移,我们将增加更多功能来帮助客户解决数据处理业务问题。

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

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

问:如何使用引导操作?

您可以集群实例中已安装的任何语言编写 Bootstrap Action 脚本,包括 Bash、Perl、Python、Ruby、C++ 或 Java。 可使用一些预定义的引导操作。完成编写脚本后,您需要将其上传到 Amazon S3 并在启动集群时引用其位置。 请参阅“开发人员指南”:http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/,了解有关如何使用引导操作的详细信息。

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

EMR 默认的 Hadoop 配置适合大多数工作负载。不过,根据集群的特定内存和处理要求,最好对这些设置进行调优。 例如,如果您的集群任务需要使用大量内存,则可以选择每个核心使用较少的任务并降低任务跟踪程序堆阵大小。 对于此情况,在启动时可以使用预定义的引导操作来配置集群。请参阅开发人员指南中的配置内存密集型引导操作,了解配置详细信息和使用说明。此外,还可以使用允许您根据所选的任何价值自定义集群设置的其他预定义引导操作。请参阅开发人员指南中的配置 Hadoop 引导操作,了解相关使用说明。

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

是。从节点有两种类型:(1) 核心节点,既可使用 Hadoop 分布式文件系统 (HDFS) 托管持续性数据,又能运行 Hadoop 任务;以及 (2) 任务节点,仅用来运行 Hadoop 任务。当集群运行时,您可以增加核心节点的数量,也可以增加或减少任务节点的数量。 通过 API、Java 软件开发工具包或命令行客户端可以执行该操作。请参阅开发人员指南中的调整运行的集群部分,了解如何修改运行的集群大小的详细信息。

问:我何时会希望使用核心节点与任务节点?

由于核心节点在 HDFS 中托管持续性数据而无法删除,所以应为核心节点预留所需的容量,直到集群完成。 由于任务节点可以添加或删除且不含 HDFS,所以它们非常适合仅临时需要容量的情况。

问:为什么我会希望修改正在运行的集群中的从节点数?

在某些情况下,您可能会希望修改正在运行的集群中的从节点数。 如果您的集群运行速度低于预期或时间要求发生变化,您可以增加核心节点数来提高集群性能。 如果集群的不同阶段有不同的容量需求,您可以开始使用少量核心节点,并随时增加或减少任务节点的数量来满足集群不断变化的容量要求。

问:是否可以自动修改集群步骤之间的从节点数?

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

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

要创建对 EMR CLI 中的所有 IAM 用户可见的新集群,请在创建集群时添加 --visible-to-all-users 标志。例如:elastic-mapreduce --create --visible-to-all-users。在管理控制台内,只需在 Create cluster Wizard 的 Advanced Options 面板上选择“Visible to all IAM Users”即可。

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

有关更多信息,请参阅 EMR 开发人员指南中的“配置 IAM 用户权限”部分。

返回页首 >>


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

可以将标记添加到活跃的 Amazon EMR 集群。Amazon EMR 集群由 Amazon EC2 实例组成,添加到 Amazon EMR 集群的标记将传播到该集群的每个活跃 Amazon EC2 实例中。无法在已终止的集群或者属于活跃集群一部分的已终止 Amazon EC2 实例中添加、编辑或删除标记。

问:Amazon EMR 标记是否对 IAM 用户支持基于资源的许可?

不支持,Amazon EMR 不支持按标记确定基于资源的许可。但需要注意的是,传播到 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 实例中删除该标记。但是,如果使用 Amazon EC2 的 IAM 策略,并计划使用 Amazon EMR 的标记功能,应确保授予使用 Amazon EC2 标记 API CreateTags 和 DeleteTags 的权限。

问:如何在我的账单明细中显示我的标记来划分成本?

此处选择要在 AWS 账单报告中使用的标记。然后,为了方便查看资源组合的成本,您可以根据具有相同标签键值的资源来组织账单信息。

问:如何分辨哪些 Amazon EC2 实例属于某个 Amazon EMR 集群?

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

  • aws:elasticmapreduce:instance-group-role=CORE
    • 键 = instance-group role ; 值 = [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 实例具有正确的标记。

返回页首 >>

问:可以做到哪些之前我无法做到的事情?

大部分 EC2 实例都附带固定的存储容量,称为“实例存储”。现在,您可以向 Amazon EMR 集群中的实例添加 EBS 卷,以便在实例上自定义存储。利用此功能,您还可以在仅限 EBS 的实例系列(如 M4 和 C4)上运行 Amazon EMR 集群。

问:向运行于 Amazon EMR 的实例添加 EBS 卷有何好处?

在以下场景中,您可以通过向实例添加 EBS 卷来获得好处:

  1. 您的处理要求如下:您需要当前某个实例提供的大量 HDFS(或本地)存储。借助 EBS 卷方面的支持,您将能够对与某个实例提供的计算容量相关的实例上的存储容量进行自定义。优化实例上的存储可帮助您节约成本。
  2. 您正在运行较旧的实例系列(如 M1 和 M2 系列),希望迁移到最新一代的实例系列,但受到新一代实例类型的每个节点提供的存储的限制。现在,您可以轻松使用任何新一代实例类型,并添加卷以优化存储。内部基准表明,您可以通过从较旧的实例系列(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 卷会发生什么?

Amazon EMR 将在 EMR 集群终止后删除卷。

问:是否可以将 EBS 与已经具有实例存储的实例结合使用?

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

问:是否可以向正在运行的集群附加 EBS 卷?

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

问:是否可以拍摄集群中的卷的快照?

EBS API 允许您拍摄集群的快照。但是,当前 Amazon EMR 不允许您从快照进行恢复。

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

不可以,当前版本不支持加密卷。

问:如果我从正在运行的集群删除附加卷,会发生什么?

如果从正在运行的集群删除附加卷,系统会将其作为节点故障进行处理。Amazon EMR 会将节点和 EBS 卷各替换为相同的节点和 EBS 卷。

返回页首 >>


问:什么是 Apache Hive?

Hive 是在 Hadoop 顶部运行的一种开源数据仓库和分析软件包。Hive 由基于 SQL 的语言 Hive QL 操作,允许用户构建、汇总和查询 Amazon S3 中存储的数据源。Hive QL 的功能超出标准 SQL,支持一流的 map/reduce 函数和 Json 与 Thrift 等复杂的由用户定义的可扩展数据类型。该功能能够处理复杂的甚至非结构化的数据源,如文本文档和日志文件。Hive 允许用户通过以 Java 编写和通过 Amazon S3 中的存储部署的用户自定义函数执行扩展。

问:我用 Amazon EMR 中运行的 Hive 可以做什么?

当 Pig 与 Amazon EMR 搭配使用时,您可以通过 Amazon EMR 中熟悉的 SQL 之类的语言和易用的工具执行复杂的数据处理应用程序。借助 Amazon EMR,您可以将 Hive 应用程序转换为可靠的数据仓库来执行任务,如数据分析、监控和业务智能任务。

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

传统 RDBMS 系统提供事务语义和 ACID 属性。它们还允许检索和缓存表,以便少量的数据也能很快被检索到。它们可快速更新少量数据,并可强制执行参考完整性限制。通常,它们在单一大型机器中运行,不支持在表中执行 map 和 reduce 函数,也不支持对复杂的由用户定义的数据类型执行操作。

相比之下,Hive 可使用 MapReduce 执行 SQL 之类的查询。因此,它针对在机器集群中运行时执行全面的表扫描进行了优化,由此能够处理超大量的数据。Hive 提供分区表,如果执行的查询适合,它能够扫描表的分区,而不只是整个表。

传统 RDMS 系统比较适合要求事务语义和参考完整性以及时常执行少量更新的情况。Hive 比较适合脱机报告、转换和分析大型数据集;例如,对大型网站或网站集合执行点击流分析。

一种常见的做法是从 RDBMS 系统导出数据到 Amazon S3,从中可以使用运行 Hive 的 Amazon EMR 集群执行脱机分析。

问:如何开始使用 Amazon EMR 中运行的 Hive?

有关开始使用的信息,请参阅 http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2862 提供的书面或视频教程

问:特定于 Amazon EMR 的 Hive 是否有新功能?

是。用于 Amazon EMR 时,有四项新功能可使得 Hive 更加强大,包括:

a/ 能够自动从 Amazon S3 加载表分区。以前,要导入分区的表,您需要单独更改表中每个独立分区的表语句。Amazon EMR 现在包含适用于 Hive 语言的新语句类型:“alter tablerecover partitions”。该语句让您能够轻松地将表并发导入多个集群,而不必保留共享的元数据存储。 使用此功能,可从外部进程保存数据的表(例如,日志文件)进行读取。

b/ 能够指定实例外的元数据存储。默认情况下,Hive 存储其架构信息的元数据存储位于主节点中,当集群终止后将不再存在。 此功能允许您覆盖使用的元数据存储位置,例如您在 EC2 中已运行的 MySQL 实例。

c/ 直接向 Amazon S3 写入数据。向 Amazon S3 中的表写入数据时,Amazon EMR 中安装的 Hive 版本将不使用临时文件,而直接写入 Amazon S3。这样可大大提高性能,但从 Hive 角度意味着 HDFS 和 S3 的操作方式不同。如果表位于 Amazon S3,则无法在相同语句内对同一表进行读取和写入。如果要更新 S3 中的表,则会在集群的本地 HDFS 文件系统中创建一个临时表,将结果写入该表,然后将它们复制到 Amazon S3。

d/ 访问 Amazon S3 中的资源。Amazon EMR 中安装的 Hive 版本允许您直接从 Hive 脚本内引用自定义 map 和 reduce 操作或 Amazon S3 中其他库的脚本(例如,add jar s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar)。

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

Hive 支持两类集群:交互式和批处理。 在交互式模式下,客户可以直接在主节点上交互启动集群和运行 Hive 脚本。 通常,该模式用来执行特别数据分析和应用程序开发。在批处理模式下,Hive 脚本存储在 Amazon S3 中,在启动集群时引用。 通常,批处理模式用于报告生成等重复性运行。

问:如何启动 Hive 集群?

批处理和交互式集群都可从 AWS 管理控制台、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 的多个版本,包括版本 0.11.0。

问:是否可以从两个集群并发写入表?

否。Hive 不支持并发写入表。应避免并发写入同一个表,或在向表写入时从中进行读取。Hive 在同时读取和写入或同时写入时会出现不确定性的行为。

问:是否可以在不同的集群之间共享数据?

是。您可以在 Hive 脚本内,通过在脚本顶部写入 ‘create external table’ 语句,读取 Amazon S3 中的数据。对于要访问的每个外部资源,您需要执行 create table 语句。

问:我应该运行一个大型集群在多个用户之间共享,还是运行许多较小的集群?

Amazon EMR 提供独特的功能,使您能够同时使用两种方法。一方面,大型集群对于处理普通的批处理工作负载可能更为有效。 另一方面,如果您需要执行随时间变化的特别查询或工作负载,可以选择创建若干独立的集群,以便于调整使其适合共享 Amazon S3 中所存储数据源的特定任务。

问:是否可以访问本地文件系统中的脚本或 Jar 资源?

否。必须将脚本或 Jar 上传到 Amazon S3 或集群的主节点,才能对其引用。 要上传到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。

问:是否可运行执行多个 Hive 查询的持续性集群?

是。在手动终止模式下运行集群,它们则不会在各个 Hive 步骤中终止。 要降低数据丢失的风险,我们建议您定期在 Amazon S3 中保存所有重要的数据。最好定期将工作传输到新的集群,以测试从主节点故障进行恢复的进程。

问:多个用户是否可基于同一源数据执行 Hive 步骤?

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

问:多个用户是否可在同一集群中运行查询?

是。在批处理模式下,步骤呈序列化状态。多个用户可以将 Hive 步骤添加到同一集群,但将按顺序执行步骤。 在交互式模式下,若干用户可以登录到同一集群,并发执行 Hive 语句。

问:是否可以在多个 AWS 用户之间共享数据?

是。可以使用此处 http://docs.amazonwebservices.com/AmazonS3/latest/index.html?S3_ACLs.html 描述的标准 Amazon S3 共享机制共享数据

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

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

问:在 EMR AMI 中更新软件包的流程是什么?

我们从 Debian/stable 运行选择的一组软件包,包括安全补丁。当 Debian/stable 中的软件包升级后,我们也将对软件包升级。映像中的“r-recommended”软件包在 Debian/stable (http://packages.debian.org/search?keywords=r-recommended) 中为最新版本。

问:我是否可以在 EMR 集群中更新自己的软件包?

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

问:是否可以使用 Hive 处理 DynamoDB 数据?

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

返回页首 >>


问:什么是 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,在长时间运行的分析集群上将 Impala 与 Hive 和 Pig 一起使用,也可以创建专门针对 Impala 查询调整的集群。
  • 使用 Impala 而非 Hive 在临时 Amazon EMR 集群上运行批处理 ETL 任务。对于许多查询,Impala 比 Hive 的速度更快,可以为这些工作负载提供更好的性能。与 Hive 类似,Impala 也使用 SQL,因此从 Hive 到 Impala 可以轻松地修改查询。
  • 将 Impala 与第三方商业智能工具一起使用。将客户端 ODBC 或 JDBC 驱动程序与您的集群连接在一起,以将 Impala 用作强大的可视化工具和控制面板的引擎。

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

问:Impala 与传统的 RDBMS 有何区别?

传统关系数据库系统具有事务语义和数据库原子性、一致性、隔离性和持久性 (ACID) 属性。它们还允许对表进行索引和缓存,以便少量的数据也能很快被检索到,可快速更新少量数据,并可强制执行参考完整性限制。通常,它们在一台大型机器上运行,并且不支持对复杂的用户定义数据类型执行操作。Impala 使用与 RDBMS 中类似的分布式查询系统,但查询 HDFS 中存储的数据,并使用 Hive 元存储来保存有关输入数据的信息。与 Hive 一样,在运行时提供查询的架构,可以更方便地更改架构。另外,Impala 可以查询各种复杂数据类型并执行用户定义函数。但是,因为 Impala 在内存中处理数据,所以了解集群的硬件限制并优化查询实现最佳性能非常重要。

问:Impala 与 Hive 有何区别?

Impala 使用大规模并行处理 (MPP) 引擎执行 SQL 查询,而 Hive 使用 MapReduce 执行 SQL 查询。Impala 避免了 Hive 用于创建 MapReduce 任务的开销,其查询速度比 Hive 快数倍。但是,Impala 使用大量的内存资源,并且集群的可用内存为查询可以使用的内存量设定了限制。Hive 没有这样的限制,可以利用相同的硬件成功地处理更大的数据集。通常,应将 Impala 用于快速、交互式查询,而 Hive 更适用于大数据集的 ETL 工作。Impala 旨在提高速度,非常适用于特殊调查,但需要大量内存来执行耗费大量资源的查询或处理非常大的数据集。由于上述限制,对于速度的重要性不及完成度的工作负载,推荐使用 Hive。单击此处查看 Impala 和 Hive 之间的性能基准。

问:可以使用 Hadoop 1 吗?

不可以,Impala 需要 Hadoop 2,在使用运行 Hadoop 1.x 的 AMI 的集群上无法运行。

问:应该对我的 Impala 集群使用什么实例类型?

为了获得 Impala 的最佳使用体验,我们推荐对您的集群使用经过内存优化的实例。但是,我们已经展示在使用标准实例类型时,获得的性能要优于 Hive。我们建议阅读《Amazon EMR 开发人员指南》的性能测试和查询优化部分,以更好地估计针对您的数据集和查询类型,集群所需的内存资源。压缩类型、分区和实际查询(加入数、结果大小等)在所需的内存方面都发挥了作用。可以使用 EXPLAIN 语句估计 Impala 查询所需的内存和其他资源。

问:如果查询时内存不足会发生什么?

如果内存不足,查询会失败,并且受影响节点上安装的 Impala 守护程序会关闭。然后,Amazon EMR 重新启动该节点上的守护程序,以便 Impala 准备好运行其他查询。此节点上 HDFS 中的数据仍然可用,因为关闭的仅是该节点上运行的守护程序,而非整个节点本身。对于使用 Impala 的专门分析,查询时间通常可以按秒计;因此,如果某个查询失败,您可以快速发现问题,并且可以迅速接着提交新查询。

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

是,Impala 支持用户定义的函数 (UDF)。可以用 Java 或 C++ 编写专用于 Impala 的 UDF。另外,可以修改为 Hive 创建的 UDF 或用户定义的聚合函数,以便在 Impala 中使用。有关 Hive UDF 的信息,请单击此处

问:供 Impala 查询的数据存储在何处?

Impala 会查询 HDFS 或 HBase 表中的数据。如果要将数据存储在 Amazon S3 中,推荐您按我们的《Amazon EMR 最佳实践白皮书》中的方法将数据传输到 HDFS。

问:可以在集群上同时运行 Impala 和 MapReduce 吗?

是的,您可以设置具有 Impala 和 MapReduce 的多租户集群。但是,您应确保使用 Hadoop 2.x 上的 YARN 将资源(内存、磁盘和 CPU)分配给每个应用程序。分配的资源应取决于您计划在每个应用程序上所运行任务的需要。

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

虽然您可以使用 ODBC 驱动程序,但 Impala 也是一款优质引擎,适用于通过 JDBC 连接的第三方工具。可以从以下位置下载和安装 Impala 客户端 JDBC 驱动程序:http://elasticmapreduce.s3.amazonaws.com/libs/impala/1.2.1/impala-jdbc-1.2.1.zip。在安装了商业智能工具的客户端计算机中,使用 SSH 或 VPN 在端口 21050 上将 JDBC 驱动程序连接到 Impala 集群的主节点。更多信息,请参阅打开到主节点的 SSH 隧道

返回页首 >>


问:什么是 Apache Pig?

Pig 是在 Hadoop 顶部运行的一种开源分析软件包。Pig 由类似 SQL 的语言 Pig Latin 操作,允许用户构建、汇总和查询 Amazon S3 中存储的数据源。与 SQL 操作类似,Pig Latin 也支持一流的 map/reduce 函数及复杂的由用户定义的可扩展数据类型。该功能能够处理复杂的甚至非结构化的数据源,如文本文档和日志文件。Pig 允许用户通过以 Java 编写和通过 Amazon S3 中的存储部署的用户自定义函数执行扩展。

问:我该如何使用 Amazon EMR 中运行的 Pig?

对于 Amazon EMR 使用 Pig,您可以通过 Amazon EMR 中熟悉的 SQL 之类的语言和易用的工具执行复杂的数据处理应用程序。借助 Amazon EMR,您可以将 Pig 应用程序转换为可靠的数据仓库来执行任务,如数据分析、监控和业务智能任务。

问:如何开始使用 Amazon EMR 中运行的 Pig?

有关开始使用的信息,请参阅此处 http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2735&categoryID=269 提供的书面或视频教程

问:特定于 Amazon EMR 的 Pig 是否有新功能?

是。用于 Amazon EMR 时,有三项新功能可使得 Pig 更加强大,包括:

a/ 访问多个文件系统。默认情况下,无论是用于输入、输出和临时数据的 HDFS 存储还是 S3 存储段,Pig 任务只能访问一个远程文件系统。EMR 对 Pig 进行了扩展,使任何任务都能根据需要访问任意数量的文件系统。这样做的一个好处是,任务内的临时数据将始终存储在本地 HDFS 中,从而令性能提高。

b/ 从 S3 加载资源。EMR 对 Pig 进行了扩展,使自定义的 JAR 和脚本可以来自 S3 文件系统,例如“REGISTER s3:///my-bucket/piggybank.jar”

c/ 更多用于字符串和日期时间出来的 Piggybank 功能。相关信息,请参阅此处的文档 http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2730

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

Pig 支持两类集群:交互式和批处理。 在交互式模式下,客户可以直接在主节点上交互启动集群和运行 Pig 脚本。 通常,该模式用来执行特别数据分析和应用程序开发。在批处理模式下,Pig 脚本存储在 Amazon S3 中,在启动集群时引用。 通常,批处理模式用于报告生成等重复性运行。

问:如何启动 Pig 集群?

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

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

Amazon EMR 支持 Pig 的多个版本,包括 0.11.1。

问:是否可以从两个集群并发写入 S3 存储段?

是的,可以从两个并发集群写入同一个存储段。

问:是否可以在不同的集群之间共享 S3 中的输入数据?

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

问:是否可以在多个 AWS 用户之间共享数据?

是。可以使用此处 http://docs.amazonwebservices.com/AmazonS3/latest/index.html?S3_ACLs.html 描述的标准 Amazon S3 共享机制共享数据

问:我应该运行一个大型集群在多个用户之间共享,还是运行许多较小的集群?

Amazon EMR 提供独特的功能,使您能够同时使用两种方法。一方面,大型集群对于处理普通的批处理工作负载可能更为有效。 另一方面,如果您需要执行随时间变化的特别查询或工作负载,可以选择创建若干独立的集群,以便于调整使其适合共享 Amazon S3 中所存储数据源的特定任务。

问:是否可以访问本地文件系统中的脚本或 Jar 资源?

否。必须将脚本或 Jar 上传到 Amazon S3 或集群的主节点,才能对其引用。 要上传到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。

问:是否可运行执行多个 Pig 查询的持续性集群?

是。在手动终止模式下运行集群,它们则不会在各个 Pig 步骤中终止。 要降低数据丢失的风险,我们建议您定期在 Amazon S3 中保存所有重要的数据。最好定期将工作传输到新的集群,以测试从主节点故障进行恢复的进程。

问:Pig 是否支持从 JDBC 进行访问?

否。Pig 不支持通过 JDBC 进行访问。

返回页首 >>


问:什么是 Apache HBase?

HBase 是一种仿效 Google BigTable 的开源、非关系型分布式数据库。它是 Apache 软件基金会 Hadoop 项目的一部分,基于 Hadoop 分布式文件系统 (HDFS) 运行,为 Hadoop 提供与 BigTable 相似的功能。HBase 为您提供了一种可存储大量稀疏数据的容错、高效方法,该方法采用的是列式压缩和存储方式。 此外,因为数据存储在内存中而非磁盘上,所以还可以通过 HBase 快速查找数据。 在连续写入操作方面对 HBase 进行了优化,批量插入、更新和删除等操作的效率很高。 HBase 可与 Hadoop 无缝配合,从而共享其文件系统并用作 Hadoop 作业的直接输入和输出端。HBase 还可与 Apache Hive 集成(对 HBase 表启用类似 SQL 的查询)、与基于 Hive 的表结合以及支持 Java 数据库连接 (JDBC)。

问:特定于 Amazon EMR 的 HBase 是否有新功能?

借助于 Amazon EMR,您可以将 HBase 备份到 Amazon S3(包括完全备份、增量备份、手动备份或者自动),并可以从以前创建的备份中还原。了解有关 HBase 和 EMR 的更多信息

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

Amazon EMR 支持 HBase 0.94.7 和 HBase 0.92.0。要使用 HBase 0.94.7,必须指定 AMI 3.0.0 版。如果使用的是 CLI,则必须使用 2013-10-07 版或更新版本。

返回页首 >>


问:添加到 Kinesis 上去的 EMR 连接器支持什么功能?

该连接器支持 EMR 直接从 Kinesis 串流读取和查询数据。现在,您可以使用现有的 Hadoop 生态系统工具,如 Hive、Pig、MapReduce、Hadoop Streaming 和 Cascading,来执行 Kinesis 串流的批处理。

问:添加到 Kinesis 上去的 EMR 连接器能支持我完成哪些之前无法完成的任务?

读取和处理来自 Kinesis 串流的数据要求您编写、部署和维持独立的流式处理应用程序。这些需要耗费大量的时间和精力。但是,使用此连接器,您编写一个简单的 Hive 或 Pig 脚本就可以开始读取和分析 Kinesis 串流。这意味着,您可以使用 SQL 来分析 Kinesis 串流。当然,也可以使用其他 Hadoop 生态系统工具。您不必开发或维护一组新的处理应用程序。

问:此功能对哪些人有用?

此功能对以下各类用户有用:

  • 对使用此广泛的 Hadoop 生态系统工具来分析 Kinesis 串流有兴趣的 Hadoop 用户。
  • 正在寻求简单地方法来增强性能和正在运行 Kinesis 数据的流处理和 ETL(提取、转换和加载)的 Kinesis 用户。
  • 希望使用熟悉的工具,如 SQL(通过 Hive)或脚本撰写语言,如 Pig,对 Kinesis 串流中的数据执行临时分析的商业分析师和 IT 专业人员。

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

以下为此集成支持的代表性使用案例:

  • 流处理日志分析:您可以按地区、浏览器和访问域分析流处理网页日志,以便每隔几分钟生成一个 10 大类错误列表。
  • 复杂数据处理工作流:您可以将存储在 S3、Dynamo DB 表和 HDFS 中的数据加入到 Kinesis 串流中。您可以编写加入了来自 Kinesis 的点击流数据并将广告活动信息存储在 DynamoDB 表中的查询,以识别各特定网站上显示的最有效的广告类别。
  • 临时查询:您可以定期将来自 Kinesis 的数据加载到 HDFS 中并作为本地 Impala 表推出,用于快速交互式分析查询。

问:要使用此连接器,我需要使用什么 EMR AMI 版本?

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

问:此连接器是独立的工具吗?

不是,它是 Amazon Hadoop 分配的内置组件,EMR AMI 的版本 3.0.4 及更新版本上提供此组件。客户只需使用版本 3.0.4 或更新版本的 AMI 快速构建一个集群就可以开始使用此功能。

问:支持 EMR 从 Kinesis 串流读取数据需要哪种数据格式?

EMR Kinesis 集成不指定数据格式。您可以读取任何格式的数据。个别 Kinesis 记录作为标准记录呈递给 Hadoop,该记录可使用任何 Hadoop MapReduce 框架进行读取。个别框架,如 Hive、Pig 和 Cascading,已内置在帮助序列化和还原序列化的组件中,从而使开发人员能够轻松查询多种格式的数据,而无需实施自定义代码。例如,Hive 用户可通过在定义表时指定适当的 Hive SerDe 来从 JSON 文件、XML 文件和 SEQ 文件读取数据。Pig 拥有类似组件 Loadfunc/Evalfunc,而 Cascading 的类似组件为 Tap。Hadoop 用户可以利用此广泛的 Hadoop 适配器生态系统,无需编写格式专用代码。您还可以实施自定义还原序列化格式来读取其中任何一个工具的域专用数据。

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

创建一个引用 Kinesis 串流的表。然后,您可以像分析 Hive 中的其他任何表一样分析此表。请参阅我们的教程页面了解更多详情。

问:使用 Hive 时,如何创建结合了 Kinesis 串流数据和其他数据源的查询?

首先,创建一个引用 Kinesis 串流的表。Hive 表创建好后,您可以将它与映射到其他数据源(如 Amazon S3、Amazon Dynamo DB 和 HDFS)的表结合起来。这会有效地将来自 Kinesis 串流的数据加入到其他数据源中。

问:此集成仅用于 Hive 吗?

不是,您可以使用 Hive、Pig、MapReduce、Hadoop 流以及 Cascading。

问:如何设置要在 Kinesis 串流上运行的既定任务?

EMR Kinesis 输入连接器提供各种功能,帮助您配置和管理传统调度引擎(如 Cron)中的既定周期性任务。例如,您可以开发一个每 N 分钟运行一次的 Hive 脚本。在任务的配置参数中,您可以为任务指定一个逻辑名称。逻辑名称是一个标签,会通知 EMR Kinesis 输入连接器该任务的单个实例是同一周期性调度的成员。逻辑名称允许该过程利用迭代,我们接下来将对其予以解释。

因为 MapReduce 是批处理框架,所以要使用 EMR 来分析 Kinesis 串流,连续的串流就需分割成数批。每个批次称为一个迭代。每个迭代分配一个以 0 开头的号码。每个迭代的边界由起始序列号和结尾序列号定义。然后 EMR 会按顺序处理迭代。

如果一次尝试发生故障,EMR Kinesis 输入连接器将在逻辑名称内重试该迭代(从该迭代的已知起始序列号开始)。此功能确保同一迭代的连续尝试与之前的尝试具有准确相同的 Kinesis 串流输入记录。这就确保了 Kinesis 串流的幂等(一致性)处理。

您可以在您相应的 Hadoop 工具中将逻辑名称和迭代指定为运行时参数。例如,在教程的“Running queries with checkpoints”部分,代码示例显示了一个预定的 Hive 查询,后者为查询指定逻辑名称,并且在每次运行任务后增加一个迭代。

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

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

允许 EMR Kinesis 输入连接器在既定的周期性工作流中使用的元数据存储在 Amazon DynamoDB 中。您必须预配置一个 Amazon Dynamo DB 表并指定其作为 Hadoop 任务的输入参数。注意:您要为该表配置合适的 IOPS 来支持此集成。请参阅入门教程了解更多有关设置 Amazon Dynamo DB 表的信息。

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

在 Kinesis 串流中,迭代标识符是用户提供的映射到指定边界(开头和结尾序列号)的值。这些边界对应的数据位于 MapReduce 任务的映射相位。此相位由框架管理,如果任务发生故障,它将自动运行(默认情况下,运行三次)。如果重试失败,您仍可以选择从最后一次成功或通过的数据边界开始重试处理过程。处理期间,此行为通过提供 kinesis.checkpoint.iteration.no 参数来控制。请参考入门教程了解更多有关如何为 Hadoop 生态系统中的不同工具配置该值的信息。

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

可以,您可以通过在连续处理过程中设定 kinesis.checkpoint.iteration.no 参数来指定之前运行的迭代。该实施确保同一迭代的连续运行与之前的运行具有准确相同的 Kinesis 串流输入记录。

问:如果迭代中的记录在 Kinesis 串流中到期失效,会出现什么情况?

如果迭代的开始序列号和/或结尾序列号属于已在 Kinesis 串流中到期失效的记录,则 Hadoop 任务会失败。您将需要使用其他逻辑名称来处理 Kinesis 串流的开始数据。

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

否。目前,EMR Kinesis 连接器不支持将数据回写到 Kinesis 串流中。

问:Kinesis 的 EMR Hadoop 输入连接器支持连续流处理吗?

Hadoop MapReduce 框架是一个批处理系统。因此,不支持连续查询。然而,有一组新兴的 Hadoop 生态系统框架,例如 Twitter Storm 和 Spark 流,可支持开发人员构建适用于连续流处理的应用程序。Kinesis 的 Storm 连接器可在此处的 GitHub 上获取,您还可以在此处找到解释如何在 EMR 上设置 Spark 流和运行连续查询的教程。

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

问:是否能指定访问凭证来读取由其他 AWS 账户管理的 Kinesis 串流?

是。您可以通过为拥有该 Kinesis 串流的账户指定适当访问凭证来从其他 AWS 账户读取流数据。默认情况下,Kinesis 连接器使用的是用户在创建集群时指定的访问凭证。您可以通过设置 kinesis.accessKey 和 kinesis.secretKey 参数来覆盖这些凭证,以便从其他 AWS 账户访问流数据。以下示例显示了在 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/sec 出站速率。这可能会降低处理速度,有些情况下,还会导致查询失败。

问:能否在 EMR 中加入并分析多个 Kinesis 串流?

可以,例如在 Hive 中,您可以创建两个映射到不同 Kinesis 串流的表并在两个表之间创建连接。

问:EMR Kinesis 连接器是否处理 Kinesis 扩展活动,如合并和拆分活动?

是。该实施处理拆分和合并活动。Kinesis 连接器将单个 Kinesis 碎片(Kinesis 流内的扩展逻辑单元)与 Hadoop MapReduce 映射任务相联系。在迭代的逻辑周期内,流内的每个唯一碎片都将生成一个确切的映射任务。如果发生碎片拆分或合并活动,Kinesis 将配置新的唯一碎片 ID。结果,MapReduce 框架将预配置更多映射任务,以便从 Kinesis 读取内容。所有这些对用户都是透明的。

问:如果我的串流中存在一些“静默”时段,会怎么样?

该实施允许您配置名为 kinesis.nodata.timeout 的参数。例如,考虑这样一个情况,其中 kinesis.nodata.timeout 设为 2 分钟,同时您希望每隔 10 分钟运行一次 Hive 查询。此外,考虑自上次迭代后(10 分钟之前),一些数据已写入串流中。然而,目前没有新的记录达到,也就是说,串流内是静默的。在这种情况下,当查询的当前迭代启动时,Kinesis 连接器将发现没有即将达到的新记录。连接器将使该串流保持轮询 2 分钟,如果该时间内记录没有达到,则停止轮询并仅处理流的当前批次已读取的记录。但是,如果新记录在 kinesis.nodata.timeout 时间间隔用完之前达到,那么,连接器将等待参数 kinesis.iteration.timeout 对应的额外时间间隔。请查阅教程了解如何定义这些参数。

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

如果处理发生故障,您在调试 Hadoop 任务时可以利用他们当前所用的工具。包括帮助识别和访问错误日志的 Amazon EMR Web 控制台。更多有关调试 EMR 任务的详细信息可在这里查找。

问:如果指定了没有访问权限的 DynamoDB 表,会出现什么情况?

任务会失败,此异常情况会显示任务的错误日志中。

问:如果任务没有失败,但是 DynamoDB 的检查点出现故障,会出现什么情况?

任务会失败,此异常情况会显示任务的错误日志中。

问:如何将从 Kinesis 串流到 EMR 的读取吞吐量最大化?

Kinesis 串流的吞吐量的增长随所用实例的大小以及 Kinesis 流中的记录大小而定。我们建议您使用 m1.xlarge 以及更大的实例,以确保将主要节点和核心节点用于此功能。

返回页首 >>