Amazon EMR 常見問答集
一般問題
問:什麼是 Amazon EMR?
Amazon EMR 是領先業界的雲端大數據平台,用於使用開放原始碼架構 (如 Apache Spark、Apache Hive 和 Presto) 來進行資料處理、互動式分析和機器學習。使用 EMR 時,您可以執行 PB 規模等級的分析,不僅成本不到傳統內部部署解決方案的一半,速度也比標準 Apache Spark 快 1.7 倍以上。
問:為什麼應該使用 Amazon EMR?
Amazon EMR 讓您專注於轉換和分析資料,不必擔心管理運算容量或開放原始碼應用程式,並為您節省成本。使用 EMR 時,您可以立即在 Amazon EC2 上佈建任意大小的容量,並設定擴展規則來管理不斷變化的運算需求。您可以設定 CloudWatch 提醒,在基礎設施變更時通知您並立即採取行動。如果您使用 Kubernetes,您也可以使用 EMR 將工作負載提交至 Amazon EKS 叢集。不論使用 EC2 或 EKS,您都可以從 EMR 的最佳化執行時間獲益,進而提升分析速度並節省時間和金錢。
問:如何部署與管理 Amazon EMR?
您可以使用 Amazon EC2、Amazon Elastic Kubernetes Service (EKS) 或內部部署 AWS Outposts,將工作負載部署到 EMR。您可以使用 EMR 主控台、API、SDK 或 CLI 執行並管理工作負載,並使用 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 或 AWS Step Functions 協調它們。若要獲得互動體驗,您可以使用 EMR Studio 或 SageMaker Studio。
問:如何開始使用 Amazon EMR?
問:Amazon EMR 的可靠性如何?
請參閱我們的 服務水準協議。開發與偵錯
問:哪裡可以找到程式碼範例?
有關範本程式碼,請參閱這些文章和教學。如果使用 EMR Studio,您可以使用一組筆記本範例探索功能。
問:如何開發資料處理應用程式?
您可以在 Amazon EMR Studio 中,開發、視覺化和偵錯以 R、Python、Scala 和 PySpark 編寫的資料科學和資料工程應用程式。您還可以在桌面上開發資料處理任務,例如使用 Eclipse、Spyder、PyCharm 或 RStudio,然後在 Amazon EMR 上運行。此外,您可以在啟動新叢集時,在軟體設定中選擇 JupyterHub 或 Zeppelin,並使用一個或多個執行個體在 Amazon EMR 上開發應用程式。
問:相較於 AWS 管理主控台,使用命令列工具或 API 有什麼優勢?
命令列工具或 API 能夠讓您以程式設計方式啟動和監控叢集的執行進度、建立與叢集相關的其他自訂功能 (例如,多個處理步驟、排程、工作流程或監控的順序),或為其他 Amazon EMR 客戶建置加值型工具或應用程式。相比之下,AWS 管理主控台提供易用的圖形界面,可以直接從 Web 瀏覽器啟動和監控叢集。
問:是否可在執行中的叢集新增步驟?
是。您在工作執行之後可以透過 AddJobFlowSteps API 選擇性地新增更多步驟。AddJobFlowSteps API 會在目前步驟序列結尾加入新的步驟。您可以使用此 API 在叢集中執行條件邏輯或進行偵錯。
問:當叢集完成時,是否可收到通知?
您可以註冊 Amazon SNS,當叢集完成時就會貼文到您的 SNS 主題。您也可以在 AWS 管理主控台上查看叢集進度,或者使用命令列、軟體開發套件或 API 以取得叢集狀態。
問:完成步驟後,是否可以終止叢集?
是。完成所有步驟後,您可以透過開啟自動終止標誌來自動終止叢集。
問:Amazon EMR 支援哪些作業系統版本?
Amazon EMR 5.30.0 版及更新版本,以及 Amazon EMR 6.x 系列基於 Amazon Linux 2。您也可以指定根據 Amazon Linux 2 建立的自訂 AMI。這可讓您為幾乎所有應用程式執行精密的預先組態。如需詳細資訊,請參閱使用自訂 AMI。
問:Amazon EMR 是否支援第三方軟體套件?
是。 您可以使用引導操作,在叢集中安裝第三方軟體套件。您也可以使用 Hadoop 分散式快取機制上傳靜態編譯的可執行檔。EMR 6.x 支援 Hadoop 3,可讓 YARN NodeManager 直接在 EMR 叢集主機或 Docker 容器內部啟動容器。若要進一步了解,請參閱我們的文件。
問:我可以使用哪些工具來偵錯?
您可以使用多種工具來收集有關叢集的資訊,以協助確定問題所在。如果使用 Amazon EMR Studio,您可以啟動 Spark UI 和 YARN Timeline Service 之類的工具來簡化偵錯。您可以從 Amazon EMR 主控台取消叢集對 Apache Spark、Tez UI 和 YARN Timeline Server 持久性應用程式使用者介面,若干叢集內應用程式使用者介面,以及所有 YARN 應用程式在 Amazon EMR 主控台中的應用程式歷史記錄摘要檢視的存取權。您也可以連接至使用 SSH 的主節點,以及透過 Web 介面檢視叢集執行個體。如需詳細資訊,請參閱我們的文件。
EMR Studio
問:什麼是 EMR Studio?
EMR Studio 是一種整合式開發環境 (IDE),可讓資料科學家和資料工程師開發、視覺化和偵錯以 R、Python、Scala 和 PySpark 編寫的資料工程和資料科學應用程式。
這是一個全受管應用程式,具有單一登入、全受管 Jupyter 筆記本、自動化基礎架構佈建,以及無需登入 AWS Console 或叢集即可對任務偵錯的功能。資料科學家和分析師可安裝自訂內核和程式庫,使用 GitHub 和 BitBucket 等程式碼儲存庫與對等進行協作,或者使用協同運作服務 (如 Apache Airflow、AWS Step Functions 以及 Amazon Managed Workflows for Apache Airflow) 執行參數化筆記本,作為排程工作流程的一部分。 您可以閱讀使用 Amazon MWAA 在 Amazon EMR 筆記本上協調分析任務,以了解更多資訊。EMR Studio 核心和應用程式在 EMR 叢集上執行,因此您可以使用針對 Apache Spark 進行效能最佳化的 Amazon EMR runtime for Apache Spark,取得分散式資料處理的優勢。管理員可為分析師設定 EMR Studio,以便在現有 EMR 叢集上執行其應用程式,或者使用針對 EMR 預先定義的 AWS CloudFormation 範本建立新的叢集。
問:EMR Studio 可以用來做什麼?
藉助 EMR Studio,您無需登入 AWS Console,即可使用公司登入資料直接登入全受管 Jupyter 筆記本,在幾秒鐘內啟動筆記本,開始使用範例筆記本,並執行資料探索。您還可以透過從筆記本載入自訂核心和 Python 程式庫來自訂環境。EMR Studio 核心和應用程式在 EMR 叢集上執行,因此您可以使用針對 Apache Spark 進行效能最佳化的 Amazon EMR runtime for Apache Spark,取得分散式資料處理的優勢。您可以透過 GitHub 和其他儲存庫共享筆記本,從而與同事協作。您也可以將筆記本作為持續整合和持續部署管道直接執行。您可以將不同的參數值傳遞至筆記本。您也可以使用 Apache Airflow 等工作流程協同運作服務,連結筆記本並將筆記本整合到排定的工作流程中。此外,您可以使用 Spark UI 和 YARN Timeline Service 等原生應用程式介面,按幾下滑鼠來偵錯叢集和任務。
問︰EMR Studio 與 EMR Notebooks 有何區別?
共有五個主要區別。
- EMR Studio 無須存取 AWS 管理主控台。EMR Studio 在 AWS 管理主控台之外託管。如果您不向資料科學家或資料工程師提供 AWS 管理主控台存取權,這會很有用。
- 您可以使用 AWS IAM Identity Center (AWS SSO 的後繼者),透過身分供應商提供的企業登入資料來登入 EMR Studio。
- EMR Studio 為您帶來筆記本優先體驗。EMR Studio 核心和應用程式在 EMR 叢集上執行,因此您可以使用針對 Apache Spark 進行效能最佳化的 Amazon EMR runtime for Apache Spark,取得分散式資料處理的優勢。在叢集上執行程式碼就像將筆記本連接到現有叢集或佈建新叢集一樣簡單。
- EMR Studio 有著簡潔的使用者介面和抽象化的硬體設定。例如,您可以設定一次叢集範本並使用範本執行新叢集。
- EMR Studio 帶來簡化的偵錯體驗,您只需按幾下滑鼠即可在單一位置存取原生應用程式使用者介面。
問︰EMR Studio 與 SageMaker Studio 有何區別?
您可以將 EMR Studio 和 SageMaker Studio 與 Amazon EMR 一起使用。EMR Studio 提供一種整合式開發環境 (IDE),可讓您開發、視覺化和偵錯以 R、Python、Scala 和 PySpark 編寫的資料工程和資料科學應用程式。Amazon SageMaker Studio 提供單一的 Web 視覺化界面,您可以在其中執行所有機器學習開發步驟。SageMaker Studio 讓您可以完全存取、控制和洞察在建立、訓練和部署模型時需要執行的每個步驟。您可以快速上傳資料,建立新的筆記本,訓練和調整模型,在步驟之間來回移動以調整實驗,比較結果,以及將模型部署至一處,讓您的工作更有效率。
問:如何開始使用 EMR Studio?
您的管理員必須先設定 EMR Studio。當您從管理員那裡收到 Amazon EMR Studio 的唯一登入 URL 時,可以使用公司登入資料直接登入 Studio。
問:我需要登入 AWS 管理主控台以使用 EMR Studio 嗎?
不需要。在您的管理員設定 EMR Studio 並提供 Studio 的存取 URL 後,團隊可以使用公司登入資料來登入。不須登入 AWS 管理主控台。團隊可以在 EMR Studio 裡執行任務並存取由您的管理員設定的資源。
問:EMR Studio 中的單一登入體驗支援哪些身分供應商?
AWS IAM Identity Center (AWS SSO 的後繼者) 是 EMR Studio 的單一登入服務供應商。AWS IAM 支援的身分供應商清單可在我們的文件中找到。
問︰什麼是 EMR Studio Workspace?
Workspace 可幫您組織 Jupyter 筆記本。Workspace 中的所有筆記本都儲存在相同的 Amazon S3 位置,並在相同的叢集上執行。您也可以將程式碼儲存庫 (例如 GitHub 儲存庫) 連結到 Workspace 中的所有筆記本。您可以在將 WorkSpace 連接到叢集之前,建立 WorkSpace 並對其進行設定,不過您應該在執行筆記本之前,連接到叢集。
問︰我可以在 EMR Studio 裡,建立 Workspace 或開啟沒有叢集的 Workspace 嗎?
可以,您不須將其連接到叢集,就能建立或開啟 Workspace。只有在您需要執行時,才應該將其連接到叢集。EMR Studio 內核和應用程式在 EMR 叢集上執行,因此您可以使用針對 Apache Spark 進行效能最佳化的 Amazon EMR runtime for Apache Spark,取得分散式資料處理的優勢。
問:我可以安裝自訂程式庫,以在筆記本程式碼中使用嗎?
所有 Spark 查詢均在您的 EMR 叢集上執行,因此,您需要安裝 Spark 應用程式在叢集上使用的所有執行時間程式庫。您可以在筆記本儲存格內輕易地安裝筆記本範圍的程式庫。您還可以在筆記本儲存格內或使用 SSH 連接到叢集主節點時,在叢集主節點內安裝 Jupyter 筆記本核心和 Python 程式庫。如需詳細資訊,請參閱文件。此外,您可以使用引導操作或自訂 AMI 來在建立叢集時安裝所需的程式庫。如需詳細資訊,請參閱 Amazon EMR Management Guide 中的建立引導操作來安裝其他軟體和使用自訂 AMI。
問:筆記本的儲存位置為何?
Workspace 連同 Workspace 中的筆記本檔案會以 ipynb 檔案格式定期儲存至您在建立 Workspace 時指定的 Amazon S3 位置。筆記本檔案的名稱與 Amzon EMR Studio 中的筆記本相同。
問:我如何對筆記本使用版本控制? 我可以使用 GitHub 之類的儲存庫嗎?
您可以將 Git 架構的儲存庫與 Amazon EMR Studio 筆記本相關聯,以將筆記本儲存在版本控制的環境中。
問:在 EMR Studio 中,我可以在哪些運算資源上執行筆記本?
使用 EMR Studio,您可以對在 Amazon Elastic Compute Cloud (Amazon EC2) 上執行的 Amazon EMR 或 Amazon Elastic Kubernetes Service (Amazon EKS) 上的 Amazon EMR 執行筆記本程式碼。您可以將筆記本連接至現有叢集或新叢集。您可以用兩種方式在 EMR Studio 中建立 EMR 叢集:透過 AWS Service Catalog 使用預先設定的叢集範本建立叢集,透過指定叢集名稱、執行個體數量和執行個體類型來建立叢集。
問:我可以在 EMR Studio 中重新連接具有不同運算資源的 Workspace 嗎?
可以,您可以打開 WorkSpace,選擇左邊的 EMR 叢集圖示,按下中斷連結按鈕,接著從選取叢集下拉式選單中選取叢集,然後按下連結按鈕。
問:我能在 EMR Studio 中的何處找到所有的 WorkSpace?
在 EMR Studio 中,可以選擇左邊的 Workspace 標籤,並檢視由您和其他使用者在同一個 AWS 帳戶裡建立的所有 WorkSpace。
問:使用 EMR Studio 需要哪些 IAM 政策?
每個 EMR Studio 都需要許可來和其他 AWS 服務相互操作。若要授予 EMR Studios 必要的許可,您的管理員需要使用提供的政策來建立 EMR Studio 服務角色。他們還需要為 EMR Studio 指定定義 Studio 級許可的使用者角色。他們將 AWS IAM Identity Center (AWS SSO 的後繼者) 的使用者與群組新增至 EMR Studio 時,可以將工作階段政策指派給使用者或群組,以套用精細的許可控制。工作階段政策可協助管理員定義使用者許可,無需建立多個 IAM 角色。如需有關工作階段政策的詳細資訊,請參閱 AWS Identity and Access Management 使用者指南中的政策和許可。
問:我在 EMR Studio 中將我的 WorkSpace 連結至 EMR 叢集,是否有任何限制?
是。當前不支援高可用性 (Multi-Master) 叢集,Kerberized 叢集和 AWS Lake Formation 叢集。
問:使用 Amazon EMR Studio 的費用是多少?
提供 Amazon EMR Studio 不另外收費。當您使用 EMR Studio 時,適用 Amazon Simple Storage Service 儲存以及 Amazon EMR 叢集費用。如需定價選項與細節的詳細資訊,請參閱 Amazon EMR 定價。
EMR Notebooks
問:什麼是 EMR Notebooks?
我們建議新客戶使用 Amazon EMR Studio,而非 EMR Notebooks。EMR Notebooks 根據 Jupyter 筆記本提供受管的環境,允許資料科學家、分析師及開發人員使用 EMR 叢集準備和視覺化資料、與同儕協作、建置應用程式以及執行互動分析。儘管我們建議新客戶使用 EMR Studio,但 EMR Notebooks 也支援相容性。
問:EMR Notebooks 可以用來做什麼?
您可以使用 EMR Notebooks 在 EMR 叢集上毫不費力地建置 Apache Spark 應用程式和執行互動查詢。多個使用者可直接從主控台建立無伺服器筆記本,將其連接至現有的共用 EMR 叢集,或直接從主控台佈建一個叢集並立即開始試用 Spark。您可以分離筆記本,然後將其重新連接至新叢集。筆記本會自動儲存到 S3 儲存貯體,您可以從主控台擷取儲存的筆記本以繼續工作。EMR Notebooks 預先封裝了 Anaconda 儲存庫中的程式庫,允許您在筆記本程式碼中匯入與使用程式庫,並將其用於操作資料和視覺化結果。此外,EMR Notebooks 內建 Spark 監控功能,可方便您監控 Spark 任務的進度,和進行筆記本程式碼的偵錯。
問:如何開始使用 EMR Notebooks?
若要開始使用 EMR Notebooks,請打開 EMR 主控台,並在導覽窗格中,選擇筆記本。從那裡,只要選擇建立筆記本,輸入筆記本名稱,選擇 EMR 叢集或立即建立新叢集,提供服務角色給筆記本使用,接著選擇用來儲存筆記本檔案的 S3 儲存貯體,然後按一下建立筆記本。筆記本顯示就緒狀態後,選擇開啟以啟動筆記本編輯器。
問:EMR Notebooks 支援哪些 EMR 發行版本?
EMR Notebooks 可連接至執行 EMR 5.18.0 或更新版本的 EMR 叢集。
問:使用 EMR Notebooks 的費用是多少?
提供 EMR Notebooks 不另外收費。您將需要針對帳戶中連接的 EMR 叢集付費。您可以透過瀏覽 https://aws.amazon.com/emr/pricing/ 來找到更多有關您叢集定價的資訊
管理資料
問:如何將我的資料傳入 Amazon S3?
Amazon EMR 提供幾種將資料放進叢集的方法。最常見的方法是將資料上傳到 Amazon S3,並使用 Amazon EMR 的內建功能將資料載入叢集。您可以使用 Hadoop 的分散式快取功能,將檔案從分散式檔案系統傳輸到本機檔案系統。如需更多詳細資訊,請參閱文件。或者,如果您要將資料從內部部屬遷移到雲端,則可以使用 AWS 的其中一項雲端資料遷移服務。
問:如何取得已終止叢集的日誌?
Hadoop 系統日誌及使用者日誌存放在您建立叢集時指定的 Amazon S3 儲存貯體中。持久性應用程式 UI 在叢集外執行,Spark History Server、Tez UI 和 YARN Timeline Server 日誌在應用程式終止的 30 天後可以使用。
問:是否會壓縮日誌?
不會。目前,Amazon EMR 不會在將日誌遷移到 Amazon S3 時壓縮日誌。
問:是否可從網際網路或 Amazon S3 以外的其他位置載入資料?
是。最後,您可以使用 AWS Direct Connect 建立到 AWS 的私有專用網路連線。如果您有大量的資料,可以使用 AWS Import/Export。如需詳細資訊,請參閱我們的文件。
計費
問:Amazon EMR 是否能預估需要多長的時間來處理我的輸入資料?
不能,因為每個叢集和輸入資料不同,我們無法預估您的工作持續時間。
問:Amazon EMR 的費用是多少?
Amazon EMR 定價不但簡單而且可預測:您只需依所用的秒數支付每秒費率,但需支付一分鐘最低費用。您可以使用 AWS 定價計算器估算帳單。其他 Amazon Web Services 的使用 (包含 EC2) 與 Amazon EMR 分開計費。
問:Amazon EMR 叢集的帳單週期如何計算?
當叢集準備好執行步驟時,Amazon EMR 開始計費。當您要求關閉叢集時,Amazon EMR 停止計費。如需 Amazon EC2 何時開始計費與何時停止計費的詳細資訊,請參閱 Amazon EC2 計費常見問答集。
問:可以在哪裡追蹤我的 Amazon EMR、Amazon EC2 和 Amazon S3 使用情況?
您可以在帳單和成本管理主控台追蹤您的使用情況。
問:如何計算顯示在主控台的標準化執行個體小時數?
在 AWS 管理主控台上,每個叢集都有一個 Normalized Instance Hours (標準化執行個體小時數) 欄位,顯示叢集已使用的大約運算小時數,調整到最接近的小時數。
標準化執行個體小時數是根據 1 小時 m1.small 用量 = 1 小時標準化運算時間的標準,計算得出的運算時間小時數。您可以檢視文件,查看執行個體系列中不同大小的清單,以及每小時對應的標準化因子。
例如,您已執行一小時的 10 節點 r3.8xlarge 叢集,則在主控台顯示的標準化執行個體總時數將為 640 (10 (節點數目) x 64 (標準化因子) x 1 (叢集已經執行的小時數) = 640)。
這是大約的數字,不應用於帳單計算。請參閱帳單和成本管理主控台,了解應計費的 Amazon EMR 用量。
問:Amazon EMR 是否支援 Amazon EC2 隨需執行個體、Spot 執行個體和預留執行個體?
是。Amazon EMR 可無縫支援隨需執行個體、競價型執行個體和預留執行個體。按一下這裡進一步了解有關 Amazon EC2 預留執行個體的資訊。按一下這裡進一步了解有關 Amazon EC2 Spot 執行個體的資訊。按一下這裡進一步了解有關 Amazon EC2 容量保留的資訊。
問:價格含稅嗎?
除非另有說明,否則我們的價格不包括適用的稅金和稅收 (包括加值稅和適用的營業稅)。帳單地址在日本的客戶若使用 AWS 服務,則需負擔日本消費稅。進一步了解。
安全和資料存取控制
問:如何防止其他使用者在叢集執行期間檢視我的資料?
Amazon EMR 會在兩個 Amazon EC2 安全群組中啟動您的執行個體,一個用於主執行個體,另一個用於其他叢集節點。主安全群組有一個用於與服務通訊的開放連接埠。另外也開放 SSH 連接埠,允許您使用啟動時指定的金鑰 SSH 到執行個體中。其他節點在單獨的安全群組中啟動,僅允許與主執行個體互動。預設情況下,兩個安全群組都設定為不允許從外部來源存取,包括屬於其他客戶的 Amazon EC2 執行個體。由於這些是您帳戶內的安全群組,所以可以使用標準 EC2 工具或儀表板重新設定。按一下這裡進一步了解 EC2 安全群組。此外,如果規則允許公開存取未新增例外清單的任何連接埠,您則可以在每個區域中設定 Amazon EMR 封鎖公開存取,以避免建立叢集。
問:我的資料安全性如何?
Amazon S3 提供身份驗證機制,可確保存放的資料安全無虞,未經授權無法存取這些資料。除非上傳資料的客戶另行指定,否則只有該客戶能存取資料。Amazon EMR 客戶還可以選擇使用 HTTPS 通訊協定將資料傳送到 Amazon S3,確保安全的傳輸。此外,Amazon EMR 一律使用 HTTPS 在 Amazon S3 與 Amazon EC2 之間傳送資料。為提高安全性,客戶可以在將輸入資料上傳到 Amazon S3 之前先加密資料 (使用任何常見的資料加密工具);然後,當 Amazon EMR 從 Amazon S3 擷取資料時,需要在叢集一開始新增解密步驟。
問:是否能取得我的帳戶上所有 EMR API 呼叫的歷史記錄,以用於安全或合規稽核?
是。AWS CloudTrail 是一項 Web 服務,用於記錄您帳戶的 AWS API 呼叫並為您提供日誌檔案。CloudTrail 產生的 AWS API 呼叫歷史記錄可用於安全分析、資源變更追蹤以及合規稽核。在 AWS CloudTrail 詳細資訊頁面進一步了解有關 CloudTrail 的資訊,並透過 CloudTrail 的 AWS 管理主控台開啟此功能。
問:我如何控制 EMR 使用者可以在 Amazon S3 中存取的內容?
依預設,Amazon EMR 應用程式在叫用其他 AWS 服務時,使用 EC2 執行個體設定檔。針對多租戶叢集,Amazon EMR 提供三個選項來管理使用者對 Amazon S3 資料的存取。
- 與 AWS Lake Formation 整合可讓您在 AWS Lake Formation 中定義和管理微調的授權政策,以便在 AWS Glue Data Catalog 中存取資料庫、資料表和資料欄。您可以對透過 Amazon EMR Notebooks 和 Apache Zeppelin 提交的針對互動式 EMR Spark 工作負載的任務強制執行授權政策,並傳送稽核事件至 AWS CloudTrail。透過啟用整合,您還可以從與安全聲明標記語言 (SAML) 2.0 相容的企業身份系統啟用聯合單一登入 EMR Notebooks 或 Apache Zeppelin。
- 與 Apache Ranger 原生整合可讓您設定新的或現有的 Apache Ranger 伺服器,以定義或管理微調的授權政策,供使用者透過 Hive Metastore 存取 Amazon S3 資料的資料庫、資料表和資料欄。Apache Ranger 是一種開放原始碼工具,可跨 Hadoop 平台啟用、監控和管理全方位資料安全性。
這個原生整合可讓您在 Apache Ranger Policy Admin 伺服器上定義三種授權政策類型。您可以為 Hive 設定表格級、欄層級和資料列層級授權,為 Spark 設定表格級和欄層級授權,為 Amazon S3 設定字首層級和物件層級授權。Amazon EMR 會自動在叢集上安裝和設定相應的 Apache Ranger 外掛程式。這些 Ranger 外掛程式與 Policy Admin 伺服器同步,以進行授權政策,強制執行資料存取控制,以及傳送事件至 Amazon CloudWatch Logs。
- Amazon EMR User Role Mapper 可讓您利用 AWS IAM 權限,管理 AWS 資源的存取。您可以在使用者 (或群者) 和自訂 IAM 角色之間建立映射。使用者或群組只能存取自訂 IAM 角色許可的資料。這個功能目前可透過 AWS 實驗室使用。
區域與可用區域
問:Amazon EMR 如何利用可用區域?
Amazon EMR 可啟動相同 Amazon EC2 可用區域中指定叢集的所有節點。在相同區域中執行叢集可提升任務流程的效能。預設情況下,Amazon EMR 會選擇擁有最多可用資源的可用區域來執行叢集。不過,您可以視需要指定其他可用區域。您也可以選擇為最低價的隨需執行個體、最佳 Spot 容量或使用隨需容量保留最佳化分配。
問:哪些區域可以使用 Amazon EMR?
支援 Amazon EMR AWS 區域的詳細清單,請參閱所有 AWS 全球基礎設施的 AWS 區域表。
問:AWS Local Zones 是否支援 Amazon EMR?
EMR 支援在洛杉磯 AWS Local Zones 中啟動叢集。您可以在美國西部 (奧勒岡) 區域中使用 EMR 啟動叢集到與洛杉磯 AWS Local Zones 關聯的子網路。
問:我應該選擇哪一個區域執行叢集?
建立叢集時,通常應選擇您的資料所在的區域。
問:是否可在美國區域執行的叢集中使用歐洲資料,或是在歐洲區域執行的叢集中使用美國資料?
是的,可以。如果您將資料從一個區域傳輸到另一個區域,需支付頻寬費用。有關頻寬定價資訊,請瀏覽 EC2 詳細資訊頁面上的定價部分。
問:AWS GovCloud (美國) 區域有什麼不同?
AWS GovCloud (美國) 區域專為美國政府機構和客戶而設計。遵守 US ITAR 要求。在 GovCloud,EMR 不支援 Spot 執行個體或啟用偵錯功能。GovCloud 中尚未提供 EMR 管理主控台。
部署選項
Amazon EC2 上的 Amazon EMR
問:什麼是 Amazon EMR 叢集?
叢集是 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的集合。叢集中的每個執行個體都稱為節點,並在叢集中具有角色,即是指節點類型。Amazon EMR 還在每個節點類型上安裝不同的軟體元件,在分散式應用程式 (如 Apache Hadoop) 中賦予角色給每一個節點。每個叢集都有一個以 "j-" 開頭的唯一識別符。
問:什麼是叢集中的節點類型?
Amazon EMR 叢集有三種類型的節點:
- 主節點:透過執行軟體元件,協調資料和任務在其他節點之間的分發,以進行處理來管理叢集的節點。主節點追蹤任務狀態並監控叢集的運作狀態。每個叢集具有一個主節點,並可以建立一個只有主節點的單一節點叢集。
- 核心節點:具有軟體元件的節點,可在叢集上的 Hadoop 分散式檔案系統 (HDFS) 中執行任務和儲存資料。多節點叢集具有至少一個核心節點。
- 任務節點:具有任務元件的節點,只能執行任務,而且不能將資料儲存在 HDFS。任務節點為選用。
問:什麼是叢集步驟?
叢集步驟是使用者定義的處理單位,其大約對應到一個操作資料的演算法。步驟是一種以 Java、Ruby、Perl、Python、PHP、R 或 C++ 編寫,並以 Java Jar 或串流程式的方式實作的 Hadoop MapReduce 應用程式。例如,要計算文件中單詞出現的頻率,並按計數排序輸出結果,第一個步驟是計算每個單詞出現次數的 MapReduce 應用程式,第二個步驟則是根據計數來排序第一個步驟輸出結果的 MapReduce 應用程式。
問:叢集有哪些不同的狀態?
STARTING – 透過設定 EC2 執行個體來啟動叢集。
BOOTSTRAPPING – 叢集上正在執行引導操作。
RUNNING – 目前正在執行叢集步驟。
WAITING – 叢集目前作用中,但沒有要執行的步驟。
TERMINATING – 叢集正在執行關閉程序。
TERMINATED – 叢集已關閉,且沒有發生錯誤。
TERMINATED_WITH_ERRORS – 叢集已關閉,但發生錯誤。
問:步驟有哪些不同的狀態?
PENDING – 步驟正在等待執行。
RUNNING – 步驟目前正在執行。
COMPLETED – 步驟已成功完成。
CANCELLED – 步驟已在執行前取消,因為之前的步驟故障或叢集在執行該步驟前已終止。
FAILED – 步驟在執行時發生故障。
啟動叢集
問:如何啟動叢集?
您可以填寫簡單的叢集申請表,透過 AWS 管理主控台啟動叢集。您要在申請表中指定叢集的名稱、Amazon S3 中輸入資料的位置、處理應用程式、所需的資料輸出位置,以及希望使用的 Amazon EC2 執行個體數量和類型。您也可以指定存放叢集日誌檔案和 SSH 金鑰的位置,以便在叢集執行時進行登入。或者,您可以使用 RunJobFlow API 或在命令列工具中使用「create」命令啟動叢集。如需使用 EMR Studio 啟動叢集的資訊,請參閱上述的 EMR Studio 部分。
問:如何終止叢集?
您可以隨時在 AWS 管理主控台中選擇叢集並按一下「終止」按鈕來終止叢集。或者,也可以使用 TerminateJobFlows API。如果終止正在執行的叢集,則 Amazon S3 中尚未保存的任何結果都將遺失,而且所有 Amazon EC2 執行個體都會關閉。
問:Amazon EMR 是否支援多個叢集同時操作?
您可以根據需要執行任何數量的叢集。開始執行時,您在所有叢集僅限執行 20 個執行個體。如果需要執行更多數量的執行個體,請填寫 Amazon EC2 執行個體申請表。一旦您的 Amazon EC2 限額提升,Amazon EMR 叢集就會自動套用新的限額。
管理叢集
問:Amazon EMR 如何使用 Amazon EC2 和 Amazon S3?
您可以將輸入資料和資料處理應用程式上傳到 Amazon S3 中。然後,Amazon EMR 根據您的指定,啟動一定數量的 Amazon EC2 執行個體。服務開始執行叢集,同時使用 S3 URI 方案將輸入資料從 Amazon S3 提取到啟動的 Amazon EC2 執行個體中。叢集完成後,Amazon EMR 將輸出資料傳輸到 Amazon S3,您就可以在此擷取資料,或將資料做為另一個叢集的輸入資料。
問:在 Amazon EMR 中如何進行運算?
Amazon EMR 使用 Hadoop 資料處理引擎來執行 MapReduce 程式設計模型中實作的運算。客戶可實作 map() 和 reduce() 函數的演算法。服務會啟動客戶指定的 Amazon EC2 執行個體數量,其中包含一個主執行個體和多個其他節點。Amazon EMR 在這些執行個體上執行 Hadoop 軟體。主節點將輸入資料劃分成多個區塊,並將區塊的處理工作分配給其他節點。然後,每個節點在分配給它的資料上執行 map 函數,產生中繼資料。接著排序和分割中繼資料,再傳送到在本機節點上對其套用縮減器函數的程序。最後,在檔案中收集縮減器任務的輸出。一個「叢集」可能包含一系列上述 MapReduce 步驟。
問:Amazon EMR 支援哪些 Amazon EC2 執行個體類型?
有關各區域最新可用執行個體類型和定價的詳細資訊,請參閱 EMR 定價頁面。
問:執行叢集需要多久時間?
執行叢集所需的時間取決於多種因素,包括叢集的類型、輸入資料的數量,以及為叢集選擇的 Amazon EC2 執行個體數量和類型。
問:如果叢集中的主節點發生故障,Amazon EMR 是否能恢復該節點?
是。您可以啟動包含三個主節點的 EMR 叢集 (版本 5.23 或更新版本),然後支援 YARN Resource Manager、HDFS Name Node、Spark、Hive 和 Ganglia 這類應用程式的高可用性。如果主要主節點故障或 Resource Manager 或 Name Node 等關鍵程序中斷,Amazon EMR 會自動容錯移轉至備用主節點。使用此功能之後,主節點不是潛在的單一故障點,因此您可以執行長效 EMR 叢集,且不用擔心中斷。在容錯移轉的情況下,Amazon EMR 會自動使用擁有相同組態和引導操作的新主節點替換故障的主節點。
問:如果叢集中的另一個節點發生故障,Amazon EMR 是否可從該節點恢復?
是。Amazon EMR 具有節點故障的容錯能力,當節點發生故障時,將繼續執行工作。Amazon EMR 也會在核心節點故障時佈建新節點。不過,如果叢集中的所有節點都遺失,Amazon EMR 將不會取代節點。
問:是否可以使用 SSH 存取我的叢集節點?
是。您可以使用 SSH 存取叢集節點,並從該位置直接執行 Hadoop 命令。如果您需要使用 SSH 存取特定的節點,必須先使用 SSH 存取主節點,再使用 SSH 存取所需節點。
問:什麼是 Amazon EMR 引導操作?
引導操作是 Amazon EMR 中的一項功能,為使用者提供在執行叢集前執行自訂設定的方式。執行叢集前,可使用引導操作來安裝軟體或設定執行個體。有關引導操作的更多資訊,請參閱 EMR 的開發人員指南。
問:如何使用引導操作?
您可以用叢集執行個體上已安裝的任何語言編寫引導操作指令碼,包括 Bash、Perl、Python、Ruby、C++ 或 Java。可使用一些預先定義的引導操作。指令碼編寫完成後,您需要將指令碼上傳到 Amazon S3,並在啟動叢集時參考其位置。請參閱開發人員指南,了解如何使用引導操作的詳細資訊。
問:如何為叢集配置 Hadoop 設定?
EMR 預設的 Hadoop 設定適合大多數工作負載。不過,根據叢集的特定記憶體和處理要求,最好對這些設定進行調校。例如,如果叢集任務需要使用大量記憶體,您可以選擇每個核心使用較少的任務,並降低工作追蹤器堆積大小。在這種情況下,可以使用預先定義的引導操作,在啟動時設定叢集。請參閱開發人員指南中的設定記憶體密集型引導操作,了解設定詳細資訊和使用說明。您可以使用其他預先定義的引導操作,針對所選的任何數值自訂叢集設定。請參閱開發人員指南中的設定 Hadoop 引導操作,了解相關使用說明。
問:是否可以修改執行中叢集的節點數?
是。節點有兩種類型:(1) 核心節點,既可使用 Hadoop 分散式檔案系統 (HDFS) 託管持續性資料,又能執行 Hadoop 任務;以及 (2) 任務節點,僅用來執行 Hadoop 任務。當叢集執行時,您可以增加核心節點的數量,也可以增加或減少任務節點的數量。您可以透過 API、Java SDK 或透過命令列用戶端執行此操作。請參閱開發人員指南中的調整執行中叢集的大小部分,了解如何修改執行中叢集大小的詳細資訊。您也可以使用 EMR 受管擴展。
問:何時該使用核心節點?何時該使用任務節點?
由於核心節點在 HDFS 中託管持續性資料且無法移除,所以核心節點應該保留用於必要的容量,直到叢集完成為止。任務節點可以新增或移除且不含 HDFS,所以非常適合僅臨時需要容量的情況。您可以在 Spot 執行個體上啟動任務執行個體機群,在提升容量的同時,將成本降至最低。
問:為什麼我會希望修改執行中叢集的節點數?
在某些情況下,您可能會希望修改執行中叢集的節點數。如果您的叢集執行速度低於預期,或時間要求發生變化,可以增加核心節點數以提高叢集效能。如果叢集的不同階段有不同的容量需求,您可以一開始使用少量核心節點,再增減任務節點的數量,以滿足叢集不斷變化的容量要求。 您也可以使用 EMR 受管擴展。
問:是否可以自動修改叢集步驟之間的節點數?
是。您可以在工作流程中包含預先定義的步驟,自動在已知有不同容量需求的步驟之間調整叢集大小。由於所有步驟都保證按順序執行,這讓您能夠設定執行指定叢集步驟的節點數。
問:如何允許其他 IAM 使用者存取我的叢集?
要建立對 EMR CLI 中所有 IAM 使用者顯示的新叢集:在建立叢集時新增 --visible-to-all-users 旗標。例如:elastic-mapreduce --create --visible-to-all-users。在管理主控台內,只需在建立叢集精靈的「進階選項」面板上選擇「所有 IAM 使用者可見」即可。
要讓現有叢集對所有 IAM 使用者顯示,您必須使用 EMR CLI。使用 --set-visible-to-all-users 並指定叢集識別符。例如:elastic-mapreduce --set-visible-to-all-users true --jobflow j-xxxxxxx。此步驟只能由叢集的建立者執行。
要進一步了解相關資訊,請參閱 EMR Developer Guide 中的 Configuring User Permissions 部分。
標記叢集
問:可以為哪些 Amazon EMR 資源加上標籤?
您可以將標籤新增到作用中的 Amazon EMR 叢集。Amazon EMR 叢集由 Amazon EC2 執行個體組成,新增到 Amazon EMR 叢集的標籤將傳播到該叢集的每個作用中 Amazon EC2 執行個體。您無法在已終止的叢集或者屬於作用中叢集一部分的已終止 Amazon EC2 執行個體新增、編輯或移除標籤。
問:Amazon EMR 標記是否支援 IAM 使用者以資源為基礎的許可?
否,Amazon EMR 不支援依標籤以資源為基礎的權限。不過,請務必注意,傳播到 Amazon EC2 執行個體的標籤與一般 Amazon EC2 標籤的行為方式相同。因此,如果從 Amazon EMR 傳播的標籤與適用於 Amazon EC2 的 IAM 政策中的條件相符,則此政策將對這些標籤採取動作。
問:可以對資源新增多少個標籤?
在 Amazon EMR 叢集上最多可以新增十個標籤。
問:叢集上的 Amazon EMR 標籤是否會顯示在該叢集的每個 Amazon EC2 執行個體上? 如果移除 Amazon EMR 叢集上的標籤,是否會從每個相關的 EC2 執行個體自動移除該標籤?
是,Amazon EMR 會將新增到叢集的標籤傳播到該叢集的基礎 EC2 執行個體。如果將標籤新增到 Amazon EMR 叢集,則此標籤也會顯示在相關的 Amazon EC2 執行個體上。同樣地,如果從 Amazon EMR 叢集移除某個標籤,也會從其相關的 Amazon EC2 執行個體移除該標籤。不過,如果使用適用於 Amazon EC2 的 IAM 政策,並計劃使用 Amazon EMR 的標記功能,您應該確保授予使用 Amazon EC2 標籤 API CreateTags 和 DeleteTags 的許可。
問:如何在帳單中顯示標籤以劃分成本?
在這裡選擇要在 AWS 帳單報告中使用的標籤。然後,根據具有相同標籤鍵值的資源來組織帳單資訊,以查看合併資源的成本。
問:如何分辨哪些 Amazon EC2 執行個體屬於 Amazon EMR 叢集?
與 Amazon EMR 叢集關聯的 Amazon EC2 執行個體會有兩個系統標籤:
- aws:elasticmapreduce:instance-group-role=CORE
- Key = instance-group role ; Value = [CORE or TASK];
- aws:elasticmapreduce:job-flow-id=j-12345678
- Key = job-flow-id ; Value = [JobFlowID]
問:是否能直接在 Amazon EC2 執行個體上編輯標籤?
是,您可以在屬於 Amazon EMR 叢集的 Amazon EC2 執行個體上直接新增或移除標籤。不過,我們不建議這麼做,因為 Amazon EMR 的標記系統不會直接同步您對關聯的 Amazon EC2 執行個體所做的變更。我們建議從 Amazon EMR 主控台、CLI 或 API 新增和移除 Amazon EMR 叢集的標籤,以確保叢集及其關聯的 Amazon EC2 執行個體具有正確的標籤。
EMR Serverless
一般問題
問:什麼是 Amazon EMR Serverless?
Amazon EMR Serverless 是 Amazon EMR 中的一個新部署選項,允許您執行大數據架構,例如 Apache Spark 和 Apache Hive,而無需設定、管理和擴展叢集。
問:誰可以使用 EMR Serverless?
資料工程師、分析師和科學家可以使用 EMR Serverless 來建置使用開放原始碼架構 (例如 Apache Spark 和 Apache Hive) 的應用程式。他們可以使用架構來轉換資料、執行互動式 SQL 查詢和機器學習工作負載。
問:如何開始使用 EMR Serverless?
您可以使用 EMR Studio、AWS CLI 或 API 來提交任務、追蹤任務狀態並建置資料管道,以在 EMR Serverless 上執行。若要開始使用 EMR Studio,請登入 AWS 管理主控台,導覽至分析類別下的 Amazon EMR,再選取 Amazon EMR Serverless。按照 AWS 管理主控台中的說明,導覽至分析類別下的 Amazon EMR,再選取 Amazon EMR Serverless。 按照入門指南中的說明,建立 EMR Serverless 應用程式並提交任務。您可以參閱在 AWS CLI 頁面上與應用程式互動,啟動您的應用程式並使用 CLI 提交任務。您也可以在 GitHub 儲存庫中找到 EMR Serverless 範例以及範例程式碼。
問:EMR Serverless 支援哪些開放原始碼架構?
EMR Serverless 目前支援 Apache Spark 和 Apache Hive 引擎。如果您需要 Apache Presto 或 Apache Flink 等其他架構的支援,請發送請求至 emr-feedback@amazon.com。
問:EMR Serverless 在哪些區域開放使用?
EMR Serverless 於以下 AWS 區域提供︰亞太區域 (孟買)、亞太區域 (首爾)、亞太區域 (新加坡)、亞太區域 (雪梨)、亞太區域 (東京)、加拿大 (中部)、歐洲 (法蘭克福)、歐洲 (愛爾蘭)、歐洲 (倫敦)、歐洲 (巴黎)、歐洲 (斯德哥爾摩)、南美洲 (聖保羅)、美國東部 (維吉尼亞北部)、美國東部 (俄亥俄)、美國西部 (加利佛尼亞北部) 和美國西部 (奧勒岡)。
問:Amazon EMR Serverless、Amazon EMR on EC2、AWS Outposts 上的 Amazon EMR 和 Amazon EMR on EKS 有何區別?
Amazon EMR 提供了在 EC2 型的叢集、EKS 叢集、Outposts 或無伺服器上執行應用程式的選項。EC2 叢集上的 EMR 適用於需要最大控制權和彈性來執行其應用程式的客戶。借助 EC2 叢集上的 EMR,客戶可以選擇 EC2 執行個體類型以滿足應用程式特定性能需求、自訂 Linux AMI、自訂 EC2 執行個體設定、自訂並擴展開放原始碼架構,以及在叢集執行個體上安裝其他自訂軟體。EKS 上的 Amazon EMR 適用於希望在 EKS 上進行標準化,以跨應用程式管理叢集,或在同一叢集上使用不同版本的開放原始碼的客戶。AWS Outposts 上的 Amazon EMR 適用於希望在離資料中心更近的 Outpost 內執行 EMR 的客戶。EMR Serverless 適用於希望避免管理和營運叢集,以及偏好使用開放原始碼架構執行應用程式的客戶。
問:EMR Serverless 和 EC2 上的 Amazon EMR 的功能有何區別?
|
|
|
EKS 上的 Amazon EMR |
|
|
|
Y |
可用區域故障恢復能力 |
|
|
Y |
依需求自動擴展與縮減資源 |
|
|
Y |
靜態資料加密 |
|
|
Y |
|
|
Spark |
|
|
|
|
N |
支援 Apache Hudi 與 Apache Iceberg |
Y |
Y |
Y |
與 Apache Ranger 整合以達到表格級和欄層級許可控制 |
|
|
N |
自訂作業系統映像 |
|
|
Y |
自訂已安裝的開放原始碼架構 |
Y |
Y |
Y |
自訂與載入其他程式庫和相依性 |
Y |
Y |
Y |
從 SageMaker Studio 執行工作負載來作為機器學習 (ML) 工作流程的一部分 |
N |
|
N |
連接至自我託管 Jupyter 筆記本 |
N |
Y |
Y |
使用 Apache Airflow 和 Amazon Managed Workflows for Apache Airflow (MWAA) 建置和協調管道 |
|
|
Y |
使用 AWS Step Functions 建置和協調管道 |
Y |
|
Y |
問:EMR Serverless 支援哪些 EMR 版本?
EMR Serverless 支持 EMR 版本標籤 6.6 和更新版本。使用 EMR Serverless,您可以得到與其他 EMR 部署選項相同的性能最佳化 EMR 執行期,其與標準開放原始碼架構 100% API 相容。
問:預先初始化容量的費用是否包含在 BilledResourceUtilization 中?
BilledResourceUtilization 只會考慮用於任務之預先初始化容量的持續時間,而不會將這類容量的任何閒置時間計入。
問:BilledResourceUtilization 和 TotalResourceUtilization 有什麼區別?
如果工作者的執行期持續時間小於 60 秒,則 BilledResourceUtilization 會以 60 秒計算,而 TotalResourceUtilization 則會四捨五入到最接近的秒數。此外,BilledResourceUtilization 會在計算中排除 20GB 的免費儲存空間。
應用程式、工作者、任務
問:什麼是應用程式,還有我該如何建立它?
有了 Amazon EMR Serverless,您可以建立一個或多個使用開放原始碼分析架構的 EMR Serverless 應用程式。若要建立應用程式,您必須指定以下屬性:1) 您要使用的開放原始碼框架版本的 Amazon EMR 發行版本,以及 2) 您希望應用程式使用的特定分析引擎,例如 Apache Spark 3.1或 Apache Hive 3.0。建立應用程式後,您可以開始執行資料處理任務或對應用程式的互動式請求。
問:什麼是工作者?
EMR Serverless 應用程式在內部使用工作者來執行工作負載。提交任務時,EMR Serverless 會運算任務所需的資源,並排程工作者。EMR Serverless 將工作負載細分為任務,使用開放原始碼佈建和設定工作者,並在任務完成時進行淘汰。EMR Serverless 會根據任務每個階段所需的工作負載和平行處理自動擴展或縮減工作者,因此您無需預估執行工作負載所需的工作者數量。預設的工作者大小依您的應用程式類型以及 Amazon EMR 發行版本而定。您可以在安排任務執行時覆寫這些大小。
問:我可以指定任務能使用的工作者數量下限和上限嗎?
使用 EMR Serverless,您可以指定並行工作者的數目下限與上限以及工作者的 vCPU 和記憶體設定。您還可以設定應用程式資源的容量限制上限以控制成本。
問:我何時該建立多個應用程式?
在執行以下任一項操作時,考慮建立多個應用程式:
- 使用不同的開放原始碼架構
- 為不同的使用案例使用不同版本的開放原始碼架構
- 從一個版本升級到另一個版本時執行 A/B 測試
- 為測試和生產案例維護單獨的邏輯環境
- 透過獨立的成本控制和用量追蹤,為不同的團隊提供單獨的邏輯環境
- 分開不同業務線的應用程式
問:我可以在建立 EMR Serverless 預設屬性之後變更它嗎?
可以,您可以使用 EMR Studio 或更新應用程式 API/CLI 呼叫來修改應用程式屬性,例如初始容量、容量上限和網路設定。
問:我何時該建立具有預先初始化的工作者集區的應用程式?
不具有預先初始化的工作者的 EMR Serverless 應用程式,最長需要 120 秒來判定並佈建所需的資源。EMR Serverless 提供了一項選用功能,可以讓工作者在幾秒鐘內完成初始化並準備好回應,有效地為應用程式建立一個待命工作者集區。該功能稱為預先初始化功能,可以透過設定應用程式的初始化功能參數來為每個應用程式設定。
預先初始化的容量允許立即啟動任務,使其成為實作有時間急迫性任務的理想選擇。您可以指定啟動 EMR Serverless 應用程式時,想要預先初始化的工作者數量。隨後,在使用者提交任務時,可使用預先初始化的工作者立即啟動任務。如果任務需要的工作者數量比您選擇的預先初始化數量還多,EMR Serverless 會自動新增更多工作者 (最多達您指定的最大並行限制)。任務結束後,EMR Serverless 會自動恢復為維護您指定的預先初始化的工作者。已閒置 15 分鐘的工作者會自動關閉。您可以使用 updateApplication API 或 EMR Studio 變更應用程式的預設閒置逾時。
問:我如何在 EMR Serverless 上提交並管理任務?
您可以使用 EMR Studio、SDK/CLI 或我們的 Apache Airflow 連接器提交和管理 EMR Serverless 任務。
問:我如何將相依性包含在想在 EMR Serverless 上執行的任務裡?
對於 PySpark,您可以使用 virtualenv 封裝 Python 相依性,並使用 --archives 選項傳遞封存檔案,讓工作者在任務執行期間得以使用相依性。針對 Scala 或 Java,您可以將相依性封裝為 Jar,將它們上傳到 Amazon S3,然後使用 --jars 或 --packages 選項將它們傳遞給 EMR Serverless 任務來執行。
問:EMR Serverless Spark 和 Hive 應用程式支援使用者定義的函數 (UDF) 嗎?
EMR Serverless 支援以 Java 為基礎的 UDF。您可以將其封裝為 Jar,上傳到 Amazon S3,並在 Spark 或 HiveQL 指令碼中使用。
問:EMR Serverless 支援哪些工作者設定?
請參閱支援的工作者設定以取得詳細資訊。
問:如果 EMR Serverless 任務執行時間超過預期,我可以取消它嗎?
可以,您可以從 EMR Studio 或呼叫 cancelJobRun API/CLI 取消正在執行的 EMR Serverless 任務。
問:我可以新增額外的儲存到工作者嗎?
您可以在工作提交期間選取適當的儲存空間選項,將額外儲存空間新增至 EMR 無伺服器中的工作人員。EMR 無伺服器提供兩種暫存選項:
- 標準儲存空間:此選項預設為每個工作人員提供 20 GB 暫存空間。您可以在工作提交期間自訂此項目,並將儲存容量從 20 GB 增加至每位工作人員 200 GB。
- 隨機最佳化的磁碟儲存空間:此選項每個工作人員最多可提供 2 TB 暫存空間,針對隨機密集型工作負載進行最佳化。
問:哪裡可以找到程式碼範例?
您可以在 GitHub 儲存庫找到 EMR Serverless 程式碼範例。
問:EMR Serverless 提供哪些工作者選項?
EMR Serverless 為工作者提供兩種選項:隨選工作者和預先初始化工作者。
隨需工作者只有在任務需要時才會啟動,並會在任務完成時自動釋放。這可協助您節省成本,僅為使用的資源付費,而且能避免閒置容量的任何額外成本。隨需工作者會根據您的工作負載擴展或縮減應用程式,因此您不必擔心過度佈建資源或佈建不足。
預先初始化工作者是選擇性功能,您可以讓工作者保持就緒以便在幾秒鐘內回應。這實際上為應用程式建立了一個工作者的暖集區,讓任務能馬上開始,因此非常適合疊代型應用程式和有時效性的任務。
問:是否可以在多個可用區域 (AZ) 中設定 EMR Serverless 應用程式?
是,可以跨多個 AZ 設定 EMR Serverless 應用程式。設置多個 AZ 的程序取決於您使用的工作者類型。
僅使用隨需工作者時,EMR Serverless 預設會將任務分配到多個 AZ,但每個任務只能在一個 AZ 中執行。您可以透過將子網路與 AZ 相關聯來選擇要使用的 AZ。如果 AZ 發生問題,EMR Serverless 會自動在另一個運作狀態良好的 AZ 中執行您的任務。
使用預先初始化工作者時,EMR Serverless 會從您指定的子網路中選取運作狀態良好的 AZ。會在該 AZ 中提交任務,直到您停止應用程式為止。如果 AZ 受損,您可以重新啟動應用程式以切換到另一個運作狀態良好的 AZ。
問:是否可以連線到不同區域的資料存放區?
當設定為沒有 VPC 連線時,EMR Serverless 只能存取相同區域中的特定 AWS 資源。參見考量。若要存取不同區域中的 AWS 資源或非 AWS 資源,您需要設定 VPC 存取權和 NAT 閘道,以路由至 AWS 資源的公有端點。
監控與偵錯
問:如何監控 Amazon EMR Serverless 應用程式與任務執行?
Amazon EMR Serverless 應用程式和任務層級指標每 30 秒發佈到 Amazon CloudWatch。
問:如何使用 EMR Serverless 啟動 Spark UI 和 Tez UI?
在 EMR Studio 中,您可以選取正在執行或已完成的 EMR Serverless 任務,然後按一下 Spark UI 或 Tez UI 按鈕來啟動它們。
安全和資料控制
問:可以在我的 Amazon Virtual Private Cloud(VPC) 裡存取資源嗎?
可以,您可以設定 Amazon EMR Serverless 應用程式,來存取自己的 VPC 裡的資源。請參閱文件中的設定 VPC 存取部分,以進一步了解更多資訊。
問:使用 EMR Serverless 應用程式可得到哪種類型的隔離?
每個 EMR Serverless 應用程式皆與其他應用程式隔離,並在安全的 Amazon VPC 上執行。
帳戶層級的 vCPU 配額
問:Amazon EMR Serverless 的服務配額有何改變?
Amazon EMR Serverless 引入新的服務配額,稱為每個帳戶的最高並行 vCPU。此 vCPU 配額可供您設定應用程式在區域內至多可縱向擴展的最大彙總 vCPU 數量。現有的應用程式層級工作者配額(最多活躍工作者)將於 2023 年 2 月 1 日截止支援。
問:可至何處檢視與管理帳戶下的 vCPU 配額?
您可在 AWS Service Quotas 管理主控台檢視、管理及請求提升配額。如需詳細資訊,請參閱 Service Quotas 使用者指南中的請求提升配額。
問:帳戶層級的 vCPU 配額與應用程式層級的 maximumCapacity 屬性之間有何差異?
EMR Serverless 提供兩種成本控制方式 - 1/ 每個帳戶的最高並行 vCPU 配額,會在您的帳戶下套用在區域內的所有 EMR Serverless 應用程式。2/ maximumCapacity 參數,可限制特定 EMR Serverless 應用程式的 vCPU。您應使用 vCPU 配額限制區域內所有應用程式使用的最高並行 vCPU,以 maximumCapacity 屬性限制特定應用程式使用的資源。例如,假設您有 5 個應用程式,每個應用程式各能縱向擴展至 1000 vCPU,則您可將 maximumCapacity 屬性設定為每個應用程式各 1000 vCPU,並將帳戶層級的 vCPU 配額設定為 5 * 1000 = 5000 vCPU。
問:如何知道自己是否達到 vCPU 帳戶配額?
如您超過帳戶層級的 vCPU 配額,EMR Serverless 會停止佈建新容量。如您在超過配額之後嘗試建立新的應用程式,應用程式的建立會失敗,並顯示錯誤訊息「應用程式無法建立,因您超出每個帳戶的最高並行 vCPU 服務配額。您可使用 AWS Service Quotas 主控台檢視及管理服務配額。」 如您在超出配額之後提交新任務,任務會失敗,並顯示錯誤訊息:「任務失敗,原因是您已超出每個帳戶的最高並行 vCPU 服務配額。您可使用 AWS Service Quotas 主控台檢視及管理服務配額。」 請參閱文件以取得詳細資訊。
定價
問:Amazon EMR Serverless 如何節省大數據部署成本?
Amazon EMR Serverless 可透過三種方式幫助您節省成本。首先,沒有管理、保護和擴展叢集的營運開銷。第二點,EMR Serverless 在處理您的任務的每個階段自動擴展工作者,並在不需要時縮減工作者。您需要為從工作者開始執行到停止時使用的聚合 vCPU、記憶體和儲存資源付費,四捨五入到最接近的秒數,最短為 1 分鐘。例如,您的任務可能需要 10 名工作者處理任務的前 10 分鐘,和 50 名工作者處理接下來的 5 分鐘。透過微調自動擴展,您只需為 10 名工作者使用 10 分鐘和 50 名工作者使用 5 分鐘支付費用。因此,您不必為使用率過低的資源付費。第三點,EMR Serverless 包括針對 Apache Spark 和 Apache Hive 以及 Presto 的 Amazon EMR 性能最佳化執行時間。Amazon EMR 執行時間與 API 相容,速度是標準開放原始碼分析引擎的兩倍多,因此您的任務執行速度更快,運算成本更低。
問:EMR Serverless 的成本是否與 EC2 Spot 執行個體上的 Amazon EMR 相當?
成本依您目前 EC2 叢集上的 EMR 使用率而定。如果您正在使用 EC2 隨需執行個體執行 EMR 叢集,假如目前的叢集使用率低於 70%,則 EMR Serverless 將提供較低的總體擁有成本。如果您使用的是 EC2 Savings Plans,假如目前的叢集使用率低於 50%,EMR Serverless 將提供較低的 TCO。如果您使用 EC2 Spot 執行個體,EC2 上的 Amazon EMR 和 EKS 上的 Amazon EMR 會更加經濟實惠。
問:即使任務執行完畢後,還會收取預先初始化的工作者費用嗎?
是,如果任務完成後,沒有停止工作者的話,您需要支付預先初始化的工作者費用。
問:如果我想要問問題、提出評論和需要其他功能,應該要聯絡誰?
請將您對 EMR Serverless 的查詢和寶貴意見回饋,傳送電子郵件到 emr-feedback@amazon.com。
Amazon EKS 上的 Amazon EMR
問:什麼是 Amazon EKS 上的 Amazon EMR?
Amazon EKS 上的 Amazon EMR 是 Amazon EMR 的一種部署模型,使客戶能夠輕鬆且經濟實惠地處理大量資料。其利用容器中的彈性 Amazon EKS 受管服務上執行的託管分析架構,以及 Amazon Elastic Compute Cloud (Amazon EC2)、AWS Fargate 和 Amazon Simple Storage Service (Amazon S3) 的 Web 規模級基礎設施。
問:為什麼應該使用 Amazon EKS 上的 Amazon EMR?
Amazon EKS 上的 Amazon EMR 使用以容器為基礎的方法,將分析任務與處理該任務的服務和基礎設施分離。您可以更專注於開發應用程式,花費較少心力操作基礎設施,因為 EKS 上的 EMR 會根據任務的運算、記憶體和應用程式相依性,來動態設定基礎設施。基礎架構團隊可以集中管理一個通用運算平台,來整合 EMR 工作負載與其他以容器為基礎的應用程式。多個團隊、組織或業務單位可以同時獨立地在共享基礎設施上執行分析流程,同時維護由 Amazon EKS 和 AWS Identity and Access Management (IAM) 啟用的隔離。
問:已開始在 Amazon EKS 上執行 Apache Spark 的使用者有哪些好處?
如果您已在 Amazon EKS 上執行 Apache Spark,可以獲得 Amazon EMR 的所有好處,例如自動佈建與擴展,與使用開放原始碼大數據與分析架構最新全受管版本的能力。您獲得 Apache Spark 的最佳化 EMR 執行時間,其效能比 EKS 上的開放原始碼 Apache Spark 快 3 倍、使用 EMR Studio 和 Apache Spark UI 的無伺服器資料科學體驗、精細的資料存取控制,以及對資料加密的支援。
此功能如何與其他 AWS 服務關聯與搭配使用?
Amazon EKS 為客戶提供在 AWS 上執行 Kubernetes 的受管體驗,使您能夠使用 EKS 受管節點群組或使用 AWS Fargate 新增運算容量。在 EKS 上執行 EMR 任務,可以存取 Amazon S3 上的資料,同時可以將監控和紀錄與 Amazon CloudWatch 整合。AWS Identity and Access Management (IAM) 支援對任務和相依 AWS 服務進行基於角色的存取控制。
問:Amazon EKS 上的 Amazon EMR 如何運作?
向 Amazon EMR 註冊 EKS 叢集。然後,使用 CLI、SDK 或 EMR Studio 將您的 Spark 任務提交到 EMR。EMR 請求 EKS 上的 Kubernetes 排程器來排程 Pod。EKS 上的 EMR 會針對您執行的每個任務建立容器。該容器包含具備安全更新的 Amazon Linux 2 基礎映像,以及 Apache Spark 和關聯的相依性以執行 Spark,以及應用程式特定相依性。每個任務在 Pod 中執行。Pod 下載該容器,並開始執行它。假如該容器的映象先前已部署到節點,則使用快取映像,並跳過下載。Sidecar 容器 (例如日誌或指標轉寄站) 可以部署到 Pod。Pod 會在任務終止後終止。任務終止後,您仍能使用 Spark UI 為其進行偵錯。
問:我可以將哪些 AWS 運算服務與 EKS 上的 Amazon EMR 搭配使用?
您可以將 EKS 的 Amazon EMR 與 Amazon Elastic Compute Cloud (EC2) 執行個體結合使用,以支援更廣泛的自訂選項,或使用無伺服器 AWS Fargate 服務來處理分析,而無需佈建或管理 EC2 執行個體。透過將您的分析任務分散到多個 AWS 可用區域 (AZ),可以自動提升應用程式的可用性。
問:如何開始使用 EKS 上的 EMR?
若要開始使用,請先向 Amazon EMR 註冊 Amazon EKS 叢集。 註冊後,透過將工作負載提交給 EMR 執行,在您的任務定義(包括應用程式相依性和架構參數)中參考此註冊。透過 EKS 上的 EMR,您能將不同的開放原始碼大數據分析架構、版本和設定,用於在同一個 EKS 叢集上執行的分析應用程式。 如需詳細資訊,請參閱我們的文件。
問:可以將相同的 EMR 版本用於 EMR 叢集以及在 EKS 上執行的應用程式嗎?
可以,您可以將相同的 EMR 版本用於在 EMR 叢集上執行的應用程式,以及在 EKS 上執行的應用程式。
問:如何對分析應用程式進行故障排除?
您可以使用 Amazon EMR Spark UI 來診斷 Spark 應用程式,並進行故障排除。EMR 對所有分析應用程式提供應用程式存取詳細資訊、相關聯的日誌,以及指標,時間長達它們完成後的 30 天。可以單獨設定任務,以將日誌傳送到 Amazon S3 位置或 Amazon CloudWatch。
問:可以在 EKS 中查看 EMR 應用程式嗎?
可以,EMR 應用程式在 EKS 主控台中顯示為 Kubernetes 任務和部署。
問:我可以在同一個 EKS 叢集上將多個任務或應用程式彼此隔離嗎?
可以,Kubernetes 原生提供任務隔離功能。此外,每個任務都能設定為使用自己的執行角色執行,以限制任務可存取的 AWS 資源。
問:EKS 上的 EMR 如何協助降低成本?
EKS 上的 EMR 透過免除執行專用叢集的需求來降低成本。您可使用通用的共享 EKS 叢集,執行需要不同版本的開放原始碼大數據分析架構的分析應用程式。您也可以使用相同的 EKS 叢集,執行其他的容器化非 EMR 應用程式。
問:如何對 EKS 上的 EMR 收費?
EKS 上的 Amazon EMR 定價,係根據以每分鐘資料粒度執行任務的 Pod,所請求的 vCPU 和記憶體資源來計算的。如需定價資訊,請瀏覽 Amazon EMR 定價頁面。
問:EKS 上的 EMR 和 EC2 上的 EMR 有何區別?
功能 |
EKS 上的 EMR |
EC2 上的 EMR |
最新支援的 EMR 版本 |
Y |
Y |
任務的多可用區支援 |
Y |
N |
具有非大數據工作負載的多租用戶 |
Y |
N |
EMR 版本範圍 |
任務 |
叢集 |
Auto-Scaling 叢集 |
Y |
Y |
受管擴展 |
N |
Y |
運算供應商 |
EC2, Fargate |
EC2 |
資料加密 |
Y |
Y |
Kerberos 身分驗證 |
N |
Y |
託管應用程式 |
僅適用於 Spark |
|
AWS Lake Formation |
N |
Y |
Apache Ranger 整合 |
N |
Y |
自訂 AMI / 映像 |
Y |
Y |
與 SageMaker & Zeppelin 整合 |
Y 和 Livy |
Y |
自我託管筆記本 |
N | Y |
與 EMR Studio 整合 |
Y |
Y |
Zeppelin, JEG |
N |
Y |
與 Apache Airflow 協同運作 |
Y |
Y |
與 AWS Stepfunctions 協同運作 |
Y |
Y |
問:Pod 範本是什麼?
EKS 上的 EMR 使您能使用 Kubernetes Pod 範本,自訂 Kubernetes 叢集中的任務執行位置和方式。Kubernetes Pod 範本提供了一種可重複使用的設計模式或範本,用在以宣告方式表達應如何將 KubernetesPod 部署到您的 EKS 叢集。
問:為何該將 Pod 範本與 EKS 上的 EMR 任務一起使用?
Pod 範本可以更妥善地控制您的任務在 Kubernetes 中的排程方式。例如,您可以透過在 Amazon EC2 Spot 執行個體上執行 Spark 驅動程式任務,或僅允許需要 SSD 的任務在支援 SSD 的執行個體上執行來降低成本。EKS 上具有 EMR 的 Pod 範本可以精細地控制資源的分配方式,並在您的任務中執行自訂容器。由此可降低成本,以及提升您的任務效能。
問:什麼是 Pod?
Pod 為一個或多個容器,具有共享網路與儲存資源,並在 Kubernetes 工作節點上執行。EKS 上的 EMR 透過將 Spark 驅動程式與執行任務排程為單獨的 Pod,以使用 Pod 執行您的任務。
問:Pod 範本有哪些使用案例?
您可以使用 Pod 範本來最佳化效能與成本。例如,您可以透過定義任務在 EC2 Spot 執行個體上執行來降低成本,或透過將其排程到 GPU 或 SSD 支援的 EC2 執行個體來提升效能。客戶通常需要精細的工作負載控制,以便在 EKS 上支援多個團隊或組織,而 Pod 範本簡化了在團隊指定之節點群組上執行的任務。此外,您可以部署 Sidecar 容器,執行任務的初始化程式碼,或執行 Fluentd 等常用監控工具來進行日誌轉寄。
問:我可以為 Spark 驅動程式以及 Spark 執行程式指定不同的 Pod 範本嗎?
您可以 (但非必須) 為驅動程式和執行程式提供單獨的範本。例如,您可以設定 nodeSelectors 和 tolerations 以指定 Spark 驅動程式僅在 AWS EC2 隨需執行個體上執行,並指定 Spark 執行程式僅在 AWS Fargate 執行個體上執行。在您的作業提交中,設定 Spark 屬性 spark.kubernetes.driver.podTemplateFile 和 spark.kubernetes.executor.podTemplateFile 以參照範本的 S3 位置。
問:我可以指定哪種範本值?
您可以同時指定 Pod 等級欄位(包括 Volumes、Pod Affinity、Init Containers、Node Selector)和 Spark 主容器等級欄位(包括 EnvFrom、Working Directory、Lifecycle、Container Volume Mounts)。文件提供允許的值的完整清單。
問:在何處可以找到有關 Pod 範本的更多資訊?
Amazon EKS 已支援 Pod 範本,如需更多 Amazon EMR on EKS 對 Pod 範本的支援相關資訊,請參閱我們的文件以及 Apache Spark Pod 範本文件。
問:我為何該在 EKS 上的 EMR 使用自訂映像檔?
少了自訂映像檔,使用 EKS 上的 EMR 管理應用程式相依性時,需要您在執行時間從外部儲存服務 (如 Amazon S3) 參照它們。現在,有了自訂映像檔的支援,您可以使用應用程式與其相依程式庫,建立獨立的 Docker 映像檔。您不再需要維護、更新或描述儲存在外部的程式庫,還能使用與其他容器化應用程式正在使用的相同 DevOps 流程來研發大數據應用程式。只需指向映像並將其執行。
問:什麼是自訂映像檔?
自訂映像檔是由 EKS 上的 EMR 提供的 Docker 映像檔 (「基礎映像」),包含 EMR 執行時間和連接到其他 AWS 服務的連接器,您可以修改這些服務以包含應用程式相依性或您的應用程式需要的其他套件。新的映像可以儲存在 Amazon Elastic Container Registry (ECR) 或您自己的 Docker 容器登錄檔。
問:自訂映像檔有哪些使用案例?
客戶可以建立基礎映像,新增公司標準程式庫,並將其儲存在 Amazon Elastic Container Registry (Amazon ECR)。其他客戶可以自訂映像,以納入應用程式特定相依性。可以掃描產生的不可變映像之漏洞,部署到測試和生產環境。您可以新增的相依性範例包含 Java SDK、Python 或 R 程式庫,您可以將其直接新增到映像,就像其他容器化應用程式一樣。
問:基礎映像中包含什麼?
問:我何時該為 Spark 驅動程式和 Spark 執行程式指定不同的自訂映像檔?
當您想納入不同的相依性或程式庫時,可以為 Spark 驅動程式和執行程式指定單獨的映像。移除兩張映像皆不需要的程式庫,可能會導致較小的映像大小,因而減少任務開始時間。您可以為驅動程式和執行程式這兩者指定單一映像 (spark.kubernetes.container.image),或指定不同的映像給驅動程式 (spark.kubernetes.driver.container.image) 和執行程式 (spark.kubernetes.executor.container.image)。問:自訂映像檔是否需要額外付費?
使用自訂映像檔無須付費。AWS Outposts 上的 Amazon EMR
問:什麼是 AWS Outposts?
AWS Outposts 可將原生 AWS 服務,基礎設施和操作模型用於幾乎所有的資料中心、主機代管空間或內部部署設施。您可以使用 Outposts 上的 EMR,部署、管理和擴展 EMR 叢集內部部署,就像在雲端所做的一樣。
問:我何時該使用 Outposts 上的 EMR?
如果您有現有的內部部署 Apache Hadoop 部署,並在努力滿足巔峰使用時段的容量需求,您可以使用 Outposts 上的 EMR 來提升處理能力,而無需將資料轉移到雲端。Outposts 上的 EMR 使您能在幾分鐘內啟動新的 EMR 叢集內部部署,並連接到內部部署 HDFS 儲存中的現有資料集,以滿足此需求並維護 SLA。
若您需要處理出於管控、合規或其他原因而需要保留在內部部署的資料,可以使用 Outposts 上的 EMR 在靠近資料的位置部署和執行內部部署的 Apache Hadoop 和 Apache Spark 之類的應用程式。這減少了將大量內部部署資料移至雲端的需求,從而減少了處理資料所需的總時間。
如果您正在將資料和 Apache Hadoop 工作負載遷移到雲端,並且想要在遷移完成之前開始使用 EMR,則可以使用 AWS Outposts 在連接到現有內部部署 HDFS 儲存啟動 EMR 叢集。然後,您可以將資料逐漸移轉到 Amazon S3,作為向雲端架構發展的一部分。
問:Outposts 上的 EMR 支援哪些 EMR 版本?
最低支援的 Amazon EMR 版本為 5.28.0。
問:使用 Outposts 時,可以使用哪些 EMR 應用程式?
支援 EMR 版本 5.28.0 與更新版本中的所有應用程式。請參閱版本備註以了解 EMR 應用程式的完整清單。
問:Outposts 上的 EMR 不支援哪些 EMR 功能?
- EC2 Spot 執行個體在 AWS Outposts 中無法使用。建立叢集時,您必須選擇 EC2 隨需執行個體。
- AWS Outposts 中提供了部分 EC2 執行個體類型。請參閱文件,以了解 EMR 和 Outposts 支援的執行個體類型的清單。
- 新增 Amazon EBS 磁碟區到執行個體時,AWS Outposts 僅支援一般用途 SSD (GP2) 儲存類型。
問:我可以使用 Outpost 中的 EMR 叢集,從現有的內部部署 Apache Hadoop 叢集讀取資料嗎?
在 Outpost 中的 EMR 上執行的工作負載,可以在現有的 HDFS 儲存中讀取和寫入資料,讓您能輕鬆地整合現有的內部部署 Apache Hadoop 部署。這使您能使用 EMR 來提升資料處理需求,而無需遷移資料。
問:我可以選擇儲存資料的位置嗎?
在 Outpost 裡啟動 EMR 叢集時,所有的運算與資料儲存資源都會部署到您的 Outpost。本機寫入 EMR 叢集的資料,儲存在 Outpost 的本機 EBS 磁碟區上。Apache Hive、Apache Spark、Presto 和其他 EMR 應用程式等工具皆能設定為在 Outpost 本機將資料寫入外部檔案系統 (例如現有的 HDFS 安裝) 或 Amazon S3。透過在 Outposts 上使用 EMR,您具有將資料儲存在 Amazon S3 中或本機儲存在 Outpost 的完整控制權。
問:是否有任何 EMR 功能需上傳資料至 S3?
在 Outpost 中啟動 EMR 叢集時,您具有啟用日誌紀錄選項。啟用日誌紀錄時,叢集日誌會上傳到您指定的 S3 儲存貯體。這些日誌在叢集終止後,用來簡化偵錯叢集。停用時不會上傳日誌到 S3。
問:如果 Outpost 容量不足,會發生什麼事?
在 Outpost 啟動叢集時,EMR 會試圖啟動您請求的 EC2 隨需執行個體數量和類型。Outpost 中若沒有可用的容量,EMR 將會收到容量不足通知。EMR 會重試一段時間,如果沒有可用的容量,叢集啟動就會失敗。調整叢集大小時也適用一樣的流程。如果 Outpost 的容量不足以滿足要求的執行個體類型,EMR 就無法縱向擴展叢集。您可以輕易地設定 Amazon CloudWatch 提醒,監控 Outposts 的容量使用率,並在執行個體容量低於所需閾值時接收提醒。
問,如果 Outpost 和 AWS 之間的網路連線中斷,會發生什麼事?
如果 Outpost 與 AWS 區域之間的網路連線中斷,Outposts 中的叢集會繼續執行,但直到連線恢復為止,會出現您無法採取的行動。直到連線恢復之前,您無法建立新叢集,或在現有叢集上採取新動作。如果執行個體發生故障,執行個體不會被自動替換。還有,各種動作 (例如新增步驟以執行叢集、檢查步驟執行狀態,與傳送 CloudWatch 指標與活動) 都會延遲到連線恢復為止。
我們建議您在 Outpost 與 AWS 區域之間,提供可靠與高可用性的網路連線。假如 Outpost 與其 AWS 區域之間的連線中斷超過幾小時,具有終止保護的叢集仍會值續執行,停用終止保護的叢集可能會終止執行。若網路連線會受到例行維護影響,建議您主動啟用終止保護。
使用 EBS 磁碟區
問:我現在可以做到哪些之前無法做到的事情?
大部分 EC2 執行個體都有固定的儲存容量連接到執行個體,稱為「執行個體儲存體」。您現在可以將 EBS 磁碟區新增到 Amazon EMR 叢集中的執行個體,以便自訂執行個體上的儲存。這個功能也可讓您在僅限 EBS 執行個體系列 (如 M4 和 C4) 上執行 Amazon EMR 叢集。
問:將 EBS 磁碟區新增到 Amazon EMR 上執行的執行個體有哪些好處?
在下列情況中,您能夠受益於將 EBS 磁碟區新增到執行個體:
- 您的處理要求是需要執行個體目前所提供的大量 HDFS (或本機) 儲存。透過支援 EBS 磁碟區,您能夠按執行個體提供的運算容量來自訂執行個體上的儲存容量。優化執行個體上的儲存可讓您節省成本。
- 您在上一代執行個體系列 (如 M1 和 M2 系列) 上執行並希望移至最新一代執行個體系列,但是受限於下一代執行個體類型上每個節點可用的儲存。現在您可以使用任何新一代的執行個體類型,並新增 EBS 磁碟區來優化儲存。內部基準顯示從上一代執行個體系列 (M1 或 M2) 移到新一代執行個體系列 (M4、C4 和 R3),可以節省成本和提升效能。Amazon EMR 團隊建議執行您的應用程式以獲得正確的結論。
- 您想要使用或遷移到新一下僅限 EBS 的 M4 和 C4 系列。
問:叢集終止之後,我的資料仍然會保存在 EBS 磁碟區上嗎?
目前,Amazon EMR 會在叢集終止之後刪除磁碟區。如果您想要持久儲存資料而不受限於叢集的生命週期,請考慮使用 Amazon S3 做為資料存放區。
問:可以將哪種類型的 EBS 磁碟區連接到執行個體?
Amazon EMR 可讓您使用不同的 EBS 磁碟區類型:一般用途 SSD (GP2)、磁帶和佈建 IOPS (SSD)。
問:終止叢集之後,EBS 磁碟區會發生什麼事?
EMR 叢集終止後,Amazon EMR 會刪除磁碟區。
問:EBS 可以與已經有執行個體儲存體的執行個體搭配使用嗎?
是,您可以將 EBS 磁碟區新增到有執行個體儲存體的執行個體。
問:是否可將 EBS 磁碟區連接到執行中叢集?
否,目前您只能在啟動叢集時連接 EBS 磁碟區。
問:我可以從叢集拍攝磁碟區的快照嗎?
EBS API 可讓您拍攝叢集的快照。然而,Amazon EMR 目前不允許您從快照還原。
問:我可以使用加密的 EBS 磁碟區嗎?
您可以使用 AWS KMS 作為主要供應商,加密 EBS 根裝置與儲存磁碟區。如需詳細資訊,請參閱本機磁碟加密。
問:從執行中叢集移除連接的磁碟區時會發生什麼事?
從執行中叢集移除連接的磁碟區會被視為節點故障。Amazon EMR 將會使用相同的節點和 EBS 磁碟區來取代它們。
EMR 工作負載
問:什麼是 Apache Spark?
Apache SparkTM 是用於大數據工作負載的開放原始碼、分散式處理系統。它採用記憶體內快取並優化查詢執行,以對任何規模的資料進行快速地分析查詢。Amazon EMR 是在雲端部署 Apache Spark 的最佳位置,因為它將商業 Spark 分發的整合和測試精確性和雲端的規模、簡便性和經濟效益結合在一起。您可以在最短的時間內啟動 Spark 叢集,無須進行節點佈建、叢集設定、Spark 組態或叢集調校。EMR 採用 Amazon EMR runtime for Apache Spark,這是適用於 Apache Spark 的效能最佳化執行時間環境,預設會在 Amazon EMR 叢集上啟用。與沒有 EMR 執行時間的叢集相比,Amazon EMR runtime for Apache Spark 速度快 3 倍以上,且與標準 Apache Spark 具有 100% API 相容性。進一步了解 Spark 和 Amazon EMR 上的 Spark。
問:什麼是 Presto?
Presto 是全新設計的開放原始碼分散式 SQL 查詢引擎,可對任何規模的資料進行快速的分析查詢。您可以使用 Amazon EMR 在最短的時間內啟動 Presto 叢集,無須進行節點佈建、叢集設定、Presto 組態或叢集調校。EMR 可讓您在最短的時間內佈建一個、數百個或數千個運算執行個體。Presto 擁有兩個社群專案 – PrestoDB 和 PrestoSQL。Amazon EMR 支援這兩種專案。進一步了解 Presto 和 Presto on Amazon EMR。
使用 Hive
問:什麼是 Apache Hive?
Hive 是在 Hadoop 上執行的一種開放原始碼資料倉儲和分析套件。Hive 由 SQL 為基礎的語言 Hive QL 操作,讓使用者能建構、摘要和查詢 Amazon S3 中儲存的資料來源。Hive QL 的功能超過標準 SQL,新增 map/reduce 函數的第一級支援及複雜且可擴展的使用者定義資料類型,如 JSON 與 Thrift。這個功能讓您能夠處理複雜甚至非結構化的資料來源,例如,文字文件和日誌檔案。Hive 允許透過以 Java 編寫的使用者定義函數及透過 Amazon S3 中的儲存進行部署,以執行使用者擴展。您可以在這裡進一步了解 Apache Hive。
問:使用 Amazon EMR 上執行的 Hive 可以執行哪些操作?
使用 Hive 搭配 Amazon EMR 時,您可以利用類似 SQL 的熟悉語言和 Amazon EMR 中易於使用的工具,實作複雜的資料處理應用程式。透過 Amazon EMR,您可以將 Hive 應用程式轉換為可靠的資料倉儲以執行任務,如資料分析、監控和商業智慧任務。
問:Hive 與傳統的 RDBMS 系統有何不同?
傳統的 RDBMS 系統提供交易語意和 ACID 屬性。這些系統還允許對表格進行索引和快取,因此可以非常快速地擷取少量資料。這種系統可快速更新少量資料,並強制執行參考完整性限制。通常在單一大型機器上執行,且不支援在表格上執行 map 和 reduce 函數,通常也不支援對複雜的使用者定義資料類型執行操作。
反之,Hive 使用 MapReduce 執行類似 SQL 的查詢。因此,它在機器叢集上執行時,針對整個表格執行的掃描進行了優化,能夠處理數量龐大的資料。Hive 提供分區表,如果執行的查詢適合掃描表格的分區,就不會掃描整個表格。
傳統 RDMS 系統比較適合要求交易語意和參考完整性,以及時常執行少量更新的情況。Hive 比較適合離線報告、轉換和分析大型資料集;例如,對大型網站或網站集合執行點擊流分析。
其中一種常見的做法是將資料從 RDBMS 系統匯出至 Amazon S3,在其中使用執行 Hive 的 Amazon EMR 叢集執行離線分析。
問:如何開始使用在 Amazon EMR 上執行的 Hive?
最好的入門方法就是參閱這裡的書面文件。
問:在 Hive 中是否有專為 Amazon EMR 設計的新功能?
是。請參閱文件以取得更進一步的詳細資訊:
- 您可以啟動具有多個主節點的 EMR 叢集,以支援 Apache Hive 的高度可用性。如果主要主節點故障或 Resource Manager 或 Name Node 等關鍵程序中斷,Amazon EMR 會自動容錯移轉至備用主節點。意指您可以不間斷地在 EMR 叢集上執行 Apache Hive。
- Amazon EMR 允許您定義 Apache Hive 叢集的 EMR 受管擴展,以協助最佳化資源用量。借助 EMR 受管擴展:您可以自動調整叢集大小,以盡可能低的成本獲得最佳效能。透過 EMR 受管擴展,您可以為叢集指定最小和最大運算限制,Amazon EMR 會自動調整叢集的大小,以獲得最佳效能和資源使用率。EMR 受管擴展會不斷地對與叢集上執行的工作負載關聯的關鍵指標進行採樣。
- Amazon EMR 6.0.0 新增支援 Hive LLAP,平均效能比 EMR 5.29 提升了 2 倍。您可以在這裡進一步了解更多資訊。
- Amazon EMR 還支援效能飛快的複雜 Apache Hive 查詢。EMR 依預設使用 Apache Tez,其速度比 Apache MapReduce 還要快得多。Apache MapReduce 使用多個階段,所以一個複雜的 Apache Hive 查詢會被係分為四或五個任務。Apache Tez 專為更加複雜的查詢而生,因此 Apache Tez 上的相同任務會以一個任務執行,使其比 Apache MapReduce 還要快得多。
- 透過 Amazon EMR,您可以選擇將中繼存放區保留為本機或將其外部化。EMR 提供與 AWS Glue Data Catalog、Amazon Aurora、Amazon RDS 以及 AWS Lake Formation 的整合。Amazon EMR 可以直接從 Glue 或 Lake Formation 提取資訊以填入中繼存放區。
- 您能夠從 Amazon S3 載入表格分區。在過去,若要匯入分區表,您需要單獨更改表格中每個個別分區的表格陳述式。Amazon EMR 現在包含適用於 Hive 語言的新陳述式類型:"alter table recover partitions." 此陳述式讓您能夠輕鬆地將表格同時匯入到多個叢集中,而不必保留共用的中繼資料存放區。使用此功能時,可從外部程序存放資料的表格 (例如,日誌檔案) 進行讀取。
- 您可以直接將資料寫入 Amazon S3。將資料寫入 Amazon S3 中的表格時,Amazon EMR 中安裝的 Hive 版本不會使用暫存檔,而是直接寫入 Amazon S3。這樣可大幅提高效能,但從 Hive 的角度而言,代表 HDFS 和 S3 的操作方式不同。如果表格位於 Amazon S3 中,則無法在相同陳述式內對同一個表格進行讀取和寫入。如果要更新 S3 中的表格,要在叢集的本機 HDFS 檔案系統中建立臨時表,將結果寫入該表格,然後將它們複製到 Amazon S3。
- 您可以存取 Amazon S3 中的資源。Amazon EMR 中安裝的 Hive 版本允許您直接從 Hive 指令碼 (例如,add jar s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar) 內參考資源,例如,自訂 map 和 reduce 操作的指令碼或 Amazon S3 中的其他程式庫。
問:支援哪些類型的 Hive 叢集?
Hive 支援兩種叢集類型:互動式和批次處理。在互動式模式下,客戶可以直接在主節點上以互動方式啟動叢集和執行 Hive 指令碼。一般而言,此模式用來執行臨機操作資料分析和應用程式開發。在批次處理模式下,Hive 指令碼儲存在 Amazon S3 中,並在啟動叢集時參考。一般而言,批次處理模式用於可重複的執行工作,例如產生報告。
問:如何啟動 Hive 叢集?
批次處理和互動式叢集都可從 AWS 管理主控台、EMR 命令列用戶端或 API 啟動。請參閱版本指南中的 Hive 部分,了解啟動 Hive 叢集的更多詳細資訊。
問:何時應使用 Hive?何時應使用 PIG?
Hive 和 PIG 都提供高等級的資料處理語言,支援在大型資料集操作的複雜資料類型。Hive 語言是 SQL 的變體,因此更適合已熟悉 SQL 和關聯式資料庫的使用者使用。Hive 支援分區表,它們允許 Amazon EMR 叢集只提取與執行的查詢相關的表格分區,而不是執行整個表格掃描。PIG 和 Hive 都有查詢計劃優化功能。PIG 能在整個指令碼範圍內進行優化,而 Hive 查詢僅在陳述式層級進行優化。
選擇使用 Hive 或 PIG 最終還是取決於應用程式網域的確切要求及實作者和查詢撰寫者的偏好。
問:Amazon EMR 支援哪些版本的 Hive?
請參閱文件,以了解 Amazon EMR 上的 Hive 最新版本。
問:是否可以同時從兩個叢集寫入表格?
否。Hive 不支援同時寫入表格。您應避免同時寫入同一個表格,或在寫入表格時從表格讀取。Hive 在同時讀寫或同時寫入時會出現不具決定性的行為。
問:是否可以在叢集之間共用資料?
是。您可以在指令碼上撰寫 ‘create external table’ 陳述式,透過 Hive 指令碼讀取 Amazon S3 中的資料。您存取的每個外部資源都需要一個 create table 陳述式。
問:我應該執行一個大型叢集並在多個使用者之間共用,還是執行多個較小的叢集?
Amazon EMR 提供一個獨特的功能,讓您能夠同時使用兩種方法。一方面,大型叢集對於處理一般的批次處理工作負載可能較為有效。另一方面,如果您需要執行隨時間變化的臨機操作查詢或工作負載,可以選擇建立多個獨立的叢集,調校這些叢集使其適合共用 Amazon S3 中所儲存資料來源的特定任務。 您可以使用 EMR 受管擴展來最佳化資源用量。
問:是否可以存取本機檔案系統中的指令碼或 Jar 資源?
否。您必須將指令碼或 Jar 上傳到 Amazon S3 或叢集的主節點,才能進行參考。要上傳到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。
問:是否可執行一個持久性叢集以執行多個 Hive 查詢?
是。在手動終止模式下執行的叢集不會在 Hive 步驟間終止。要降低資料遺失的風險,我們建議定期保留您在 Amazon S3 中的所有重要資料。最好定期將工作傳輸到新的叢集,以測試從主節點故障進行恢復的程序。
問:多個使用者是否可在同一個來源資料上執行 Hive 步驟?
是。多個使用者在個別叢集上執行的 Hive 指令碼可能包含 create external table 陳述式,以同時匯入位於 Amazon S3 中的來源資料。
問:多個使用者是否可在同一個叢集中執行查詢?
是。在批次處理模式下,步驟會按順序執行。多個使用者可以將 Hive 步驟新增到同一個叢集,不過,步驟將按順序執行。在互動模式下,多個使用者可以登入到同一個叢集,並且同時執行 Hive 陳述式。
問:是否可在多個 AWS 使用者之間共用資料?
是。可以使用這裡描述的標準 Amazon S3 共享機制共享資料。
問:Hive 是否支援從 JDBC 存取?
是。Hive 提供 JDBC 磁碟機,可用於以程式設計方式執行 Hive 陳述式。要在叢集中啟動 JDBC 服務,您需要在 Amazon EMR 命令列用戶端中傳遞選擇性參數。此外,還需要建立一個 SSH 通道,因為安全群組不允許外部連線。
問:在 EMR AMI 中更新套件的程序是什麼?
第一次開機時,適用於 EMR 的 Amazon Linux AMI 會連接 Amazon Linux AMI yum 儲存庫以安裝安全性更新。您可以在使用自訂 AMI 時停用此功能,但基於安全理由,我們不建議這樣做。
問:是否可以在 EMR 叢集中更新自己的套件?
是。您可以使用引導操作對叢集中的套件安裝更新。
問:是否可以使用 Hive 處理 DynamoDB 資料?
是。只需根據您的 DynamoDB 表定義外部 Hive 表即可。然後,可以使用 Hive 分析 DynamoDB 中儲存的資料,並將結果載回 DynamoDB 或在 Amazon S3 中存檔。如需詳細資訊,請參閱開發人員指南。
使用 Hudi
問:什麼是 Apache Hudi?
Apache Hudi 是一個開放原始碼資料管理框架,可用於簡化增量資料處理和資料管道開發。Apache Hudi 可讓您在 Amazon S3 中以記錄層級管理資料簡化變更資料擷取 (CDC) 和串流資料擷取,並提供框架以處理需要記錄層級更新和刪除的資料隱私權使用案例。由 Apache Hudi 管理的資料集儲存在使用開放式儲存格式的 S3 中,與 Presto、Apache Hive、Apache Spark 和 AWS Glue Data Catalog 整合後,可讓您近乎即時存取地使用熟悉工具更新資料。
問:何時應該使用 Apache Hudi?
Apache Hudi 可協助您處理需要在 S3 上進行記錄級資料管理的使用案例。以下五個常見使用案例可從這些功能中獲益:
- 遵守要求組織移除使用者資料的資料隱私法,或在使用者選擇變更其資料使用方式的偏好設定時更新使用者偏好設定。Apache Hudi 讓您能夠使用 Apache Parquet 和 Apache Avro 等開放原始碼資料格式,對儲存在 S3 中的資料執行記錄級插入、更新和刪除操作。
- 取用即時資料串流,並套用來自企業系統的變更資料擷取日誌。許多組織要求可在 Amazon S3 使用企業資料倉儲 (EDW) 以及營運資料存放區 (ODS) 資料,以便 Apache Hive 和 Presto 等 SQL 引擎可存取資料以進行資料處理和分析。Apache Hudi 簡化套用變更日誌,以讓使用者以近乎即時的速度存取資料。
- 恢復遲來的或不正確的資料。遲來的或不正確的資料要求重述資料,並更新現有的資料集,以合併新的或更新的紀錄。Apache Hudi 允許您將記錄「更新插入」到現有資料集中,依靠架構依據資料集中的紀錄狀態,來插入或更新記錄。
- 追蹤資料集的變更以及提供復原變更的能力。使用 Apache Hudi,將資料集的每個變更作為遞交進行追蹤,並可以輕鬆復原,讓您能找到資料集的特定變更並「復原」它們。
- 簡化 S3 上的檔案管理。為了確保有效率地調整資料檔案大小,客戶必須建立自訂解決方案,監控並將許多小型檔案重寫為更少的大型檔案。藉助 Apache Hudi,可以管理 S3 上的資料檔案,使用者只需設定最佳檔案大小即可儲存其資料,Hudi 將合併檔案以建立有效大小的檔案。
- 將增量寫入目標 Hudi 資料集。Hudi 資料集可以增量提取,意即您從特定的即時時間開始,可得到所有也是僅有的已更新的與新的列。
問:如何建立 Apache Hudi 資料集?
使用 Apache Spark 建立 Apache Hudi 資料集。建立資料集就跟編寫 Apache Spark DataFrame 一樣容易。Apache Hudi 的中繼資料可以選擇儲存在 AWS Glue Data Catalog 或是 Hive 中繼資料,以簡化資料發現並與 Apache Hive 和 Presto 整合。
問:Apache Hudi 如何管理資料集?
使用 Apache Hudi 建立資料集時,您可以選擇資料集應針對哪種類型的資料存取模式進行最佳化。對於大量讀取的使用案例,您可以選擇「寫入時複製」資料管理政策,以針對頻繁讀取的資料集進行最佳化。此政策使用單欄式儲存格式來整理資料,並在寫入更新時合併現有資料和新的更新。針對大量寫入的工作負載,Apache Hudi 採用「讀取時合併」資料管理策略,該策略使用單欄式和資料列儲存格式的組合來組織資料,將更新附加到基於資料列的儲存格式檔案,同時在讀取時間執行合併,提供更新的結果。
問:如何寫入 Apache Hudi 資料集?
使用 Apache Spark 對 Apache Hudi 資料集做出變更。藉助 Apache Spark,可以使用 Spark DataSource API 對 Apache Hudi 資料集進行操作,從而讓您可以讀寫資料。包含新增的資料或更新至現有資料的 DataFrame,可以用相同的 DataSource API 進行編寫。您也可以使用 Hudi DeltaStreamer 公用程式。
問:如何讀取 Apache Hudi 資料集?
您可以使用 Apache Spark、Apache Hive、Presto、Amazon Redshift Spectrum 或 Amazon Athena 讀取資料。建立資料集時,您可以選擇在 AWS Glue Data Catalog 或 Hive 中繼資料存放區中,發佈該資料集的中繼資料。如果您選擇在中繼存放區發佈中繼資料,資料集看起來會像普通的表格,並可以使用 Apache Hive 和 Presto 查詢該表格。
問:我在使用 Apache Hudi 時,應該要注意哪些考量或限制?
如需在 Amazon EMR 上使用 Apache Hudi 時的考量和限制完整清單,請參閱我們的 Amazon EMR 文件。
問:現有資料如何與 Apache Hudi 配合使用?
若您現在要使用 Apache Hudi 來管理現有資料,則可以使用 Apache Hudi on Amazon EMR 隨附的匯入工具,輕鬆地將 Apache Parquet 資料轉換為 Apache Hudi 資料集,或者使用 Hudi DeltaStreamer 公用程式或 Apache Spark 將現有資料重新為 Apache Hudi 資料集。
使用 Impala
問:什麼是 Impala?
Impala 是 Hadoop 生態系統中的開放原始碼工具,適用於使用 SQL 語法的互動式、臨機操作查詢。它不使用 MapReduce,而是利用與傳統關聯式資料庫管理系統 (RDBMS) 中的引擎類似的大規模平行處理 (MPP) 引擎。利用此架構,您可以非常快速地查詢 HDFS 或 HBase 表中的資料,並利用 Hadoop 的功能處理不同資料類型,以及在執行時間提供結構描述。因此 Impala 適合用來進行互動式、低延遲分析。此外,Impala 使用 Hive 中繼儲存來保留有關輸入資料的資訊,包括分區名稱和資料類型。同時,Amazon EMR 上的 Impala 要求 AMI 執行 Hadoop 2.x 或更高版本。按一下這裡進一步了解 Impala。
問:使用 Amazon EMR 上執行的 Impala 可以執行哪些操作?
與在 Amazon EMR 使用 Hive 類似,在 Amazon EMR 使用 Impala,可以透過 SQL 語法實作複雜的資料處理應用程式。不過,在某些使用案例中,Impala 是為了更快的執行速度而建置的 (參閱下文)。透過 Amazon EMR,您可以將 Impala 做為可靠的資料倉儲來執行資料分析、監控和商業智慧等任務。以下是三個使用案例:
- 在長時間執行的叢集上執行臨機操作查詢時,使用 Impala 而不使用 Hive。Impala 將互動式查詢的時間縮短到幾秒之間,使其成為快速調查的最佳工具。您可以在執行批次 MapReduce 工作流程的相同叢集上執行 Impala,在長時間執行的分析叢集上將 Impala 與 Hive 和 Pig 搭配使用,或是建立專門針對 Impala 查詢調校的叢集。
- 在暫時性 Amazon EMR 叢集上執行批次處理 ETL 任務時,使用 Impala 而不使用 Hive。對於許多查詢,Impala 比 Hive 的速度更快,可以為這些工作負載提供更好的效能。與 Hive 類似,Impala 也使用 SQL,因此可以輕鬆地將查詢從 Hive 修改為 Impala。
- 將 Impala 與第三方商業智慧工具搭配使用。將用戶端 ODBC 或 JDBC 驅動程式與您的叢集連接在一起,以便將 Impala 做為強大的視覺化工具和儀表板的引擎。
您可以在 Amazon EMR 中建立批次處理和互動式 Impala 叢集。例如,您可以讓長時間執行的 Amazon EMR 叢集執行 Impala,用於臨機操作、互動式查詢,或使用暫時性的 Impala 叢集來執行快速的 ETL 工作流程。
問:Impala 與傳統的 RDBMS 有何區別?
傳統的關聯式資料庫系統具有交易語意和資料庫不可部分完成性、一致性、隔離性和耐久性 (ACID) 屬性。它們還允許對表格進行索引和快取,可以非常快速地擷取少量資料,可快速更新少量資料,並可強制執行參考完整性限制。一般而言,它們在一部大型機器上執行,並且不支援對複雜的使用者定義資料類型執行操作。Impala 使用與 RDBMS 中類似的分散式查詢系統,但會查詢儲存在 HDFS 中的資料,並使用 Hive 中繼儲存來保存有關輸入資料的資訊。與 Hive 相同,會在執行時間提供查詢的結構描述,可以更輕鬆地變更結構描述。另外,Impala 可以查詢各種複雜資料類型並執行使用者定義函數。不過,因為 Impala 在記憶體內處理資料,所以務必了解叢集的硬體限制並優化查詢以實現最佳效能。
問:Impala 與 Hive 有何區別?
Impala 使用大規模平行處理 (MPP) 引擎執行 SQL 查詢,而 Hive 使用 MapReduce 執行 SQL 查詢。Impala 少了 Hive 用於建立 MapReduce 工作的負荷,其查詢速度比 Hive 快數倍。不過,Impala 使用大量的記憶體資源,而且叢集的可用記憶體為任何查詢可使用的記憶體量設定了限制。Hive 沒有這種方式的限制,可以利用相同的硬體順利地處理更大的資料集。一般而言,您應將 Impala 用於快速、互動式查詢,而 Hive 則更適用於大型資料集的 ETL 工作負載。Impala 針對速度而建置,非常適用於臨機操作調查,但需要大量記憶體來執行耗費大量資源的查詢或處理非常大型的資料集。由於上述限制,完成度重要性優於速度的工作負載,建議使用 Hive。按一下這裡查看 Impala 和 Hive 之間的一些效能基準。
問:是否可使用 Hadoop 1?
否,Impala 需要 Hadoop 2,無法在使用執行 Hadoop 1.x 的 AMI 的叢集上執行。
問:我的 Impala 叢集應該使用哪些執行個體類型?
為了獲得最佳的 Impala 使用體驗,我們建議您的叢集使用經過記憶體優化的執行個體。不過,我們也已經說明,在使用標準執行個體類型時獲得的效能優於 Hive。我們建議閱讀 Amazon EMR Developer's Guide 的 Performance Testing and Query Optimization 部分,以針對您的資料集和查詢類型,為叢集所需的記憶體資源進行更合理的預估。壓縮類型、分區和實際查詢 (加入數、結果大小等) 在所需的記憶體中都需納入考量。您可以使用 EXPLAIN 陳述式預估 Impala 查詢所需的記憶體和其他資源。
問:如果查詢時記憶體不足,會發生什麼情況?
如果記憶體不足,查詢會失敗,而且受影響節點上安裝的 Impala 常駐程式會關閉。然後,Amazon EMR 會重新啟動該節點上的常駐程式,以便 Impala 準備執行其他查詢。節點上 HDFS 中的資料仍然可以使用,因為關閉的僅是該節點上執行的常駐程式,而非整個節點本身。對於使用 Impala 的臨機操作分析,查詢時間通常可以按秒計算;因此,如果某個查詢失敗,您可以快速發現問題,並且可以迅速接著提交新查詢。
問:Impala 是否支援使用者定義的函數?
是,Impala 支援使用者定義的函數 (UDF)。您可以用 Java 或 C++ 編寫專用於 Impala 的 UDF。另外,您可以修改為 Hive 建立的 UDF 或使用者定義的彙總函數,以便與 Impala 搭配使用。有關 Hive UDF 的資訊,請按一下這裡。
問:供 Impala 查詢的資料儲存在何處?
Impala 會查詢 HDFS 或 HBase 表中的資料。
問:是否可在叢集上同時執行 Impala 和 MapReduce?
是,您可以設定具有 Impala 和 MapReduce 的多租用戶叢集。但是,您應該確保將資源(記憶體、磁碟和 CPU)分配給在 Hadoop 2.x 上使用 YARN 的每個應用程式。分配的資源應取決於您計劃在每個應用程式上執行的任務之需求。
問:Impala 是否支援 ODBC 和 JDBC 驅動程式?
雖然可以使用 ODBC 驅動程式,但 Impala 也是適合透過 JDBC 連接的第三方工具的最佳引擎。您可以從下列位置下載和安裝 Impala 用戶端 JDBC 驅動程式:http://elasticmapreduce.s3.amazonaws.com/libs/impala/1.2.1/impala-jdbc-1.2.1.zip。在已安裝商業智慧工具的用戶端電腦中,使用連接埠 21050 上的 SSH 或 VPN,將 JDBC 驅動程式連接到 Impala 叢集的主節點。如需詳細資訊,請參閱 打開到主節點的 SSH 通道。
使用 Pig
問:什麼是 Apache Pig?
Pig 是在 Hadoop 上執行的一種開放原始碼分析套件。Pig 由類似 SQL 的語言 Pig Latin 操作,允許使用者建構、摘要和查詢 Amazon S3 中儲存的資料來源。與 SQL 操作類似,Pig Latin 也新增 map/reduce 函數的第一級支援,及複雜且可擴展的使用者定義資料類型。這個功能讓您能夠處理複雜甚至非結構化的資料來源,例如,文字文件和日誌檔案。Pig 允許透過以 Java 編寫的使用者定義函數及透過 Amazon S3 中的儲存進行部署,以執行使用者擴展。
問:使用 Amazon EMR 上執行的 Pig 可以執行哪些操作?
使用 Pig 搭配 Amazon EMR 時,您可以利用類似 SQL 的熟悉語言和 Amazon EMR 中易於使用的工具,實作複雜的資料處理應用程式。透過 Amazon EMR,您可以將 Pig 應用程式轉換為可靠的資料倉儲以執行任務,如資料分析、監控和商業智慧任務。
問:如何開始使用在 Amazon EMR 上執行的 Pig?
最好的入門方法就是參閱這裡的書面文件。
問:在 Pig 中是否有專為 Amazon EMR 設計的新功能?
是。與 Amazon EMR 搭配使用時,有三項新功能可讓 Pig 變得更加強大,包括:
a/ 存取多個檔案系統。預設情況下,無論是用於輸入、輸出和暫存資料的 HDFS 存放還是 S3 儲存貯體,Pig 任務只能存取一個遠端檔案系統。EMR 對 Pig 進行了擴展,因此任何任務都能根據需要存取任意數量的檔案系統。這樣做的好處是,任務內的暫時資料將一直儲存在本機 HDFS 中,能夠提升效能。
b/ 從 S3 載入資源。EMR 對 Pig 進行了擴展,因此自訂的 JAR 和指令碼可以來自 S3 檔案系統,例如 "REGISTER s3:///my-bucket/piggybank.jar"
c/ 更多用於字串和日期時間處理的 Piggybank 函數。
問:支援哪些類型的 Pig 叢集?
Pig 支援兩種叢集類型:互動式和批次處理。在互動式模式下,客戶可以直接在主節點上以互動方式啟動叢集和執行 Pig 指令碼。一般而言,此模式用來執行臨機操作資料分析和應用程式開發。在批次處理模式下,Pig 指令碼儲存在 Amazon S3 中,在啟動叢集時參考。一般而言,批次處理模式用於可重複的執行工作,例如產生報告。
問:如何啟動 Pig 叢集?
批次處理和互動式叢集都可從 AWS 管理主控台、EMR 命令列用戶端或 API 啟動。
問:Amazon EMR 支援哪些版本的 Pig?
Amazon EMR 支援 Pig 的多個版本。
問:是否可從兩個叢集同時寫入 S3 儲存貯體?
是,可從兩個並行叢集寫入同一個儲存貯體。
問:是否可在叢集之間共用 S3 中的輸入資料?
是,可從兩個並行叢集讀取 S3 中的相同資料。
問:是否可在多個 AWS 使用者之間共用資料?
是。可以使用這裡 http://docs.amazonwebservices.com/AmazonS3/latest/index.html?S3_ACLs.html 描述的標準 Amazon S3 共用機制共用資料
問:我應該執行一個大型叢集並在多個使用者之間共用,還是執行多個較小的叢集?
Amazon EMR 提供一個獨特的功能,讓您能夠同時使用兩種方法。一方面,大型叢集對於處理一般的批次處理工作負載可能較為有效。另一方面,如果您需要執行隨時間變化的臨機操作查詢或工作負載,可以選擇建立多個獨立的叢集,調校這些叢集使其適合共用 Amazon S3 中所儲存資料來源的特定任務。
問:是否可以存取本機檔案系統中的指令碼或 Jar 資源?
否。您必須將指令碼或 Jar 上傳到 Amazon S3 或叢集的主節點,才能進行參考。要上傳到 Amazon S3,您可以使用 s3cmd、jets3t 或 S3Organizer 等工具。
問:是否可執行一個持久性叢集以執行多個 Pig 查詢?
是。在手動終止模式下執行的叢集不會在 Pig 步驟間終止。要降低資料遺失的風險,我們建議您定期保留 Amazon S3 中的所有重要資料。最好定期將工作傳輸到新的叢集,以測試從主節點故障進行恢復的程序。
問:Pig 是否支援從 JDBC 存取?
否,Pig 不支援透過 JDBC 存取。
使用 HBase
問:什麼是 Apache HBase?
HBase 是一種仿效 Google BigTable 的開放原始碼、非關聯式、分散式資料庫。Apache HBase 是 Apache 軟體基金會 Hadoop 專案開發的一部分,在 Hadoop 分散式檔案系統 (HDFS) 上執行,為 Hadoop 提供與 BigTable 類似的功能。HBase 為您提供一種可儲存大量疏鬆資料的容錯、高效率方法,此方法採用以欄為基礎的壓縮和儲存方式。此外,因為資料儲存在記憶體內而非磁碟上,所以還可以透過 HBase 快速查詢資料。HBase 在連續寫入操作方面已經過優化,且批次插入、更新和刪除等操作的效率很高。HBase 可與 Hadoop 無縫搭配,不但共享檔案系統,且做為 Hadoop 工作的直接輸入和輸出。HBase 也與 Apache Hive 整合,能夠對 HBase 資料表進行類似於 SQL 的查詢、和採用 Hive 的資料表合併,並且支援 Java 資料庫連接能力 (JDBC)。您可以在這裡進一步了解 Apache HBase。
問:在 HBase 中是否有專為 Amazon EMR 設計的新功能?
透過 Amazon EMR,您可以使用 Amazon S3 上的 HBase,將叢集的 HBase 根目錄和中繼資料直接儲存到 Amazon S3,並建立僅供讀取複本和快照。若要進一步了解,請參閱我們的文件。
問:Amazon EMR 支援哪些版本的 HBase?
您可以在這裡查看 Amazon EMR 支援的最新 HBase 版本。
Kinesis 連接器
問:新增到 Kinesis 的 EMR 連接器支援什麼功能?
該連接器支援 EMR 直接從 Kinesis 串流讀取和查詢資料。現在,您可以使用現有的 Hadoop 生態系統工具 (如 Hive、Pig、MapReduce、Hadoop Streaming 和 Cascading) 來執行 Kinesis 串流的批次處理。
問:新增到 Kinesis 的 EMR 連接器能支援我完成哪些之前無法完成的任務?
讀取和處理來自 Kinesis 串流的資料需要編寫、部署和維護獨立的串流處理應用程式。這些需要耗費大量的時間和精力。但是,使用此連接器,您只需編寫一個簡單的 Hive 或 Pig 指令碼就可以開始讀取和分析 Kinesis 串流。這表示您可以使用 SQL 來分析 Kinesis 串流! 當然,也可以使用其他 Hadoop 生態系統工具。您不必開發或維護一組新的處理應用程式。
問:此功能對哪些人有用?
這個整合對以下各類的使用者有用:
- 有興趣使用此廣泛的 Hadoop 生態系統工具來分析 Kinesis 串流的 Hadoop 使用者。
- 正在尋求簡單方法來增強效能和正在執行 Kinesis 資料的串流處理和 ETL 的 Kinesis 使用者。
- 希望使用熟悉的工具,如 SQL (透過 Hive) 或指令碼撰寫語言,如 Pig,對 Kinesis 串流中的資料執行臨機操作分析的商業分析師和 IT 專業人員。
問:這種整合有哪些使用案例?
以下為此整合支援的代表性使用案例:
- 串流處理日誌分析:您可以按區域、瀏覽器和存取網域分析串流處理 Web 日誌,以便每隔幾分鐘產生一個前 10 大錯誤類型清單。
- 複雜資料處理工作流程:您可以將儲存在 S3、Dynamo DB 表和 HDFS 中的資料加入 Kinesis 串流中。您可以編寫結合 Kinesis 點擊流資料的查詢,並將廣告活動資訊儲存在 DynamoDB 表中,以找出特定網站上顯示的最有效廣告類別。
- 臨機操作查詢:您可以定期將來自 Kinesis 的資料載入 HDFS 中並做為本機 Impala 表使用,用於快速的互動式分析查詢。
問:需要使用哪個 EMR AMI 版本才能使用此連接器?
您需要使用 EMR AMI 的 3.0.4 版和更新版本。
問:此連接器是否為獨立的工具?
否,它是 Amazon Hadoop 分發的內建元件,EMR AMI 的 3.0.4 版和更新版本都提供此元件。客戶只需使用 3.0.4 版或更新版本的 AMI 快速建置一個叢集,就可以開始使用此功能。
問:允許 EMR 從 Kinesis 串流讀取資料需要哪種資料格式?
EMR Kinesis 整合不指定資料格式。您可以讀取任何格式的資料。個別 Kinesis 記錄會以標準記錄的形式顯示給 Hadoop,該記錄可使用任何 Hadoop MapReduce 架構讀取。Hive、Pig 和 Cascading 等個別架構已內建在協助序列化和還原序列化的元件中,因此開發人員能夠輕鬆查詢多種格式的資料,無須實作自訂程式碼。例如,Hive 使用者可透過在定義表格時指定適當的 Hive SerDe,從 JSON 檔案、XML 檔案和 SEQ 檔案讀取資料。Pig 擁有類似的元件 Loadfunc/Evalfunc,而 Cascading 的類似元件為 Tap。Hadoop 使用者可以利用此廣泛的 Hadoop 配接器生態系統,無須編寫格式特定程式碼。您還可以實作自訂還原序列化格式,讀取其中任何一個工具的網域特定資料。
問:在 EMR 中,如何使用 Hive 來分析 Kinesis 串流?
建立一個參考 Kinesis 串流的表格。然後,您可以像分析 Hive 中的其他任何表格一樣分析這個表格。請參閱我們的教學頁面了解更多詳細資訊。
問:使用 Hive 時,如何建立結合 Kinesis 串流資料和其他資料來源的查詢?
首先,建立一個參考 Kinesis 串流的表格。Hive 表格建立完成後,您可以將它與對應到其他資料來源 (如 Amazon S3、Amazon Dynamo DB 和 HDFS) 的表格結合起來。這會有效地將來自 Kinesis 串流的資料加入其他資料來源中。
問:此整合是否僅用於 Hive?
否,您可以使用 Hive、Pig、MapReduce、Hadoop 串流以及 Cascading。
問:如何設定要在 Kinesis 串流上執行的已排定任務?
EMR Kinesis 輸入連接器提供各種功能,協助您設定和管理傳統排程引擎 (如 Cron) 中的已排定週期性任務。例如,您可以開發一個每 N 分鐘執行一次的 Hive 指令碼。在任務的設定參數中,您可以為任務指定一個邏輯名稱。邏輯名稱是一個標籤,會通知 EMR Kinesis 輸入連接器,該任務的個別執行個體是同一個週期性排程的成員。邏輯名稱允許程序利用反覆項目,以下會加以說明。
因為 MapReduce 是批次處理架構,所以要使用 EMR 來分析 Kinesis 串流,連續的串流就需分批進行處理。每個批次稱為一個反覆項目。每個反覆項目會指派一個以 0 開頭的號碼。每個反覆項目的邊界由起始序號和結尾序號定義。然後 EMR 會按順序處理反覆項目。
如果一次嘗試發生故障,EMR Kinesis 輸入連接器將在邏輯名稱內重試該反覆項目 (從該反覆項目的已知起始序號開始)。此功能確保同一個反覆項目的連續嘗試與之前的嘗試具有完全相同的 Kinesis 串流輸入記錄。這可保證 Kinesis 串流的等冪 (一致性) 處理。
您可以在個別的 Hadoop 工具中,將邏輯名稱和反覆項目指定為執行時間參數。例如,在教學的 "Running queries with checkpoints" 部分,程式碼範例顯示一個排定的 Hive 查詢,為查詢指定邏輯名稱,並且在每次執行任務後增加一個反覆項目。
此外,教學中還提供一個範例 Cron 排程指令碼。
問:邏輯名稱的中繼資料和反覆項目儲存在何處?
允許 EMR Kinesis 輸入連接器在排定的週期性工作流程中使用的中繼資料儲存在 Amazon DynamoDB 中。您必須佈建一個 Amazon Dynamo DB 表,並指定其作為 Hadoop 任務的輸入參數。務必為該表設定適當的 IOPS 以啟用此整合。請參閱入門教學,了解更多有關設定 Amazon Dynamo DB 表的資訊。
問:當反覆項目處理失敗時,會出現什麼情況?
在 Kinesis 串流中,反覆項目識別碼是對應到特定邊界 (開頭和結尾序號) 的值,由使用者提供。這些邊界對應的資料會在 MapReduce 任務的對應階段載入。此階段由架構管理,並在任務失敗時自動重新執行 (預設執行三次)。如果重試失敗,您仍可以選擇從最後一次成功的資料邊界或通過的資料邊界開始重試處理。此行為透過處理期間提供的 kinesis.checkpoint.iteration.no 參數控制。請參考入門教學,了解有關如何為 Hadoop 生態系統中不同工具設定這個值的詳細資訊。
問:是否能在同一個反覆項目中執行多個查詢?
是,您可以在連續處理過程中設定 kinesis.checkpoint.iteration.no 參數,指定之前執行的反覆項目。此實作可確保同一個反覆項目的連續執行與之前的執行具有完全相同的 Kinesis 串流輸入記錄。
問:如果反覆項目中的記錄在 Kinesis 串流中到期,會出現什麼情況?
如果反覆項目的開始序號和/或結尾序號屬於已在 Kinesis 串流中到期的記錄,則 Hadoop 任務會失敗。您需要使用其他邏輯名稱來處理 Kinesis 串流的開始資料。
問:是否能將資料從 EMR 推送到 Kinesis 串流中?
不。目前,EMR Kinesis 連接器不支援將資料回寫到 Kinesis 串流中。
問:Kinesis 的 EMR Hadoop 輸入連接器是否支援連續串流處理?
Hadoop MapReduce 架構是批次處理系統。因此,不支援連續查詢。不過,有一組新興的 Hadoop 生態系統架構,例如 Twitter Storm 和 Spark 串流,可讓開發人員建置適用於連續串流處理的應用程式。Kinesis 的 Storm 連接器可在這裡的 GitHub 上取得,您還可以在這裡找到說明如何在 EMR 上設定 Spark 串流和執行連續查詢的教學。
此外,開發人員還可以利用 Kinesis 用戶端程式庫來開發即時串流處理應用程式。您可以在這裡的 Kinesis 文件中找到有關開發自訂 Kinesis 應用程式的詳細資訊。
問:是否能指定存取登入資料,以讀取在其他 AWS 帳戶中管理的 Kinesis 串流?
是。只要指定適當的帳戶存取登入資料 (擁有 Kinesis 串流的帳戶),就可以讀取來自其他 AWS 帳戶的串流。預設情況下,Kinesis 連接器會利用建立叢集時指定的存取登入資料,此資料由使用者提供。您可以設定 kinesis.accessKey 和 kinesis.secretKey 參數來覆寫這些登入資料,以便從其他 AWS 帳戶存取串流。以下範例說明如何在 Hive 和 Pig 中設定 kinesis.accessKey 和 kinesis.secretKey 參數。
Hive 程式碼範例:
...
STORED BY
'com.amazon.emr.kinesis.hive.KinesisStorageHandler'
TBLPROPERTIES(
"kinesis.accessKey"="AwsAccessKey",
"kinesis.secretKey"="AwsSecretKey",
);
Pig 程式碼範例:
…
raw_logs = LOAD 'AccessLogStream' USING com.amazon.emr.kinesis.pig.Kin
esisStreamLoader('kinesis.accessKey=AwsAccessKey', 'kinesis.secretKey=AwsSecretKey'
) AS (line:chararray);
問:是否能在一個 Kinesis 串流中執行多個平行查詢? 對效能是否有影響?
是,客戶透過為每個查詢使用單獨的邏輯名稱,可以在同一個串流中執行多個平行查詢。不過,從 Kinesis 串流內的碎片中讀取資料受到每秒 2 MB 的速率限制。因此,如果在同一串流上執行 N 個並行查詢,則每個查詢將在串流上獲得每個碎片約 (2/N) MB/秒的輸出率。這可能會降低處理速度,有些情況下,還會導致查詢失敗。
問:是否能在 EMR 中加入並分析多個 Kinesis 串流?
是,例如在 Hive 中,您可以建立兩個對應到不同 Kinesis 串流的表,並在兩個表之間建立連接。
問:EMR Kinesis 連接器是否會處理 Kinesis 擴展事件,如合併和分割事件?
是。此實作會處理分割和合併活動。Kinesis 連接器將個別 Kinesis 碎片 (Kinesis 串流內的擴展邏輯單元) 與 Hadoop MapReduce 對應任務相繫結。在反覆項目的邏輯期間內,串流內的每個唯一碎片都將產生一個確切的對應任務。如果發生碎片分割或合併事件,Kinesis 將佈建新的唯一碎片 ID。因此,MapReduce 架構會佈建更多對應任務,以便從 Kinesis 讀取內容。所有內容對使用者而言都是透明的。
問:如果我的串流中有一些「無回應」期間,會發生什麼情況?
此實作允許您設定名為 kinesis.nodata.timeout 的參數。例如,假設有一個情況,kinesis.nodata.timeout 設為 2 分鐘,同時您希望每隔 10 分鐘執行一次 Hive 查詢。此外,假設從上次反覆項目後 (10 分鐘之前),一些資料已寫入串流中。不過,目前沒有新記錄到達,也就是說,串流內是無回應的。在這種情況下,當查詢的目前反覆項目啟動時,Kinesis 連接器將發現沒有即將到達的新記錄。連接器將使該串流保持輪詢 2 分鐘,如果該時間間隔內沒有記錄到達,則停止輪詢並僅處理目前串流批次中已讀取的記錄。不過,如果新記錄在 kinesis.nodata.timeout 時間間隔用完之前到達,則連接器將等待參數 kinesis.iteration.timeout 對應的額外時間間隔。請參閱教學了解如何定義這些參數。
問:如何偵錯在每次反覆項目中持續失敗的查詢?
如果處理失敗,您可以利用在偵錯 Hadoop 任務時目前所用的相同工具。包括協助識別和存取錯誤日誌的 Amazon EMR Web 主控台。有關偵錯 EMR 任務的詳細資訊,請參閱這裡。
問:如果指定沒有存取權限的 DynamoDB 表,會發生什麼情況?
任務會失敗,任務的錯誤日誌會顯示例外狀況。
問:如果任務沒有失敗,但是 DynamoDB 的檢查點發生失敗,會發生什麼情況?
任務會失敗,任務的錯誤日誌會顯示例外狀況。
問:如何將從 Kinesis 串流到 EMR 的讀取輸送量最大化?
Kinesis 串流的輸送量會隨著所用執行個體的大小以及 Kinesis 串流中的記錄大小而增加。我們建議您在此功能使用 m1.xlarge 以及更大的執行個體來處理主節點和核心節點。
服務水準協議
問:什麼是 Amazon EMR 服務水準協議?
請參閱我們的服務水準協議。
問:Amazon EMR 服務水準協議提供什麼?
問:如果沒有達到服務承諾,會發生什麼事?
如果任一項 Amazon EMR 服務沒有達到服務承諾,您將可以收到一筆服務積分。問:如何知道自己是否符合服務抵扣的資格? 我該如何取得服務抵扣?
若要獲得服務抵扣,您需要 在 AWS Support 開立案例以提交申請。若要了解資格與索取格式,請參閱 https://aws.amazon.com/emr/sla/進一步了解 Amazon EMR 定價