# AWS - EMR
# AWS 分散式平行運算
再處理平行與分散式運算很難去管理,其管理複雜度起因於多個節點的組合成的 Cluster 且 Cluster 管理軟體是協調 leader node 與 compute node 之間的活動。
與其他複雜運算的服務相同,AWS 簡化了部署管理以及維運分然是運算環境都過自動創建設定與管理底層的基礎間受,EMR 是全代管分散式運算的解決方案。EMR 核心組件是 Cluster,Cluster 包含三個不同的 EC2 Node Type。每個 node type 都有在 Cluster 的 Role,有不同的軟體 Component 安裝在不同 node。
- Primary Nodes 管理 Cluster 分派資料與任務到其他節點,追蹤其他節點與狀態與健康狀況
- Core Nodes 處理任務與儲存資料在 Hadoop Distributed File System (HDFS)
- Task Nodes Optional Task node 執行一些軟體組件用來處理任務但不儲存資料,EC2 Spot Instance 通常就是用來做 Task Node
# EMR 架構
EMR 架構包含四大組件
- Storage
- Cluster Resource Management
- Data Processing Frameworks
- Application and Program
每個組件都提供特定的能力與功能給與 Cluster
# EMR Storage
EMR Storage 包含三種不同的 File System
# Hadoop Distributed File System(HDFS)
HDFS 是分散式可擴展的 Hadoop 檔案系統,Hadoop 是個開源框架用來有效的儲存與處理大量資料,HDFS 分散在多個 Node 儲存多個副本確保資料不遺失,HDFS 是個暫時儲存他會被回收當 Cluster 關閉
# EMR File System(EMRFS)
EMRFS 是 EMR 繼承 Hadoop 能力且直接儲存在 S3 他可以讓 HDFS 與 S3 都能用在 Cluster 中,最常見是 S3 儲存輸入輸出資料且中間結果儲存在 HDFS
# Local File System
參考 local 與 Cluster Node 連結的儲存裝置,當 Cluster 建立每個 Node 都被 EC2 創立且預先配置與附加磁碟空間,我們稱作 Instance Store
資料在 EC2 instance Store 空間只會在 EC2 生命週期中持久化,因此有任何資料儲存在 Instance Volume 會被遺失當機器關閉
# EMR Cluster Resource Management
EMR Resource Management Layer 負責管理 Cluster 資源且安排處理資料工作到節點上
預設 EMR 用 Yet Another Resource Negotiator (YARN),是個 Hadoop 組件集中管理 Cluster 資源在多資料處理框架中,
# EMR data processing frameworks
Data Processing Framework layer 是個引擎用來處理與分析資料,很多可用的框架跑在 YARN 擁有自己的資源管理。不同的框架可用在不同種處理任務的需要,像是批次處理,交互處理,記憶體處理以及串流處理,資料分析案例將會決定如何選擇框架。框架的選擇將會影響與與言與介面的可用性。主要可用的處理框架有 EMR 與 Apache Hadoop MapReduce 與 Apache Spark
# EMR 應用程式與程式
EMR 支援許多應用程式像是 Hive,Pig,Spark Streaming Library 提供資料分析能力像是用高階語言建立進程工作負載,提供機器學習演算法,串流資料,資料倉儲等。這些應用程式提供大量的函式庫與語言去交互跑在 EMR 的應用程式
| MapReduce Application language | Spark Application Langugage |
|---|---|
| Java | Spark Streaming |
| Hive | Spark SQL |
| Pig | MLlib |
| Python | GraphX |
# EMR Serverless
EC2 的數量與品質用在 Primary/Task/Core 節點在 EMR Cluster 中,正確的選擇規格給與這些資料可能是有挑戰性的,選擇錯誤的規則可能倒置超出或是不夠用的資源情況。EMR Serverless 部署方案可以用在解決這些問題透過提供根據需要的 Cluster 資源
# EMR Serveless 架構
EMR Serverless 適合給想要精簡部署與進行資料分析的使用者,EMR Serverless 提供簡單的工作啟用,自動容量管理與直觀的成本控制。EMR Serverless 幫助避免過多過少的預開啟資源自動偵測資源是否符合分析需要,部署這些資源去處理這些任務,或是釋放這些資源當工作完成的時候。EMR Serverless 提供很多好處,開源兼容性,並發處理與優化執行成本與效能
# EMR Serverless 應用程式
有了 EMR Serverless 一到都個 EMR Serverless 應用程式需要用開源分析框架去建立應用程式下列屬性必須被指定
- EMR 發行版給與開源框架使用
- 特別的 Runtime 讓應用程式使用 像是 Apache Spark
# 批次應用程式執行
一個工作請求被提交到 EMR Serverless Application ,應用程式會非同步的開始且追蹤他直到完成,EMR Serverless Application 當收到任務就立即執行
內部 EMR Serverless Application 使用 Worker 去執行被提交的工作,預設的 Worker 大小是基於應用程式類型與 EMR 發行版
下列圖表示當一個工作被提交到 EMR 都發生了什麼

# 交互應用程式執行
EMR Studio 用來管理 EMR Serverless Application,選擇 Create and Launch EMR Studio 將會建立 EMR Studio 在當前 AWS Region 當建立好就可以開始建立 EMR Serverless Application
# 消化,轉換與儲存資料在 EMR
# 消化資料
EMR 可以用很多種方式接收資料比如說各種資料庫,消化後資料可以用在各種 EMR Cluster 上面的資料分析工具像是 Spark

# 轉換資料
當大量資料注入到 EMR Cluster,EMR Cluster 可以進行資料轉換有很多的程式框架可以跑在 EMR 上面主要有三個 Layer
- Language Layer 提供使用者交互機制,提供交互模式與批次模式或是透過自動化工具輸入指令
- Interpreter 轉換指令成為低階程式好讓 Engine 執行
- Processing Engine 執行程式支援轉換活動像是運算讀取寫入與排序,這些活動是必須相對應使用者發出的 Command
這邊有三個 EMR 可用的主流的程式框架可以用來轉換資料
- Apache Spark
- Apache Hive
- Apache Pig