

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

# 了解 EMRFS 一致视图如何跟踪 Amazon S3 中的对象
<a name="emrfs-files-tracked"></a>

EMRFS 通过向 EMRFS 元数据添加有关 Amazon S3 中对象的信息，创建这些对象的一致视图。EMRFS 会在以下情况下向其元数据添加这些列表：
+  EMRFS 在 Amazon EMR 任务执行期间写入对象。
+  使用 EMRFS CLI 将对象与 EMRFS 元数据同步或导入到元数据。

EMRFS 读取的对象不会自动添加到元数据。当 EMRFS 删除对象时，一个具有已删除状态的列表仍保留在元数据中，直到使用 EMRFS CLI 清除该列表。要了解有关 CLI 的更多信息，请参阅[EMRFS CLI 命令参考](emrfs-cli-reference.md)。有关在 EMRFS 元数据中清除列表的更多信息，请参阅[EMRFS 一致视图元数据](emrfs-metadata.md)。

对于每个 Amazon S3 操作，EMRFS 都会在元数据中检查有关一致视图中的对象集的信息。如果 EMRFS 在其中一个操作执行过程中发现 Amazon S3 是不一致的，则会根据 `emrfs-site` 配置属性中定义的参数重试该操作。在 EMRFS 用尽重试次数后，它会引发 `ConsistencyException` 或记录异常并继续执行工作流程。有关重试逻辑的更多信息，请参阅[重试逻辑](emrfs-retry-logic.md)。您可以在日志中找到 `ConsistencyExceptions`，例如：
+  listStatus: No Amazon S3 object for metadata item `/S3_bucket/dir/object`
+  getFileStatus: 密钥存在`dir/file`于元数据中，但不存在于 Amazon S3 中

如果直接从 Amazon S3 中删除 EMRFS 一致视图跟踪的对象，则 EMRFS 会将该对象视为不一致，这是因为 Amazon S3 中显示它仍存在于元数据中。如果您的元数据与 EMRFS 在 Amazon S3 中跟踪的对象不同步，则可以使用 EMRFS CLI 的 **sync** 子命令重置元数据以使其反映 Amazon S3 的情况。要了解元数据与 Amazon S3 之间的差异，请使用 **diff**。最后，EMRFS 只有在元数据中引用的对象的一致视图；相同 Amazon S3 路径中可能存在未进行跟踪的其它对象。EMRFS 在列出 Amazon S3 路径中的对象时，将返回在元数据中进行跟踪的对象与该 Amazon S3 路径中的对象的超集。