EMR 檔案系統 (EMRFS) - Amazon EMR

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 為所有 AWS 區域 中的所有 GET、PUT 和 LIST 操作提供強大的先寫後讀一致性。這表示您使用 EMRFS 寫入的內容將從 Amazon S3 中讀取,而不會影響效能。如需詳細資訊,請參閱 Amazon S3 資料一致性模式

使用 Amazon EMR 發行版本 5.10.0 或更新版本時,您可以根據叢集使用者、群組或 Amazon S3 中 EMRFS 資料的位置,來為 EMRFS 請求將不同 IAM 角色用於 Amazon S3。如需詳細資訊,請參閱設定向 Amazon S3 請求使用 EMRFS 的 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 直接寫入,例如寫入下列內容時:

在下列情況下,不會使用 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 Parquet 以外的格式寫入,或以不使用 EMRFS S3 優化的遞交程式的 Apache Parquet 格式寫入。

如果您開啟 Spark 推測性執行並使用 EMRFS 直接寫入將資料寫入至 Amazon S3,您可能會遇到間歇性資料遺失。當您將資料寫入至 HDFS 或使用 EMRFS S3 優化的遞交程式在 Parquet 中寫入資料時,Amazon EMR 不會使用直接寫入,因此不會發生此問題。

如果您需要以使用 EMRFS 直接寫入的格式將資料從 Spark 寫入至 Amazon S3,並使用推測性執行,建議寫入至 HDFS,然後使用 S3DistCP 將輸出檔案傳輸至 Amazon S3。