

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

# 將資料上傳至 Amazon S3
<a name="emr-plan-upload-s3"></a>

如需有關如何將物件上傳至 Amazon S3 的資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[將物件新增至儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html)。如需有關將 Amazon S3 與 Hadoop 搭配使用的詳細資訊，請參閱 [http://wiki.apache.org/hadoop/AmazonS3](http://wiki.apache.org/hadoop2/AmazonS3)。

**Topics**
+ [建立並設定 Amazon S3 儲存貯體](#create-s3-bucket-input)
+ [設定適用於 Amazon S3 的分段上傳](#Config_Multipart)
+ [最佳實務](#emr-bucket-bestpractices)
+ [將資料上傳至 Amazon S3 Express One Zone](emr-express-one-zone.md)

## 建立並設定 Amazon S3 儲存貯體
<a name="create-s3-bucket-input"></a>

Amazon EMR 使用 適用於 Java 的 AWS SDK 搭配 Amazon S3 來存放輸入資料、日誌檔案和輸出資料。Amazon S3 將這些儲存位置視為*儲存貯體*。為了符合 Amazon S3 和 DNS 需求，儲存貯體有特定的約束與限制。如需詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[儲存貯體限制與局限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

本節說明如何使用 Amazon S3 AWS 管理主控台 建立和設定 Amazon S3 儲存貯體的許可。您也可以使用 Amazon S3 API 或 AWS CLI為 Amazon S3 儲存貯體建立並設定許可。您也可以搭配修改來使用 curl，將適合的身分驗證參數傳遞到 Amazon S3。

請參閱下列資源：
+ 若要使用主控台來建立儲存貯體，請參閱《Amazon S3 使用者指南》**中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)。
+ 若要使用 建立和使用儲存貯體 AWS CLI，請參閱《Amazon [ S3 使用者指南》中的搭配 使用高階 S3 命令 AWS Command Line Interface](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-s3-commands.html)。 *Amazon S3 *
+ 若要使用 SDK 建立儲存貯體，請參閱《Amazon Simple Storage Service 使用者指南》**中的[建立儲存貯體的範例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-get-location-example.html)。
+ 若要使用 curl 搭配儲存貯體，請參閱 [curl 的 Amazon S3 身分驗證工具](https://aws.amazon.com/code/amazon-s3-authentication-tool-for-curl/)。
+ 如需有關指定區域特定儲存貯體的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[存取儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html#access-bucket-intro)。
+ 若要使用 Amazon S3 Access Points 搭配儲存貯體，請參閱《Amazon S3 使用者指南》**中的[為您的存取點使用儲存貯體型別名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)。您可以輕鬆地將 Amazon S3 Access Points 與 Amazon S3 Access Point 別名搭配使用，而不是使用 Amazon S3 儲存貯體名稱。您可以將 Amazon S3 Access Point 別名同時用於現有的和新的應用程式，包括 Spark、Hive、Presto 和其他應用程式。

**注意**  
如果您為儲存貯體啟用登入，這只會啟用儲存貯體存取日誌而非 Amazon EMR 叢集日誌。

在儲存貯體建立期間或之後，您可以根據您的應用程式來設定存取儲存貯體的適當權限。通常，您會授予讀取、寫入權限給您自己 (擁有者) ，而將讀取權限授予給已驗證的使用者。

所需的 Amazon S3 儲存貯體必須先存在，您才能夠建立叢集。您必須將所需指令碼和叢集中參考的資料上傳至 Amazon S3。

## 設定適用於 Amazon S3 的分段上傳
<a name="Config_Multipart"></a>

Amazon EMR 透過適用於 Java 的 AWS SDK 支援 Amazon S3 分段上傳。分段上傳可讓您將單一物件以一組組件進行上傳。您可依任何順序分別上傳這些物件組件。若任何組件的傳輸失敗，您可再次傳輸該組件，而不會影響其他組件。當物件的所有組件都上傳完後，Amazon S3 會將這些組件組合起來建立該物件。

如需詳細資訊，請參閱*《Amazon Simple Storage Service 使用者指南》*中的[分段上傳概觀](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。

此外，Amazon EMR 提供的屬性可讓您更精確控制對於失敗的分段上傳部分進行的清除。

下表描述分段上傳的 Amazon EMR 組態屬性。您可以使用 `core-site` 組態分類來設定這些屬性。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/configure-apps.html)。


| 組態參數名稱 | 預設值 | Description | 
| --- | --- | --- | 
| fs.s3n.multipart.uploads.enabled | true | 布林值類型，用以指示是否啟用分段上傳。EMRFS 一致性檢視啟用時，分段上傳預設會啟用，而且會忽略對 false 設定此值。 | 
| fs.s3n.multipart.uploads.split.size | 134217728 | 啟用分段上傳時，指定部分的大小上限 (位元組數)，EMRFS 才會開始新的部分上傳。最小值為 `5242880` (5 MB)。如果已指定較小的值，會使用 `5242880`。上限為 `5368709120` (5 GB)。如果已指定較大的值，會使用 `5368709120`。 如果 EMRFS 用戶端加密已停用，而且 Amazon S3 優化的遞交程式也已停用，此值也會控制資料檔案直到 EMRFS 使用分段上傳 (而非 `PutObject` 請求上傳檔案) 之前可增加的大小上限。如需詳細資訊，請參閱  | 
| fs.s3n.ssl.enabled | true | 布林值類型，用以指示使用 http 或 https。 | 
| fs.s3.buckets.create.enabled | false | 布林值類型，用以指示是否要在儲存貯體不存在的情況下建立儲存貯體。設定為 false 會導致 CreateBucket 操作發生例外狀況。 | 
| fs.s3.multipart.clean.enabled | false | 指示對於不完整的分段上傳是否啟用背景定期清除的布林值類型。 | 
| fs.s3.multipart.clean.age.threshold | 604800 | 指定考慮清除之前分段上傳存留期下限 (秒數) 的長類型。預設為一週。 | 
| fs.s3.multipart.clean.jitter.max | 10000 | 指定在排定的下次清除之前將隨機抖動延遲上限 (秒數) 新增到 15 分鐘固定延遲的整數類型。 | 

### 停用分段上傳
<a name="emr-dev-multipart-upload"></a>

------
#### [ Console ]

**使用主控台停用分段上傳**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EC2 上的 EMR** 下，選擇**叢集**，然後選擇**建立叢集**。

1. 在**軟體設定**下，輸入下列組態：`classification=core-site,properties=[fs.s3n.multipart.uploads.enabled=false]`。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要啟動您的叢集，請選擇**建立叢集**。

------
#### [ CLI ]

**使用 停用分段上傳 AWS CLI**

此程序說明如何使用 AWS CLI停用分段上傳。若要停用分段上傳，請輸入含 `create-cluster` 參數的 `--bootstrap-actions` 命令。

1. 建立有下列內容的檔案 `myConfig.json`，並將該檔案儲存在您執行命令的同一個目錄中：

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3n.multipart.uploads.enabled": "false"
       }
     }
   ]
   ```

1. 輸入下列命令，然後使用 EC2 金鑰對的名稱來取代 *myKey*。
**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

   ```
   1. aws emr create-cluster --name "Test cluster" \
   2. --release-label emr-7.12.0 --applications Name=Hive Name=Pig \
   3. --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \
   4. --instance-count 3 --configurations file://myConfig.json
   ```

------
#### [ API ]

**使用 API 來停用分段上傳**
+ 如需有關以程式設計方式使用 Amazon S3 分段上傳的資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用適用於 Java 的 AWS SDK 進行分段上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMPDotJavaAPI.html)。

  如需適用於 Java 的 AWS 開發套件的詳細資訊，請參閱[AWS 適用於 Java 的 開發套件](https://aws.amazon.com/sdkforjava/)。

------

## 最佳實務
<a name="emr-bucket-bestpractices"></a>

以下是將 Amazon S3 儲存貯體與 EMR 叢集搭配使用的建議。

### 啟用版本控制
<a name="emr-enable-versioning"></a>

版本控制是適用於您 Amazon S3 儲存貯體的建議組態。您可透過啟用版本控制，確保資料不小心刪除或覆寫時，仍可復原。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》中的[使用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)。

### 清除失敗的分段上傳
<a name="emr-multipart-cleanup"></a>

EMR 叢集元件預設會透過適用於 Java 的 AWS SDK 搭配 Amazon S3 APIs 使用分段上傳，將日誌檔案和輸出資料寫入 Amazon S3。如需有關使用 Amazon EMR 變更與此組態相關的屬性的資訊，請參閱 [設定適用於 Amazon S3 的分段上傳](#Config_Multipart)。上傳大型檔案有時會導致 Amazon S3 分段上傳不完整。當分段上傳無法成功完成時，進行中的分段上傳會持續佔用您的儲存貯體，並會產生儲存費用。建議採取下列選項避免過多檔案儲存：
+ 針對與 Amazon EMR 搭配使用的儲存貯體，在 Amazon S3 中使用生命週期組態規則，在上傳起始日後三天移除不完整的分段上傳。生命週期組態規則可讓您控制物件的儲存類別和生命週期。如需詳細資訊，請參閱[物件生命週期管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)和[使用儲存貯體生命週期政策來中止不完整的分段上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)。
+ 透過將 `fs.s3.multipart.clean.enabled` 設定為 `true` 並調校其他清除參數啟用 Amazon EMR 的分段清除功能。對於大量、大規模，以及運作時間有限的叢集。此功能相當實用。在這種情況下，生命週期組態規則的 `DaysAfterIntitiation` 參數可能過長，即使設定為最低，仍會導致 Amazon S3 儲存中出現峰值。Amazon EMR 的分段清除可以達到更精確的控制。如需詳細資訊，請參閱[設定適用於 Amazon S3 的分段上傳](#Config_Multipart)。

### 管理版本標記
<a name="w2aac28c11c17c11b7c11b9"></a>

針對與 Amazon EMR 搭配使用的版本控制儲存貯體，建議在 Amazon S3 中啟用生命週期組態規則，以移除過期的物件刪除標記。在版本控制的儲存貯體中刪除物件時，即會建立一個刪除標記。如果物件的舊版本於後續過期，則會留下儲存貯體中的過期物件刪除標記。雖然不會針對刪除標記收費，移除過期的標記可以提升 LIST 請求的效能。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》中的[具有版本控制的儲存貯體的生命週期組態](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)。

### 效能最佳實務
<a name="w2aac28c11c17c11b7c11c11"></a>

根據您的工作負載而定，對這些叢集的特定類型使用 EMR 叢集和應用程式會導致對儲存貯體的請求數量過高。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[請求率與效能考量](https://docs.aws.amazon.com/AmazonS3/latest/userguide/request-rate-perf-considerations.html)。