

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

# 將資料取得至 Amazon EMR 的不同方式
<a name="emr-plan-get-data-in"></a>

Amazon EMR 提供多種將資料載入到叢集的方式。最常見的方式是將資料上傳至 Amazon S3，並使用 Amazon EMR 內建功能，以將資料載入到您的叢集。您也可以使用 Hadoop DistributedCache 功能，將檔案從分散式檔案系統傳輸到本機檔案系統。Amazon EMR 提供的 Hive 實作 (Hive 版本 0.7.1.1 和更高版本) 包含可用於匯入和匯出 DynamoDB 和 Amazon EMR 叢集間資料的功能。如果您有要處理的大量現場部署資料，您會發現 Direct Connect 服務很有用。

**Topics**
+ [將資料上傳至 Amazon S3](emr-plan-upload-s3.md)
+ [使用 上傳資料 AWS DataSync](emr-plan-upload-datasync.md)
+ [使用 Amazon EMR 匯入具有分散式快取的檔案](emr-plan-input-distributed-cache.md)
+ [使用 Amazon EMR 偵測和處理壓縮檔案](HowtoProcessGzippedFiles.md)
+ [使用 Amazon EMR 將 DynamoDB 資料匯入 Hive](emr-plan-input-dynamodb.md)
+ [從 Amazon EMR AWS Direct Connect 使用 連線至資料](emr-plan-input-directconnect.md)
+ [使用 上傳 Amazon EMR 的大量資料 AWS Snowball Edge](emr-plan-input-snowball.md)

# 將資料上傳至 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)。

# 將資料上傳至 Amazon S3 Express One Zone
<a name="emr-express-one-zone"></a>

## 概觀
<a name="emr-express-one-zone-overview"></a>

使用 Amazon EMR 6.15.0 及更高版本時，您可以將 Amazon EMR 搭配 Apache Spark，並與 [Amazon S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html) 儲存類別結合使用，以提高 Spark 作業的效能。Amazon EMR 7.2.0 版和更新版本也支援 HBase、Flink 和 Hive，因此如果您使用這些應用程式，也可以受益於 S3 Express One Zone。*S3 Express One Zone* 是 S3 儲存類別，適用於頻繁存取資料的應用程式 (每秒有數十萬個請求)。在發布時，S3 Express One Zone 提供 Amazon S3 中最低延遲和最高效能的雲端物件儲存。

