

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# S3A MagicV2 發射器
<a name="s3a-magicv2-committer"></a>

使用 EMR-6.15.0 版本時，Amazon EMR 引入新的 S3A 遞交者類型，稱為 MagicV2 遞交者。如需此功能的完整資訊，請參閱相關文件章節。

MagicV2 Committer 代表開放原始碼 [MagicCommitter](https://javadoc.io/static/org.apache.hadoop/hadoop-aws/3.4.0/org/apache/hadoop/fs/s3a/commit/magic/MagicS3GuardCommitter.html) 的增強實作，專為透過 Amazon S3 S3A 進行最佳化而設計。如同上一代，它利用 Amazon S3 的分段上傳功能，消除通常與任務和任務遞交階段相關聯的傳統清單和重新命名操作。

相較於原始 MagicCommitter，MagicV2 遞交者在任務遞交階段將檔案寫入任務的輸出位置，而非任務遞交階段，以展現卓越的效能。此方法可啟用分散式檔案寫入，並消除在 Amazon S3 上暫時遞交中繼資料儲存的需求，進而改善成本效益。此外，MagicV2 遞交者在遞交程序期間允許檔案路徑覆寫多個執行緒，以提供增強的彈性。

## 啟用 MagicV2 Committer
<a name="s3a-magicv2-committer-enable"></a>

若要啟用 MagicV2 遞交者，請在任務組態中傳遞下列組態，或使用核心網站組態來設定 屬性。如需詳細資訊，請參閱[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

```
mapreduce.outputcommitter.factory.scheme.s3a=org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory
fs.s3a.committer.magic.enabled=true
fs.s3a.committer.name=magicv2
fs.s3a.committer.magic.track.commits.in.memory.enabled=true
```

對於需要在遞交或寫入新檔案之前覆寫現有目錄的工作負載，需要下列額外組態，以及先前提及的組態。

```
fs.s3a.committer.magic.overwrite.and.commit=true
fs.s3a.committer.magic.delete.directory.threads=thread size
```

`threads` 組態的預設值為 `20`。不過，如果有大量目錄要覆寫，則應調校此參數，以獲得更好的效能。這僅適用於 EMR-7.2.0 及更高版本。

## 考量事項
<a name="considerations"></a>
+ 如果 Java 虛擬機器 (JVM) 在任務執行和將資料寫入 Amazon S3 時當機或遭到終止，則更有可能留下不完整的分段上傳。因此，當您使用 MagicV2 遞交者時，請務必遵循管理失敗分段上傳的最佳實務。如需詳細資訊，請參閱《[Amazon EMR 管理指南》中的使用 Amazon S3 儲存貯體的最佳實務](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#emr-bucket-bestpractices)一節。
+ 如果任務失敗，成功任務遞交的任何檔案仍會顯示在目的地路徑中。在這種情況下，使用者需要手動清除遞交的檔案，才能在相同的目的地路徑上重新執行任務。
+ MagicV2 遞交者會對任務嘗試寫入的每個檔案耗用少量記憶體，直到任務遞交或中止為止。在大多數任務中，消耗的記憶體數量可忽略。不過，在某些情況下，當單一執行器程序同時處理大量任務時，可能會產生大量的記憶體壓力，而容器或執行器可能會耗盡記憶體 (OOM)。增加容器或執行器記憶體應可解決此問題。