EMR 文件系统 (EMRFS) - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

EMR 文件系统 (EMRFS)

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 在Amazon Web Services 区域为所有 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 优化的提交程序(OutputCommitter 的一种实现替代品),该程序已针对使用 EMRFS 时向 Amazon S3 写入文件进行了优化。如果您对将数据写入 Amazon S3 的应用程序启用 Apache Spark 推测执行功能,并且不使用经 EMRFS S3 优化的提交程序,则可能会遇到 SPARK-10063 中描述的数据正确性问题。如果您使用的是低于 Amazon EMR 5.19 版本的 Amazon EMR 版本,或者正在使用 ORC 和 CSV 等格式将文件写入 Amazon S3,则会发生该情况。EMRFS S3 优化的提交者不支持这些格式。有关使用经 EMRFS S3 优化的提交程序的完整要求列表,请参阅经 EMRFS S3 优化的提交程序的要求

当经 EMRFS S3 优化的提交程序不受支持时(例如在写入以下内容时),通常使用 EMRFS 直接写入:

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

  • 使用 Spark RDD API 的 Hadoop 文件。

  • 使用 Hive SerDe 的 Parquet。请参阅 Hive 元存储 Parquet 表转换

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

  • 启用经 EMRFS S3 优化的提交程序时 请查看经 EMRFS S3 优化的提交程序的要求

  • 写入动态分区时,请将 partitionOverwriteMode 设置为动态。

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

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

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

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

  • 您正将数据写入 Amazon S3。

  • 数据以 Apache Parque 以外的格式写入,或者以 Apache Parquet 格式写入但不使用经 EMRFS S3 优化的提交程序。

如果您启用 Spark 推测执行并使用 EMRFS 直接写入,将数据写入 Amazon S3,您可能会遇到间歇性数据丢失问题。将数据写入 HDFS,或使用经 EMRFS S3 优化的提交程序以 Parquet 格式写入数据时,Amazon EMR 不使用直接写入,也不会发生此问题。

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