

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

# 经 EMRFS S3 优化的提交协议和分段上传
<a name="emr-spark-commit-protocol-multipart"></a>

要在经 EMRFS S3 优化的提交协议中使用动态分区覆盖优化，必须在 Amazon EMR 中启用分段上传。默认启用分段上传。需要时，您可以重新启用它。有关更多信息，请参阅《Amazon EMR 管理指南》**中的[为 Amazon S3 配置分段上传](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart)。

在动态分区覆盖期间，经 EMRFS S3 优化的提交协议利用分段上传类似于事务的特征，来确保由任务写入的文件在任务提交后尝试仅显示在任务的输出位置。通过以这种方式使用分段上传，提交协议提高了默认 `SQLHadoopMapReduceCommitProtocol` 的任务提交性能。使用经 EMRFS S3 优化的提交协议时，需要考虑一些与传统分段上传行为的关键区别：
+ 无论文件大小如何，分段上传都会执行。这不同于 EMRFS 的默认行为，其中 `fs.s3n.multipart.uploads.split.size` 属性在触发分段上传时，控制文件大小。
+ 在任务提交或中止之前，分段上传在较长时间内都保持在未完成状态。这不同于 EMRFS 的默认行为，其中分段上传在任务完成写入给定文件时完成。

由于这些区别，如果 Spark Executor JVM 在任务正在运行或将数据写入 Amazon S3 时发生崩溃或被终止，或者 Spark Driver JVM 在任务正在运行时发生崩溃或被终止，未完成的分段上传更可能会被留下来。因此，当您使用经 EMRFS S3 优化的提交协议时，请务必遵循管理失败的分段上传的最佳实践。有关更多信息，请参阅《Amazon EMR 管理指南》**中使用 Amazon S3 存储桶的[最佳实践](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-plan-upload-s3.html#emr-bucket-bestpractices)。