EMR文件系统 (EMRFS) - Amazon EMR

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

EMR文件系统 (EMRFS)

EMR文件系统 (EMRFS) 是所有亚马逊EMR集群用来EMR直接从亚马逊读取和写入常规文件到 Amazon S3 的实现。HDFSEMRFS提供了在 Amazon S3 中存储永久数据以便与 Hadoop 配合使用的便利,同时还提供数据加密等功能。

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

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

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

警告

在为运行 Apache Spark 任务的亚马逊EMR集群开启推测执行功能之前,请查看以下信息。

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

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

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

  • 使用 Spark 的 Hadoop 文件。RDD API

  • 使用 Hive SerDe 的实木复合地板。请参阅 Hive 元存储 Parquet 表转换

EMRFS在以下情况下不使用直接写入:

  • 启用 EMRFS S3 优化的提交器时。请参阅 EMRFSS3 优化提交者的要求

  • 在 partitionOverwriteMode 设置为动态的情况下写入动态分区时。

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

  • 使用除之外的文件系统时EMRFS,例如写入HDFS或使用 S3A 文件系统。

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

默认情况下,Amaz OFF EMRclusters on 开启了推测执行功能。如果以下两个条件都为真,我们强烈建议您不要启用推测执行:

  • 您正将数据写入 Amazon S3。

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

如果您打开 Spark 推测执行并使用EMRFS直接写入方式将数据写入 Amazon S3,则可能会出现间歇性数据丢失的情况。当您使用 EMRFS S3 优化的提交器向 HDFS Parquet 写入数据或在 Parquet 中写入数据时,Amazon EMR 不使用直接写入,也不会出现此问题。

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