## 先決條件
<a name="emr-express-one-zone-prereqs"></a>
+ **S3 Express One Zone 許可**：當 S3 Express One Zone 最初在 S3 物件上執行 `GET`、`LIST` 或 `PUT` 等動作時，儲存類別會代表您呼叫 `CreateSession`。您的 IAM 政策必須允許 `s3express:CreateSession` 許可，S3A 連接器才能調用 `CreateSession` API。如需具有此許可的範例政策，請參閱 [開始使用 Amazon S3 Express One Zone](#emr-express-one-zone-start)。
+ **S3A 連接器**：若要將 Spark 叢集設定為存取使用 S3 Express One Zone 儲存類別的 Amazon S3 儲存貯體中的資料，您必須使用 Apache Hadoop 連接器 S3A。若要使用該連接器，請確保所有 S3 URI 均使用 `s3a` 結構描述。如果沒有，您可以變更用於 `s3` 和 `s3n` 結構描述的檔案系統實作。

若要變更 `s3` 結構描述，請指定下列叢集組態：

```
[
  {
    "Classification": "core-site",
    "Properties": {
      "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
      "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A"
    }
  }
]
```

若要變更 `s3n` 結構描述，請指定下列叢集組態：

```
[
  {
    "Classification": "core-site",
    "Properties": {
      "fs.s3n.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
      "fs.AbstractFileSystem.s3n.impl": "org.apache.hadoop.fs.s3a.S3A"
    }
  }
]
```

## 開始使用 Amazon S3 Express One Zone
<a name="emr-express-one-zone-start"></a>

**Topics**
+ [建立許可政策](#emr-express-one-zone-permissions)
+ [建立和設定叢集](#emr-express-one-zone-create)
+ [組態概觀](#emr-express-one-zone-configs)

### 建立許可政策
<a name="emr-express-one-zone-permissions"></a>

在建立使用 Amazon S3 Express One Zone 的叢集之前，您必須先建立 IAM 政策以連接至該叢集的 Amazon EC2 執行個體設定檔。該 IAM 政策必須具有 S3 Express One Zone 儲存類別的存取許可。下列範例政策示範如何授予所需的許可。建立政策後，將政策連接至用於建立 EMR 叢集的執行個體設定檔角色，如 [建立和設定叢集](#emr-express-one-zone-create) 一節中所述。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3express:*:123456789012:bucket/example-s3-bucket"
      ],
      "Action": [
        "s3express:CreateSession"
      ],
      "Sid": "AllowS3EXPRESSCreatesession"
    }
  ]
}
```

------

### 建立和設定叢集
<a name="emr-express-one-zone-create"></a>

接著，建立執行 Spark、HBase、Flink 或 Hive 搭配 S3 Express One Zone 的叢集。下列步驟說明在 AWS 管理主控台中建立叢集的高階概觀：

1. 導覽至 Amazon EMR 主控台，然後從側邊欄中選取**叢集**。然後選擇**建立叢集**。

1. 如果您使用 Spark，請選取 Amazon EMR 發行版本 `emr-6.15.0` 或更高版本。如果您使用 HBase、Flink 或 Hive，請選取 `emr-7.2.0` 或更高版本。

1. 選取您要包含在叢集上的應用程式，例如 Spark、HBase 或 Flink。

1. 若要啟用 Amazon S3 Express One Zone，請在**軟體設定**區段中輸入類似下列範例的組態。在本程序後的 [組態概觀](#emr-express-one-zone-configs) 一節中會說明組態和建議值。

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3a.aws.credentials.provider": "software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider",
         "fs.s3a.change.detection.mode": "none",
         "fs.s3a.endpoint.region": "aa-example-1",
         "fs.s3a.select.enabled": "false"
       }
     },
     {
       "Classification": "spark-defaults",
       "Properties": {
         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
       }
     }
   ]
   ```

1. 在**適用於 Amazon EMR 的 EC2 執行個體設定檔**區段中，選擇使用現有角色，並使用具有您在上述 [建立許可政策](#emr-express-one-zone-permissions) 一節建立之所連接政策的角色。

1. 根據您的應用程式進行其餘叢集設定，然後選取**建立叢集**。

### 組態概觀
<a name="emr-express-one-zone-configs"></a>

下列表格說明您在設定將 S3 Express One Zone 與 Amazon EMR 搭配使用的叢集時應指定的組態和建議值，如 [建立和設定叢集](#emr-express-one-zone-create) 一節中所述。

**S3A 組態**


| 參數 | 預設值 | 建議值 | 說明 | 
| --- | --- | --- | --- | 
|  `fs.s3a.aws.credentials.provider`  |  如果未指定，請依以下順序使用 `AWSCredentialProviderList`：`TemporaryAWSCredentialsProvider`、`SimpleAWSCredentialsProvider`、`EnvironmentVariableCredentialsProvider`、`IAMInstanceCredentialsProvider`。  |  <pre>software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider</pre>  |  Amazon EMR 執行個體設定檔角色應具有允許 S3A 檔案系統呼叫 `s3express:CreateSession` 的政策。具有 S3 Express One Zone 許可的其他憑證提供者也適用。  | 
|  `fs.s3a.endpoint.region`  |  null  |  您建立儲存貯 AWS 區域 體的 。  |  區域解析邏輯不適用於 S3 Express One Zone 儲存類別。  | 
|  `fs.s3a.select.enabled`  |  `true`  |  `false`  |  S3 Express One Zone 儲存類別不支援 Amazon S3 `select`。  | 
|  `fs.s3a.change.detection.mode`  |  `server`  |  無  |  S3A 的變更偵測是透過檢查 MD5 型的 `etags` 來運作。S3 Express One Zone 儲存類別不支援 MD5 `checksums`。  | 

**Spark 組態**


| 參數 | 預設值 | 建議值 | 說明 | 
| --- | --- | --- | --- | 
|  `spark.sql.sources.fastS3PartitionDiscovery.enabled`  |  `true`  |  false  |  內部優化使用 S3 Express One Zone 儲存類別不支援的 S3 API 參數。  | 

**Hive 組態**


| 參數 | 預設值 | 建議值 | 說明 | 
| --- | --- | --- | --- | 
|  `hive.exec.fast.s3.partition.discovery.enabled`  |  `true`  |  false  |  內部優化使用 S3 Express One Zone 儲存類別不支援的 S3 API 參數。  | 

## 考量事項
<a name="emr-express-one-zone-considerations"></a>

將 Amazon EMR 上的 Apache Spark 與 S3 Express One Zone 儲存類別整合時請考量以下事項：
+ 需要 S3A 連接器才能將 S3 Express One Zone 與 Amazon EMR 搭配使用。只有 S3A 具有與 S3 Express One Zone 互動所需的功能和儲存類別。如需了解設定該連接器的步驟，請參閱 [先決條件](#emr-express-one-zone-prereqs)。
+ Amazon S3 Express One Zone 儲存類別支援 SSE-S3 和 SSE-KMS 加密。如需詳細資訊，請參閱[使用 Amazon S3 進行伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-data-protection.html#s3-express-ecnryption)。
+ Amazon S3 Express One Zone 儲存類別不支援使用 S3A `FileOutputCommitter` 寫入。在 S3 Express One Zone 儲存貯體上使用 S3A `FileOutputCommitter` 寫入會導致錯誤：*InvalidStorageClass: The storage class you specified is not valid*。
+ 在 EC2 上的 EMR 上，Amazon EMR 6.15.0 版及更高版本支援 Amazon S3 Express One Zone。此外，Amazon EMR 7.2.0 版及更新版本支援 Amazon EMR on EKS 和 Amazon EMR Serverless。

# 使用 上傳資料 AWS DataSync
<a name="emr-plan-upload-datasync"></a>

AWS DataSync 是一種線上資料傳輸服務，可簡化、自動化和加速在內部部署儲存和 AWS 儲存服務之間或在 AWS 儲存服務之間移動資料的程序。DataSync 支援各種內部部署儲存系統，例如 Hadoop 分散式檔案系統 (HDFS)、NAS 檔案伺服器，以及自我管理的物件儲存。

將資料載入到叢集的最常見方式是將資料上傳至 Amazon S3，並使用 Amazon EMR 內建功能，以將資料載入到您的叢集。

DataSync 可以協助您完成下列任務：
+ 將 Hadoop 叢集上的 HDFS 複寫至 Amazon S3 以實現業務連續性
+ 將 HDFS 複製到 Amazon S3 以填入您的資料湖
+ 在 Hadoop 叢集的 HDFS 與 Amazon S3 之間傳輸資料以進行分析和處理

若要將資料上傳至 S3 儲存貯體，請先在與內部部署儲存相同的網路中部署一或多個 DataSync 代理程式。*代理程式*是用於對自我管理的位置讀寫資料的虛擬機器 (VM)。然後，您可以在 AWS 區域 S3 儲存貯體所在的 AWS 帳戶 和 中啟用代理程式。

啟用代理程式後，您可以為內部部署儲存建立來源位置、S3 儲存貯體的目的地位置以及任務。*任務*是一組兩個位置 (來源與目的地) 和一組可用來控制任務行為的預設選項。

最後，執行 DataSync 任務以將資料從來源傳輸至目的地。

如需詳細資訊，請參閱 [AWS DataSync入門](https://docs.aws.amazon.com/datasync/latest/userguide/getting-started.html)。

# 使用 Amazon EMR 匯入具有分散式快取的檔案
<a name="emr-plan-input-distributed-cache"></a>

DistributedCache 是 Hadoop 功能，可在映射或降低任務需要存取共用資料時提升效率。如果您的叢集是根據現有的應用程式或是在建立叢集時未安裝的二進位，您可以使用 DistributedCache 來匯入這些檔案。此功能可讓叢集節點從其本機檔案系統讀取匯入的檔案，而不是從其他叢集節點擷取檔案。

如需詳細資訊，請前往 [http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html](http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html)。

建立叢集時，您會調用 DistributedCache。Hadoop 任務開始之前會將檔案快取，並在任務期間保持快取。您可以快取儲存在任何 Hadoop 相容的檔案系統的檔案，例如，HDFS 或 Amazon S3。檔案快取的預設大小為 10 GB。若要變更快取大小，請使用引導操作重新設定 Hadoop 參數 `local.cache.size`。如需詳細資訊，請參閱[建立引導操作，以使用 Amazon EMR 叢集安裝其他軟體](emr-plan-bootstrap.md)。

**Topics**
+ [支援的檔案類型](#emr-dev-supported-file-types)
+ [快取檔案的位置](#locationofcache)
+ [從串流應用程式存取快取檔案](#cachemapper)
+ [從串流應用程式存取快取檔案](#cacheinconsole)

## 支援的檔案類型
<a name="emr-dev-supported-file-types"></a>

DistributedCache 可允許單一檔案和存檔。個別檔案會快取成唯讀檔案。可執行檔和二進位檔有執行權限設定。

存檔是使用公用程式 (例如 `gzip`) 封裝的一個或多個檔案。DistributedCache 將壓縮檔案傳遞至每個核心節點，並將存檔解壓縮為快取的一部分。DistributedCache 支援以下壓縮格式：
+ zip
+ tgz
+ tar.gz
+ tar
+ jar

## 快取檔案的位置
<a name="locationofcache"></a>

DistributedCache 僅會將檔案複製到核心節點。如果叢集中沒有核心節點，則 DistributedCache 會將檔案複製到主節點。

DistributedCache 會使用 symlinks 將快取檔案關聯至映射器和縮減器的目前工作目錄。符號連結是檔案位置的別名，而非實際的檔案位置。參數的值 (`yarn-site.xml` 中的 `yarn.nodemanager.local-dirs`) 會指定暫時檔案的位置。Amazon EMR 會將此參數設定為 `/mnt/mapred`，或根據執行個體類型和 EMR 版本而變化。例如，設定可能會有 `/mnt/mapred` 和 `/mnt1/mapred`，因為執行個體類型有兩個暫時性磁碟區。快取檔案位於 `/mnt/mapred/taskTracker/archive` 中的臨時檔案位置的子目錄。

如果您快取單一檔案，DistributedCache 會將該檔案放在 `archive` 目錄中。如果您快取存檔，DistributedCache 會解壓縮檔案，在 `/archive` 中建立子目錄，其名稱與封存檔案名稱相同。個別檔案位於新的子目錄。

您只能在使用串流時使用 DistributedCache。

## 從串流應用程式存取快取檔案
<a name="cachemapper"></a>

若要從您的映射器或縮減器應用程式存取快取的檔案，務必將目前的工作目錄 (./) 新增到您的應用程式，並且如同目前工作目錄中的檔案一般參考快取的檔案。

## 從串流應用程式存取快取檔案
<a name="cacheinconsole"></a>

您可以使用 AWS 管理主控台 和 AWS CLI 來建立使用分散式快取的叢集。

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

**使用新主控台來指定分散式快取檔案**

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

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

1. 在**步驟**下，選擇**新增步驟**。這會開啟**新增步驟**對話方塊。在**引數**欄位中，納入檔案和存檔以儲存至快取。檔案大小 (或在封存檔案中的檔案大小總和) 必須少於分配的快取大小。

   如果要將個別檔案新增至分散式快取，在檔案放置在本機快取中時，在檔案的名稱和位置、井字號 (\$1)，以及您想要提供給檔案的名稱後面接著指定 `-cacheFile`。下列範例示範如何將個別檔案新增至分散式快取。

   ```
   -cacheFile \
   s3://amzn-s3-demo-bucket/file-name#cache-file-name
   ```

   如果要將封存檔案新增至分散式快取，請在 Amazon S3 中的檔案的位置、井字號 (\$1)，以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 `-cacheArchive`。下列範例示範如何將封存檔案新增至分散式快取。

   ```
   -cacheArchive \
   s3://amzn-s3-demo-bucket/archive-name#cache-archive-name
   ```

   在其他對話方塊欄位中輸入適當的值。選項視步驟類型而異。若要新增步驟並結束對話方塊，請選擇**新增步驟**。

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

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

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

**使用 指定分散式快取檔案 AWS CLI**
+ 若要在叢集建立時提交串流步驟，輸入含 `create-cluster` 參數的 `--steps` 命令。若要使用 指定分散式快取檔案 AWS CLI，請在提交串流步驟時指定適當的引數。

  如果要將個別檔案新增至分散式快取，在檔案放置在本機快取中時，在檔案的名稱和位置、井字號 (\$1)，以及您想要提供給檔案的名稱後面接著指定 `-cacheFile`。

  如果要將封存檔案新增至分散式快取，請在 Amazon S3 中的檔案的位置、井字號 (\$1)，以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 `-cacheArchive`。下列範例示範如何將封存檔案新增至分散式快取。

  如需在 中使用 Amazon EMR 命令的詳細資訊 AWS CLI，請參閱 [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

**Example 1**  
輸入以下命令來啟動叢集並提交使用 `-cacheFile` 的串流步驟，將一個檔案 `sample_dataset_cached.dat` 新增至快取。  

```
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]
```
如果您在未使用 `--instance-groups` 參數的情況下指定執行個體計數，即會啟動單一主節點，且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。  
如果您先前尚未建立預設 EMR 服務角色和 EC2 執行個體設定檔，請先鍵入 `aws emr create-default-roles` 來建立這些設定檔，然後再鍵入 `create-cluster` 子命令。

**Example 2**  
以下命令會顯示串流叢集的建立，並使用 `-cacheArchive` 將封存檔案新增到快取。  

```
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]
```
如果您在未使用 `--instance-groups` 參數的情況下指定執行個體計數，即會啟動單一主節點，且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。  
如果您先前尚未建立預設 EMR 服務角色和 EC2 執行個體設定檔，請先鍵入 `aws emr create-default-roles` 來建立這些設定檔，然後再鍵入 `create-cluster` 子命令。

------

# 使用 Amazon EMR 偵測和處理壓縮檔案
<a name="HowtoProcessGzippedFiles"></a>

Hadoop 會檢查副檔名以偵測壓縮檔案。Hadoop 支援的壓縮類型為：gzip、bzip2 和 LZO。您不需要採取任何額外的動作來擷取使用這些壓縮類型的檔案；Hadoop 會為您處理。

若要為 LZO 檔案建立索引，您可以使用 hadoop-lzo 資料庫，您可從 [ https://github.com/kevinweil/hadoop-lzo](https://github.com/kevinweil/hadoop-lzo) 下載。請注意，因為這是第三方程式庫，Amazon EMR 不提供如何使用此工具的開發人員支援。如需使用資訊，請參閱 [hadoop-lzo 讀我檔。](https://github.com/kevinweil/hadoop-lzo/blob/master/README.md)

# 使用 Amazon EMR 將 DynamoDB 資料匯入 Hive
<a name="emr-plan-input-dynamodb"></a>

Amazon EMR 提供的 Hive 實作包含您可在 DynamoDB 與 Amazon EMR 叢集之間匯入和匯出資料的功能。如果您的輸入資料儲存在 DynamoDB 中時，此功能很有用。如需詳細資訊，請參閱[使用 Amazon EMR 在 DynamoDB 中匯出、匯入、查詢和聯結資料表](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMRforDynamoDB.html)。

# 從 Amazon EMR AWS Direct Connect 使用 連線至資料
<a name="emr-plan-input-directconnect"></a>

Direct Connect 是一項服務，可讓您從資料中心、辦公室或主機代管環境建立與 Amazon Web Services 的私有專用網路連線。如果您有大量輸入資料，使用 Direct Connect 可能會降低網路成本、增加頻寬輸送量，並提供比網際網路連線更一致的網路體驗。如需詳細資訊，請參閱 [Direct Connect 使用者指南](https://docs.aws.amazon.com/directconnect/latest/UserGuide/)。

# 使用 上傳 Amazon EMR 的大量資料 AWS Snowball Edge
<a name="emr-plan-input-snowball"></a>

AWS Snowball Edge 是一項服務，可讓您以faster-than-internet的速度，在 Amazon Simple Storage Service (Amazon S3) 與現場資料儲存位置之間傳輸大量資料。Snowball Edge 支援兩種任務類型：匯入任務和匯出任務。匯入作業涉及將資料從內部部署來源傳輸至 Amazon S3 儲存貯體。匯出作業涉及將資料從 Amazon S3 儲存貯體傳輸至內部部署來源。對於這兩種任務類型，Snowball Edge 裝置可在 Amazon S3 和現場資料儲存位置之間傳輸資料時保護和保護您的資料。Snowball Edge 裝置堅固耐用，受到 AWS Key Management Service () 的保護AWS KMS。如需詳細資訊，請參閱 [AWS Snowball Edge 邊緣開發人員指南](https://docs.aws.amazon.com/snowball/latest/developer-guide/)。