

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

# 什麼是 Amazon EMR？
<a name="emr-what-is-emr"></a>

先前稱為 Amazon Elastic MapReduce 的 Amazon EMR 是受管叢集平台，可簡化 [Apache Hadoop ](https://aws.amazon.com/elasticmapreduce/details/hadoop)和 [Apache Spark](https://aws.amazon.com/elasticmapreduce/details/spark) 等大數據架構的執行， AWS 以處理和分析大量資料。使用這些架構和相關的開放原始碼專案，可以處理用於分析用途和商業智慧工作負載的資料。Amazon EMR 也可讓您轉換大量資料，並在其他 AWS 資料存放區和資料庫 (例如 Amazon Simple Storage Service (Amazon S3) 和 Amazon DynamoDB) 中傳入和傳出。

如果您是第一次使用 Amazon EMR，除了此章節以外，建議您在開始前閱讀以下章節：
+ [Amazon EMR](https://aws.amazon.com/elasticmapreduce/) - 此服務頁面提供 Amazon EMR 重點介紹、產品詳細資訊和定價資訊。
+ [教學課程：Amazon EMR 入門](emr-gs.md) - 本教學課程可幫助您快速開始使用 Amazon EMR。

**Topics**
+ [了解如何建立和使用 Amazon EMR 叢集](emr-overview.md)
+ [使用 Amazon EMR 的好處](emr-overview-benefits.md)
+ [Amazon EMR 架構和服務層](emr-overview-arch.md)

# 了解如何建立和使用 Amazon EMR 叢集
<a name="emr-overview"></a>

本主題提供 Amazon EMR 叢集的概觀，包括如何將工作提交到叢集，該資料的處理方式，以及該叢集在處理期間經歷的各種狀態。

**Topics**
+ [熟悉叢集和節點](#emr-overview-clusters)
+ [將工作提交到叢集](#emr-work-cluster)
+ [處理資料](#emr-overview-data-processing)
+ [了解叢集生命週期](#emr-overview-cluster-lifecycle)

## 熟悉叢集和節點
<a name="emr-overview-clusters"></a>

Amazon EMR 的中心元件是*叢集*。叢集是 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的集合。叢集中的每個執行個體稱為*節點*。每個節點擁有在叢集內的一個角色，也就是*節點類型*。Amazon EMR 也在每個節點類型上安裝其他軟體元件，使每個節點在分散式應用程式 (如 Apache Hadoop) 中發揮作用。

 Amazon EMR 中的節點類型如下所示：
+ **主節點**：此種節點會執行軟體元件，統籌其他節點之間的資料與任務分發以進行處理，藉此管理叢集。主節點會追蹤任務的狀態，並監控叢集運作狀況。每個叢集都會有主節點，因此您可以建立只有主節點的單一節點叢集。
+ ** 核心節點**：一種節點，內含軟體元件，這些元件可在叢集上的 Hadoop 分散式檔案系統 (HDFS) 中，執行任務和儲存資料。多節點叢集至少會有一個核心節點。
+ ** 任務節點**：一種節點，內含軟體元件，這些元件只會執行任務，而不會在 HDFS 中儲存資料。任務節點是選用的。

## 將工作提交到叢集
<a name="emr-work-cluster"></a>

在 Amazon EMR 上執行叢集時，有幾個選項可讓您指定需要完成之工作的方式。
+ 提供要透過函式完成的完整工作定義，而該函式已在叢集建立時指定為步驟。此定義通常會用於處理一組資料量的叢集，然後在處理完成時終止。
+ 建立長時間執行的叢集，並使用 Amazon EMR 主控台、Amazon EMR API 或 AWS CLI 來提交步驟，其中可能包含一或多個任務。如需詳細資訊，請參閱[將工作提交至 Amazon EMR 叢集](emr-work-with-steps.md)。
+ 建立叢集，並依需要使用 SSH 來連線到主節點和其他節點，並使用已安裝應用程式提供的介面來執行任務、提交查詢，不論是以指令碼撰寫或是以互動的方式進行。如需詳細資訊，請參閱 [Amazon EMR 版本指南](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/)。

## 處理資料
<a name="emr-overview-data-processing"></a>

啟動您的叢集時，您可以選擇要安裝的架構和應用程式來處理您的資料處理需求。若要在 Amazon EMR 叢集中處理資料，您可以將作業或查詢直接提交給已安裝的應用程式，或是在叢集中執行*步驟*。

### 將作業直接提交到應用程式
<a name="emr-overview-submitting-jobs"></a>

您可以提交作業並與在 Amazon EMR 叢集中安裝的軟體直接互動。若要這樣做，您通常會透過安全連線連接到主節點並存取可用於在叢集上直接執行之軟體的介面和工具。如需詳細資訊，請參閱[連線至 Amazon EMR 叢集](emr-connect-master-node.md)。

### 執行步驟來處理資料
<a name="emr-overview-steps"></a>

您可以將一個或多個排定順序的步驟提交到 Amazon EMR 叢集。每個步驟是工作的單位，其中包含透過叢集上安裝的軟體來操作資料進行處理的指示。

 下面是使用四個步驟的程序：

1. 提交輸入資料集以進行處理。

1. 使用 Pig 程式以處理第一步的輸出。

1. 使用 Hive 程式以處理第二個輸入資料集。

1. 寫入輸出資料集。

一般而言，在 Amazon EMR 中處理資料時，輸入即為資料，這些資料是在您所選擇的底層檔案系統 (例如 Amazon S3 或 HDFS) 中以檔案形式所儲存的。此資料會在處理序列中從一個步驟傳遞到下一個步驟。最後步驟會將輸出資料寫入到指定的位置 (如 Amazon S3 儲存貯體)。

 在下列序列中執行步驟：

1. 提交請求以開始處理步驟。

1. 所有步驟的狀態會設定為 **PENDING (待定)**。

1. 序列中的第一個步驟開始時，其狀態會變更為 **RUNNING (執行中)**。其他步驟的狀態則會保持為 **PENDING (待定)**。

1. 第一個步驟完成之後，其狀態會變更為 **COMPLETED (已完成)**。

1. 序列中的下一個步驟開始時，其狀態會變更為 **RUNNING (執行中)**。該步驟完成時，其狀態會變更為 **COMPLETED (已完成)**。

1. 每個步驟會重複此模式，直到所有步驟都完成和結束處理。

下圖代表步驟處理時的步驟序列和步驟的狀態變更。

![\[顯示不同叢集步驟狀態的 Amazon EMR 序列圖。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/step-sequence.png)


如果步驟在處理過程中失敗，其狀態會變更為 **FAILED**。您可以決定每個步驟之後會發生什麼事情。根據預設，此序列中剩下的任何步驟都會設定為 **CANCELLED**，如果前一個步驟失敗，則不會執行。您也可以選擇忽略失敗，允許剩下的步驟繼續執行，或者立刻終止叢集運作。

下圖代表步驟在處理期間故障時的步驟序列和狀態的預設變更。

![\[Amazon EMR 的序列圖會顯示當之前的叢集步驟失敗時，後續步驟會發生什麼情況。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/step-sequence-failed.png)


## 了解叢集生命週期
<a name="emr-overview-cluster-lifecycle"></a>

 成功的 Amazon EMR 叢集會遵循此程序：

1. Amazon EMR 會先根據您的規格，為每個執行個體叢集內的 EC2 執行個體進行佈建。如需詳細資訊，請參閱[設定 Amazon EMR 叢集硬體和聯網](emr-plan-instances.md)。針對所有的執行個體，Amazon EMR 會使用 Amazon EMR 的預設 AMI，或是您所指定的自訂 Amazon Linux AMI。如需詳細資訊，請參閱[使用自訂 AMI 為 Amazon EMR 叢集組態提供更多彈性](emr-custom-ami.md)。在此階段，叢集狀態為 `STARTING`。

1. Amazon EMR 會在每個執行個體上執行您所指定的*引導操作*。您可以使用引導操作來安裝自訂的應用程式，並執行您需要的自訂操作。如需詳細資訊，請參閱[建立引導操作，以使用 Amazon EMR 叢集安裝其他軟體](emr-plan-bootstrap.md)。在此階段，叢集狀態為 `BOOTSTRAPPING`。

1. Amazon EMR 會安裝您在建立叢集時所指定的原生應用程式，例如，Hive、Hadoop、Spark 和其他應用程式。

1. 引導操作成功完成、且原生應用程式安裝完成之後，叢集狀態會變成 `RUNNING`。此時，您可以連線到叢集執行個體，而叢集會循序執行您在叢及建立時所指定的任何步驟。您可以提交其他額外步驟，該步驟將在任何先前步驟完成之後開始執行。如需詳細資訊，請參閱[將工作提交至 Amazon EMR 叢集](emr-work-with-steps.md)。

1. 在步驟執行成功之後，叢集就會進入 `WAITING` 狀態。如果叢集已設定成在最後步驟完成後自動終止，則叢集會進入 `TERMINATING` 狀態，然後進入 `TERMINATED` 狀態。如果叢集設定為等待，則必須在不再需要時手動將其關閉。手動關閉叢集之後，它將進入 `TERMINATING` 狀態，然後進入 `TERMINATED` 狀態。

叢集生命週期中的故障會造成 Amazon EMR 終止該叢集及其所有執行個體，除非您啟用終止保護。如果因失敗而終止叢集，則叢集上的任何儲存資料都將遭到刪除，而且叢集將設為 `TERMINATED_WITH_ERRORS` 狀態。如果已啟用終止保護，則您可以從叢集上擷取資料，並且移除終止保護，並接著終止叢集。如需詳細資訊，請參閱[使用終止保護來保護 Amazon EMR 叢集免於意外關閉](UsingEMR_TerminationProtection.md)。

下圖代表叢集的生命週期，以及生命週期的每個階段會與特定叢集狀態的對應。

![\[Amazon EMR 的圖表會顯示叢集生命週期，以及生命週期的每個階段如何映射到特定叢集狀態。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/emr-cluster-lifecycle.png)


# 使用 Amazon EMR 的好處
<a name="emr-overview-benefits"></a>

使用 Amazon EMR 有許多好處。其中包括透過 提供的彈性， AWS 以及相較於建置您自己的內部部署資源，可用的成本節省。此章節會提供其他好處的概觀和其他資訊的連結，這些資訊可協助您深入探索。

**Topics**
+ [節省成本](#emr-benefits-cost)
+ [AWS 整合](#emr-benefits-integration)
+ [部署](#emr-benefits-deployment)
+ [可擴展性與彈性](#emr-benefits-scalability)
+ [可靠性](#emr-benefits-reliability)
+ [安全](#emr-benefits-security)
+ [監控](#emr-benefits-monitoring)
+ [管理介面](#emr-what-tools)

## 節省成本
<a name="emr-benefits-cost"></a>

Amazon EMR 定價取決於執行個體類型和您部署的 Amazon EC2 執行個體數量以及啟動叢集所在的區域。隨需定價提供低費率，但您可以透過購買預留執行個體或 Spot 執行個體來進一步降低成本。Spot 執行個體可以讓您大幅節省成本，在某些情況下價格可低至隨需定價的十分之一。

**注意**  
如果您搭配 EMR 叢集使用 Amazon S3、Amazon Kinesis 或 DynamoDB ，這些服務將產生額外的費用，會與您的 Amazon EMR 用量分開計費。

**注意**  
在私有子網路中設定 Amazon EMR 叢集時，建議您同時[為 Amazon S3 設定 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)。如果您的 EMR 叢集位於沒有 Amazon S3 VPC 端點的私有子網路中，則會產生與 S3 流量關聯的額外 NAT 閘道費用，因為 EMR 叢集與 S3 之間的流量不會保留在 VPC 內。

如需更多關於定價選項和詳細資料的更多資訊，請參閱 [Amazon EMR 定價](https://aws.amazon.com/elasticmapreduce/pricing/)。

## AWS 整合
<a name="emr-benefits-integration"></a>

Amazon EMR 與其他 AWS 服務整合，為您的叢集提供與聯網、儲存、安全性等相關的功能。以下清單提供此整合的多個範例：
+ 包含叢集中節點之執行個體的 Amazon EC2
+ Amazon Virtual Private Cloud (Amazon VPC) 可設定您啟動執行個體所在的虛擬網路
+ Amazon S3 會儲存輸入和輸出資料
+ Amazon CloudWatch 會監控叢集效能和設定警示
+ AWS Identity and Access Management (IAM) 以設定許可
+ AWS CloudTrail 稽核對服務提出的請求
+ AWS Data Pipeline 排程和啟動叢集
+ AWS Lake Formation 探索、編目和保護 Amazon S3 資料湖中的資料

## 部署
<a name="emr-benefits-deployment"></a>

EMR 叢集包含 EC2 執行個體，其會執行您提交到叢集的工作。啟動叢集時，Amazon EMR 會使用您選擇的應用程式 (例如 Apache Hadoop 或 Spark) 設定執行個體。選擇執行個體大小和最適合處理叢集需求的類型：批次處理、低延遲查詢、串流資料或大型資料儲存體。關於 Amazon EMR 可用的執行個體類型詳細資訊，請參閱 [設定 Amazon EMR 叢集硬體和聯網](emr-plan-instances.md)。

Amazon EMR 提供多種在叢集上設定軟體的方法。例如，您可以安裝 Amazon EMR 版本，內含可包括多樣化架構 (例如 Hadoop) 和應用程式 (如 Hive、Pig、或 Spark) 的所選應用程式組。也可以安裝多個 MapR 分發。Amazon EMR 會使用 Amazon Linux，因此您也可以使用 yum 套件管理工具或從來源手動在叢集上安裝軟體。如需詳細資訊，請參閱[當您啟動 Amazon EMR 叢集時設定應用程式](emr-plan-software.md)。

## 可擴展性與彈性
<a name="emr-benefits-scalability"></a>

Amazon EMR 可隨著運算需求變更而提供彈性來擴展或縮減叢集。您可以重新調整叢集來為尖峰工作負載新增執行個體並在尖峰工作負載需求趨於平緩時移除執行個體來控制成本。如需詳細資訊，請參閱[手動調整執行中 Amazon EMR 叢集的大小](emr-manage-resize.md)。

 Amazon EMR 也提供執行多個執行個體群組的選項，讓您可以在一個群組中使用隨需執行個體以保證處理能力，並在另一個群組中使用 Spot 執行個體讓作業完成速度更快並降低成本。您也可以結合不同的執行個體類型，以針對不同 Spot 執行個體類型使用更佳的定價。如需詳細資訊，請參閱[您應何時使用 Spot 執行個體？](emr-plan-instances-guidelines.md#emr-plan-spot-instances)。

此外，Amazon EMR 讓您可以靈活地將多個檔案系統用於輸入、輸出和中繼資料。例如，您可以選擇 Hadoop 分散式檔案系統 (HDFS)，其會在主要和核心節點上執行叢集來處理您無需儲存超過叢集生命週期的資料。您可以選擇 EMR 檔案系統 (EMRFS)，使用 Amazon S3 作為在叢集上執行的應用程式的資料層，以便可以分離運算和儲存，並在叢集生命週期之外保留資料。EMRFS 提供額外好處，可讓您單獨擴展或縮減來符合您的運算和儲存需求。您可以透過調整叢集來擴展運算需求，而您可以透過使用 Amazon S3 來擴展儲存需求。如需詳細資訊，請參閱[使用 Amazon EMR 處理儲存和檔案系統](emr-plan-file-systems.md)。

## 可靠性
<a name="emr-benefits-reliability"></a>

Amazon EMR 在叢集中會監控節點，並在故障時自動終止和更換執行個體。

Amazon EMR 提供組態選項，可控制是自動還是手動終止叢集。如果您將叢集設定為自動終止，叢集會在所有步驟完成後即終止。這稱為暫時性叢集。不過，您可以設定叢集，以在處理完成後繼續執行，因此您可以在不再需要該叢集時手動選擇將其終止。或者，您可以建立一個叢集，直接與已安裝的應用程式互動，然後在您不再需要它時手動終止叢集。這些範例中的叢集稱為*長時間執行的叢集*。

此外，您可以設定終止保護，以避免叢集中的執行個體因為處理時的錯誤或問題而終止。終止保護已啟用時，您可以在終止恢復來自執行個體的資料。這些選項的預設設定會因您是使用主控台、CLI 或 API 來啟動叢集而有所不同。如需詳細資訊，請參閱[使用終止保護來保護 Amazon EMR 叢集免於意外關閉](UsingEMR_TerminationProtection.md)。

## 安全
<a name="emr-benefits-security"></a>

Amazon EMR 利用其他 AWS 服務，例如 IAM 和 Amazon VPC，以及 Amazon EC2 金鑰對等功能，協助您保護叢集和資料。

### IAM
<a name="emr-benefits-iam"></a>

Amazon EMR 會與 IAM 整合以管理許可。您可使用附接至使用者或 IAM 群組的 IAM 政策來定義許可。您在政策定義的許可會決定那些使用者或群組成員可以執行的動作和他們可以存取的資源。如需詳細資訊，請參閱[Amazon EMR 如何搭配 IAM 運作](security_iam_service-with-iam.md)。

此外，Amazon EMR 會使用 Amazon EMR 服務本身的 IAM 角色，和執行個體的 EC2 執行個體設定檔。這些角色會授予服務和執行個體代表您存取其他 AWS 服務的許可。這是 Amazon EMR 服務的預設角色和 EC2 執行個體設定檔的預設角色。預設角色使用 AWS 受管政策，這些政策會在您第一次從主控台啟動 EMR 叢集並選擇預設許可時自動為您建立。您也可以透過 AWS CLI來建立預設的 IAM 角色。如果您想要管理許可，而不是 AWS，您可以選擇服務和執行個體描述檔的自訂角色。如需詳細資訊，請參閱[設定服務和資源的 Amazon EMR 許可的 IAM AWS 服務角色](emr-iam-roles.md)。

### Security groups (安全群組)
<a name="emr-benefits-security-groups"></a>

Amazon EMR 使用安全群組來控制對 EC2 執行個體的傳入和傳出流量。啟動叢集時，Amazon EMR 會使用主執行個體的安全群組和由核心/任務執行個體所共用的安全群組。Amazon EMR 設定安全群組規則，以確保在叢集中執行個體之間的通訊。或者，您可以設定其他安全群組，並將它們指派給您的主要和核心/任務執行個體和以進行更進階的規則。如需詳細資訊，請參閱[使用 Amazon EMR 叢集的安全群組控制網路流量](emr-security-groups.md)。

### 加密
<a name="emr-benefits-encryption"></a>

Amazon EMR 支援選用的 Amazon S3 伺服器端和用戶端加密搭配 EMRFS，有助於保護您儲存於 Amazon S3 的資料。使用伺服器端加密時，Amazon S3 會在上傳後加密資料。

使用用戶端加密，加密及解密程序會在您 EMR 叢集上的 EMRFS 用戶端進行。您可以使用 AWS Key Management Service (AWS KMS) 或您自己的金鑰管理系統來管理用戶端加密的根金鑰。

如需詳細資訊，請參閱[使用 EMRFS 屬性指定 Amazon S3 加密](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-emrfs-encryption.html)。

### Amazon VPC
<a name="emr-benefits-vpc"></a>

Amazon EMR 支援在 Amazon VPC 的虛擬私有雲端 (VPC) 中啟動叢集。VPC 是 中的隔離虛擬網路， AWS 可讓您控制網路組態和存取的進階層面。如需詳細資訊，請參閱[在 Amazon EMR 的 VPC 中設定聯網](emr-plan-vpc-subnet.md)。

### AWS CloudTrail
<a name="emr-benefits-cloudtrail"></a>

Amazon EMR 與 CloudTrail 整合，以記錄由 AWS 您的帳戶提出或代表您的帳戶提出之請求的相關資訊。您可以利用此資訊，追蹤哪些使用者正在存取您的叢集，以及進行請求所使用的 IP 地址。如需詳細資訊，請參閱[使用 記錄 AWS EMR API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。

### Amazon EC2 金鑰對
<a name="emr-benefits-key-pairs"></a>

您可以監控和與您的叢集互動，方法是在遠端電腦和主節點形成安全的連接。您可以使用 Secure Shell (SSH) 網路通訊協定來進行連接，或使用 Kerberos 進行身分驗證。如果您使用的是 SSH，則需要 Amazon EC2 金鑰對。如需詳細資訊，請參閱[針對 Amazon EMR 的 SSH 登入資料使用 EC2 金鑰對](emr-plan-access-ssh.md)。

## 監控
<a name="emr-benefits-monitoring"></a>

您可以使用 Amazon EMR 管理介面和日誌檔案來對叢集問題 (例如故障或錯誤) 進行疑難排解。Amazon EMR 可在 Amazon S3 中封存日誌檔案，因此您甚至可以在叢集終止後儲存日誌並對問題進行疑難排解。Amazon EMR 還在 Amazon EMR 主控台中提供可選的偵錯工具，以根據步驟、作業和任務瀏覽日誌檔案。如需詳細資訊，請參閱[設定 Amazon EMR 叢集記錄和偵錯](emr-plan-debugging.md)。

Amazon EMR 會與 CloudWatch 互動，以針對叢集和叢集內的作業，追蹤其效能指標。您可以根據各種指標設定警示，例如叢集是否閒置或所用儲存體的百分比。如需詳細資訊，請參閱[使用 CloudWatch 來監控 Amazon EMR 指標](UsingEMR_ViewingMetrics.md)。

## 管理介面
<a name="emr-what-tools"></a>

 您有多種方式可以與 Amazon EMR 互動：
+ **主控台** - 這是一個圖形使用者介面，可用於啟動和管理叢集。有了它，您填寫 Web 表單，以指定要啟動叢集的詳細資訊、檢視現有叢集的詳細資訊、偵錯和終止叢集。使用主控台是 Amazon EMR 入門的最簡單方式；不需任何程式設計知識。此主控台可在線上取得，網址為 [https://console.aws.amazon.com/elasticmapreduce/home](https://console.aws.amazon.com/elasticmapreduce/home)。
+ **AWS Command Line Interface (AWS CLI)** — 您在本機電腦上執行的用戶端應用程式，用於連線至 Amazon EMR 並建立和管理叢集。 AWS CLI 包含一組功能豐富的 Amazon EMR 專用命令。您可以使用它來撰寫指令碼，該指令碼會將啟動和管理叢集的程序自動化。如果您偏好使用命令列，使用 AWS CLI 是最佳選項。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [Amazon EMR](https://docs.aws.amazon.com/cli/latest/reference/emr/index.html)。
+ **軟體開發套件 (SDK)** - 軟體開發套件提供的函數可呼叫 Amazon EMR 來建立和管理叢集。您可以使用他們來撰寫應用程式，該應用程式會將建立和管理叢集的程序自動化。使用軟體開發套件是擴展或自訂 Amazon EMR 功能的最佳選項。目前在以下軟體開發套件中可使用 Amazon EMR：Go、Java、.NET (C\$1 和 VB.NET)、Node.js、PHP、Python 和 Ruby。如需關於這些軟體開發套件的詳細資訊，請參閱[適用於 AWS的工具](https://aws.amazon.com/tools/)和 [Amazon EMR 範本程式碼與程式庫](https://docs.aws.amazon.com/code-library/latest/ug/emr_code_examples.html)。
+ **Web 服務 API** - 低層級的介面，可用來使用 JSON 直接呼叫 Web 服務。使用 API 是建立呼叫 Amazon EMR 之自訂軟體開發套件的最佳選項。如需詳細資訊，請參閱 [Amazon EMR API 參考](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/Welcome.html)。

# Amazon EMR 架構和服務層
<a name="emr-overview-arch"></a>

Amazon EMR 服務架構包含多個層，這些層會分別將特定的功能提供給叢集。此章節概略說明各個層級和元件。

**Topics**
+ [儲存](#emr-arch-storage)
+ [叢集資源管理](#emr-arch-resource-management)
+ [資料處理框架](#emr-arch-processing-frameworks)
+ [應用程式與程式](#emr-arch-applications)

## 儲存
<a name="emr-arch-storage"></a>

儲存層包含與您叢集搭配使用的不同檔案系統。有多種不同類型的儲存選項，如下所示。

### Hadoop 分散式檔案系統 (HDFS)
<a name="emr-storage-hdfs"></a>

Hadoop 分散式檔案系統 (HDFS) 是一種適用於 Hadoop 的分散式、可擴展的檔案系統。HDFS 會分配在叢集中執行個體之間存放的資料，以便將多個資料的複本存放在不同的執行個體，以確保個別執行個體故障時資料不會遺失。HDFS 是暫時性儲存，其會在您終止叢集時遭到回收。HDFS 可用於在 MapReduce 處理期間快取中繼結果或用於有明顯隨機 I/O 的工作負載。

如需詳細資訊，請參閱本指南中的 [Amazon EMR 中的執行個體儲存選項和行為](emr-plan-storage.md) 或前往 Apache Hadoop 網站上的 [HDFS 使用者指南](http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html)。

### EMR 檔案系統 (EMRFS)
<a name="emr-storage-emrfs"></a>

使用 EMR 檔案系統 (EMRFS)，Amazon EMR 會擴展 Hadoop，讓您能夠直接存取 Amazon S3 中儲存的資料，就如同它是 HDFS 之類的檔案系統一樣。可以將 HDFS 或 Amazon S3 用作叢集中的檔案系統。大多數情況下，會使用 Amazon S3 來儲存輸入和輸出資料，且中繼結果會儲存在 HDFS 中。

### 本機檔案系統
<a name="emr-storage-lfs"></a>

本機檔案系統是指與本機連接的磁碟。當您建立 Hadoop 叢集時，每個節點都是從 Amazon EC2 執行個體建立的，該執行個體隨附有一個預先附接的磁碟儲存體的預先設定區塊，稱為執行個體儲存體。執行個體儲存體磁碟區上的資料只會在其 Amazon EC2 執行個體的生命週期內保留。

## 叢集資源管理
<a name="emr-arch-resource-management"></a>

資源管理層負責管理叢集資源，並排定處理資料任務的時程。

在預設情況下，Amazon EMR 使用 YARN (Yet Another Resource Negotiator)，這是在 Apache Hadoop 2.0 中引入的一種元件，能夠集中管理多個資料處理架構的叢集資源。不過，Amazon EMR 中提供的其他架構和應用程式不會使用 YARN 做為資源管理工具。Amazon EMR 在管理 YARN 元件的每個節點上也有代理程式，可讓叢集正常運作，並與 Amazon EMR 通訊。

由於 Spot 執行個體通常用於執行作業節點，因此 Amazon EMR 具有排程 YARN 作業的預設功能，因此當 Spot 執行個體上執行的作業節點終止時，執行作業不會失敗。Amazon EMR 透過允許應用程式主程序僅在核心節點上執行來達到此目的。應用程式主程序會控制執行中的作業，而且需要在作業生命週期內保持活動狀態。

Amazon EMR 5.19.0 版及更新版本使用內建 [YARN 節點標籤](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeLabel.html)功能來實現此目的。(較早版本使用代碼修補程式)。預設會設定 `yarn-site` 和 `capacity-scheduler` 組態分類中的屬性，以便 YARN capacity-scheduler 和 fair-scheduler 利用節點標籤。Amazon EMR 會自動為核心節點加上 `CORE` 標籤，並設定屬性，以便只在具有 CORE 標籤的節點上排程應用程式主節點。手動修改 yarn-site 和 capacity-scheduler 組態分類中的相關屬性，或直接修改關聯的 XML 檔案中的相關屬性，可能會破壞此功能或修改此功能。

## 資料處理框架
<a name="emr-arch-processing-frameworks"></a>

資料處理架構層是用於處理和分析資料的引擎。有許多架構可在 YARN 上執行或者有自己的資源管理。不同架構適用於不同類型的處理需求 (例如批次、互動式、記憶體內、串流等等)。您選擇的架構取決於您的使用案例。這會影響應用程式層提供使用的語言和界面，應用程式層與您想處理的資料互動。適用於 Amazon EMR 的主要處理框架是 Hadoop MapReduce 和 Spark。

### Hadoop MapReduce
<a name="emr-processing-framework-mapreduce"></a>

Hadoop MapReduce 是一種開放原始碼的分散式運算程式設計模型。它可簡化撰寫平行分散式應用程式的程序，方法是處理所有邏輯，同時提供 Map 和 Reduce 函數。Map 函數會將資料映射為名為中繼結果的金鑰值對集。Reduce 函數會結合中繼結果、套用額外的演算法，並產生最終輸出。適用於 MapReduce 的架構有很多 (如 Hive)，其會自動產生 Map 和 Reduce 程式。

如需詳細資訊，請參閱 Apache Hadoop Wiki 網站上的 [Map 和 Reduce 操作實際上的執行方式](http://wiki.apache.org/hadoop2/HadoopMapReduce)。

### Apache Spark
<a name="emr-processing-framework-spark"></a>

Spark 是一個叢集架構和程式設計模型，可處理大數據工作負載。與 Hadoop MapReduce 類似，Spark 是一種開放原始碼、分散式處理系統，但使用有向無環圖來執行資料集的計畫和記憶體內快取。在 Amazon EMR 上執行 Spark 時，可以使用 EMRFS 來直接存取 Amazon S3 中的資料。Spark 支援多種互動式查詢模組 (例如 SparkSQL)。

如需詳細資訊，請參閱 [Amazon EMR 版本指南](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark.html)中的 *Amazon EMR 叢集上的 Apache Spark*。

## 應用程式與程式
<a name="emr-arch-applications"></a>

Amazon EMR 支援許多應用程式 (例如 Hive、Pig 和 Spark Streaming 程式庫)，以提供使用更高層級語言之類的功能，來建立處理工作負載、運用機器學習演算法，製作串流處理應用程式和建置資料倉儲。此外，Amazon EMR 還支援開放原始碼專案，該專案有他們自己的叢集管理功能 (而不使用 YARN)。

您可以使用各種程式庫和語言來與在 Amazon EMR 中執行的應用程式互動。例如，您可以使用、Hive 或 Pig 搭配 MapReduce，或使用 Spark Streaming、Spark SQL、MLlib 和 GraphX 搭配 Spark。

如需詳細資訊，請參閱 [Amazon EMR 版本指南](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/)。