

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

# Amazon EMR API 调用的常见概念
<a name="emr-common-programming-concepts"></a>

 如果编写调用 Amazon EMR API 的应用程序，在调用 SDK 的包装函数之一时需要了解几个概念。

**Topics**
+ [Amazon EMR 的端点](#endpoints)
+ [在 Amazon EMR 中指定集群参数](#API_SpecifyingParameters)
+ [Amazon EMR 中的可用区](#AvailabilityZones)
+ [如何在 Amazon EMR 集群中使用其它文件和库](#HowtoUseAdditionalFilesandLibrariesWiththeMapperorReducer)

## Amazon EMR 的端点
<a name="endpoints"></a>

终端节点是作为 Web 服务入口点的 URL。每个 Web 服务请求都必须包含一个终端节点。终端节点指定了创建、描述或终止集群的 Amazon 区域。其形式是 `elasticmapreduce.regionname.amazonaws.com`。如果您指定了通用端点（`elasticmapreduce.amazonaws.com`），Amazon EMR 会将您的请求转至默认区域的端点。对于 2013 年 3 月 8 日或之后创建的账户而言，默认区域是 us-west-2；对于较早的账户而言，默认区域是 us-east-1。

有关 Amazon EMR 的区域和端点的更多信息，请参阅《Amazon Web Services 一般参考》** 中的 [Regions and endpoints](https://docs.amazonaws.cn/general/latest/gr/rande.html#emr_region)。

## 在 Amazon EMR 中指定集群参数
<a name="API_SpecifyingParameters"></a>

 `Instances` 参数可让您配置 EC2 实例的类型和数量，以创建用于处理数据的节点。Hadoop 将数据的处理分布到多个集群节点。主节点负责跟踪核心和任务节点的运行状况并轮询节点的作业结果状态。核心和任务节点执行实际的数据处理。如果有一个单节点集群，则该节点同时用作主节点和核心节点。

 `KeepJobAlive` 请求中的 `RunJobFlow` 参数用于确定在集群步骤执行完毕时是否终止该集群。当您知道该集群按预期运行时，将该值设置为 `False`。当您在集群执行暂停期间排除任务流程故障和添加步骤时，将该值设置为 `True`。这样可以减少向 Amazon Simple Storage Service（Amazon S3）上载结果的时间和费用，只需在修改重新启动此集群的步骤后重复该流程即可。

如果`KeepJobAlive`是`true`，则在成功让集群完成工作后，您必须发送`TerminateJobFlows`请求，否则集群将继续运行并产生 Amazon 费用。

 有关独有的参数的更多信息`RunJobFlow`，请参阅[RunJobFlow](https://docs.amazonaws.cn/ElasticMapReduce/latest/API/API_RunJobFlow.html)。有关该请求中通用参数的更多信息，请参见[通用请求参数](https://docs.amazonaws.cn/ElasticMapReduce/latest/API/CommonParameters.html)。

## Amazon EMR 中的可用区
<a name="AvailabilityZones"></a>

 Amazon EMR 将 EC2 实例作为处理集群的节点。这些 EC2 实例的位置由可用区和区域组成。区域分散存在，位于独立的地理区域。可用区是在一个区域内的不同位置，与其它可用区的故障隔离。每个可用区向同一区域中的其它可用区提供低成本、低延迟的网络连接。有关 Amazon EMR 的区域和端点的列表，请参阅《Amazon Web Services 一般参考》** 中的 [Regions and endpoints](https://docs.amazonaws.cn/general/latest/gr/rande.html#emr_region)。

 `AvailabilityZone` 参数指定集群的一般位置。此参数是可选的，一般而言，我们不鼓励使用该参数。未指定 `AvailabilityZone` 时，Amazon EMR 为集群自动挑选最佳的 `AvailabilityZone` 值。如果想让您的实例和其它运行中的现有实例处于同一位置，而您的集群需要从那些实例中读取数据或写入数据，您可能会发现这个参数很有用。有关更多信息，请参阅 [Amazon EC2 用户指南](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/)。

## 如何在 Amazon EMR 集群中使用其它文件和库
<a name="HowtoUseAdditionalFilesandLibrariesWiththeMapperorReducer"></a>

有些时候，您可能喜欢通过您的映射器或 Reducer 应用程序使用其它文件或自定义库。例如，您可能喜欢使用把 PDF 文件转换成纯文本的库。

**Hadoop 流式处理时缓存文件供映射器或 Reducer 使用**
+ 在 JAR `args` 字段中，添加以下参数：

  ```
  1. -cacheFile s3://bucket/path_to_executable#local_path
  ```

  文件 `local_path` 在映射器的工作目录中，映射器可以引用这个文件。