

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

# 使用 Amazon EMR 处理存储和文件系统
<a name="emr-plan-file-systems"></a>

Amazon EMR 和 Hadoop 提供了各种文件系统，供您在处理集群步骤时使用。通过用于访问数据的 URI 前缀，您可以指定要使用的文件系统类型。例如，`s3://amzn-s3-demo-bucket1/path` 指向一个使用 S3A 的 Amazon S3 存储桶（自 EMR-7.10.0 版本起）。下表列出了可用的文件系统以及关于最适合用途的建议。

Amazon EMR 和 Hadoop 处理集群时通常会使用两个或多个以下文件系统。HDFS 和 S3A 是与 Amazon EMR 配合使用的两种主要文件系统。

**重要**  
从亚马逊 EMR 版本 5.22.0 开始，亚马逊 EMR 仅 AWS 使用签名版本 4 来验证向亚马逊 S3 发出的请求。早期的 Amazon EMR 版本在某些情况下使用 AWS 签名版本 2，除非发行说明中注明仅使用签名版本 4。有关更多信息，请参阅《*亚马逊简单存储服务开发者AWS *[指南》中的对请求进行身份验证（AWS 签名版本 4）](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)[和对请求进行身份验证（签名版本 2）](https://docs.aws.amazon.com/AmazonS3/latest/API/auth-request-sig-v2.html)。


| 文件系统 | Prefix | 说明 | 
| --- | --- | --- | 
| HDFS | hdfs:// (或无前缀) |  HDFS 是适用于 Hadoop 的一种可扩展的分布式便携文件系统。HDFS 的一项优势是管理集群的 Hadoop 集群节点与管理单一步骤的 Hadoop 集群节点之间的数据感知。有关更多信息，请参阅 [Hadoop 文档](http://hadoop.apache.org/docs/stable)。 通过主节点和核心节点使用 HDFS。优势是快；劣势是它是短暂存储，会在集群终止时回收。它最适合用于缓存由中间任务流程步骤产生的结果。  | 
| S3A | s3://, s3a://, s3n:// |  Hadoop S3A 文件系统是一个开源 S3 连接器，它使 Apache Hadoop 及其生态系统能够直接与 Amazon S3 存储进行交互。它允许用户使用与 Hadoop 兼容的文件操作在 S3 存储桶中读取和写入数据，从而在 Hadoop 应用程序和云存储之间实现无缝集成。 在 EMR-7.10.0 之前，Amazon EMR 将 EMRFS 用于 *s3://* 和 *s3n://* 方案。   | 
| 本地文件系统 |  |  本地文件系统指的是本地连接的磁盘。创建 Hadoop 集群时，会从 EC2 实例上创建各个节点，这些节点附带了预先配置的数据块，这些数据块属于称为*实例存储* 的预先附加的磁盘存储。实例存储卷上的数据仅在 EC2 实例的生命周期内保留。实例存储卷适合于存储不断变化的临时数据（如缓冲区、缓存、Scratch 数据和其他临时内容）。有关更多信息，请参阅 [Amazon EC2 实例存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)。 HDFS 使用本地文件系统，但 Python 也从本地文件系统运行，您可以选择在实例存储卷上存储其他应用程序文件。  | 
| （早期）Amazon S3 数据块文件系统 | s3bfs:// |  Amazon S3 数据块文件系统是一种早期文件存储系统。我们强烈反对使用此系统。  我们不推荐使用此文件系统，因为它可能触发竞争条件，此条件可能会导致集群故障。但是，早期应用程序可能会需要它。   | 

## 访问文件系统
<a name="emr-dev-access-file-systems"></a>

通过用于访问数据的统一资源标识符 (URI) 前缀，您可以指定要使用的文件系统。以下步骤介绍了如何引用几种不同类型的文件系统。

**访问本地 HDFS**
+ 在 URI 中指定 `hdfs:///` 前缀。Amazon EMR 会将未在 URI 中指定前缀的路径解析为本地 HDFS。例如，以下两项都 URIs 将解析到 HDFS 中的相同位置。

  ```
  1. hdfs:///path-to-data
  2. 							
  3. /path-to-data
  ```

**访问远程 HDFS**
+ 将主节点 IP 地址包含在 URI 内，如以下示例所示。

  ```
  1. hdfs://master-ip-address/path-to-data
  2. 						
  3. master-ip-address/path-to-data
  ```

**访问 Amazon S3**
+ 使用 `s3://` 前缀。

  ```
  1. 						
  2. s3://bucket-name/path-to-file-in-bucket
  ```

**访问 Amazon S3 数据块文件系统**
+ 仅用于需要 Amazon S3 数据块文件系统的旧版应用程序。要使用此文件系统访问或存储数据，请在 URI 中使用 `s3bfs://` 前缀。

  Amazon S3 数据块文件系统是一种旧版文件系统，用于支持向 Amazon S3 上传大于 5 GB 的文件。借助 Amazon EMR 通过 AWS Java SDK 提供的分段上传功能，您可以将大型文件上传到 Amazon S3 原生文件系统，Amazon S3 块文件系统已被弃用。有关 EMR 分段上传的更多信息，请参阅[为 Amazon S3 配置分段上传](emr-plan-upload-s3.html#Config_Multipart)。有关 S3 对象大小和部分大小限制的更多信息，请参阅《**Amazon Simple Storage Service** 用户指南》**中的 [Amazon S3 分段上传限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html)。
**警告**  
因为此早期文件系统可能创建会导致文件系统损坏的竞争条件，所以您应当避免使用此形式，而改用 EMRFS。

  ```
  1. s3bfs://bucket-name/path-to-file-in-bucket
  ```