View a markdown version of this page

EMR 文件系统 (EMRFS) - Amazon EMR

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

EMR 文件系统 (EMRFS)

注意

从 EMR 7.10.0 版本开始,S3A 文件系统已取代 EMRFS 成为默认 EMR S3 连接器。

EMR 文件系统(EMRFS)是 HDFS 的实现,所有 Amazon EMR 集群将其用于直接从 Amazon EMR 读取常规文件并将其写入 Amazon S3。EMRFS 使您能够方便地将持久性数据存储在 Amazon S3 中以便用于 Hadoop,同时它还提供了数据加密等功能。

数据加密可让您对由 EMRFS 写入 Amazon S3 的对象进行加密,并且还允许 EMRFS 处理 Amazon S3 中的加密对象。如果您使用的是 Amazon EMR 发行版 4.8.0 或更高版本,则可使用安全配置设置 Amazon S3 中 EMRFS 对象的加密以及其他加密设置。有关更多信息,请参阅加密选项。如果您使用的是 Amazon EMR 的早期发行版,则可以手动配置加密设置。有关更多信息,请参阅 使用 EMRFS 属性指定 Amazon S3 加密

Amazon S3 在 AWS 区域为所有 GET、PUT 和 LIST 操作提供了强大的读写后编写一致性。这意味着您使用 EMRFS 编写的内容就是从 Amazon S3 中读取的内容,对性能没有影响。有关更多信息,请参阅 Amazon S3 数据一致性模型

在使用 Amazon EMR 发行版 5.10.0 或更高版本时,可以根据集群用户、组或 EMRFS 数据在 Amazon S3 中的位置,使用不同的 IAM 角色来处理 EMRFS 对 Amazon S3 的请求。有关更多信息,请参阅为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色

警告

在为运行 Apache Spark 任务的 Amazon EMR 集群启用推测执行之前,请查看以下信息。

EMRFS 包括 EMRFS S3-optimized 提交器,该 OutputCommitter 实现针对使用 EMRFS 时向 Amazon S3 写入文件进行了优化。如果您对向 Amazon S3 写入数据且不使用 EMRFS S3-optimized 提交程序的应用程序启用 Apache Spark 推测执行功能,则可能会遇到中描述的数据正确性问题。 SPARK-10063 如果您使用的是低于 Amazon EMR 5.19 版本的 Amazon EMR 版本,或者正在使用 ORC 和 CSV 等格式将文件写入 Amazon S3,则会发生该情况。EMRFS S3-optimized 提交者不支持这些格式。有关使用 EMRFS 提交器的完整要求列表,请参阅 EMRFS S3-optimized 提交者的要求。 S3-optimized

EMRFS 直接写入通常在不支持 EMRFS S3-optimized 提交器时使用,例如在编写以下内容时:

  • Parquet 以外的输出格式(例如 ORC 或文本)。

  • 使用 Spark RDD API 的 Hadoop 文件。

  • 使用 Hive 拼花地板 SerDe。请参阅 Hive 元存储 Parquet 表转换

以下情形不使用 EMRFS 直接写入

  • 启用 EMRFS S3-optimized 提交器时。请参阅 EMRFS S3-optimized 提交者的要求。

  • 写入分区OverwriteMode 设置为动态的动态分区时。

  • 写入自定义分区位置(例如不符合 Hive 默认分区位置约定的位置)时。

  • 使用 EMRFS 以外的文件系统(例如写入 HDFS 或使用 S3A 文件系统)时。

要确定您的应用程序是否在 Amazon EMR 5.14.0 或更高版本中使用了直接写入,请启用 Spark INFO 日志记录。如果 Spark 驱动程序日志或 Spark 执行程序容器日志中,存在包含文本“Direct Write: ENABLED”的日志行,则 Spark 应用程序会使用直接写入的方式进行写入。

默认情况下,Amazon EMR 集群上的推测执行处于 OFF 状态。如果以下两个条件都为真,我们强烈建议您不要启用推测执行:

  • 您正将数据写入 Amazon S3。

  • 数据以 Apache Parquet 以外的格式写入,或者不使用 EMRFS S3-optimized 提交器以 Apache Parquet 格式写入。

如果您启用 Spark 推测执行并使用 EMRFS 直接写入,将数据写入 Amazon S3,您可能会遇到间歇性数据丢失问题。当您向 HDFS 写入数据或使用 EMRFS S3-optimized 提交器在 Parquet 中写入数据时,Amazon EMR 不使用直接写入,也不会出现此问题。

如果您需要以使用 EMRFS 直接写入的格式从 Spark 将数据写入 Amazon S3,并使用推测执行,我们建议您写入 HDFS,然后使用 S3DistCP 将输出文件传输到 Amazon S3。