AWS EMR 搭建數據處理集羣

最近boss讓去研究aws,未來公司業務可能要通過aws的一套生態進行數據處理和分析,在網上看了不少資料和文檔,也順利運行了aws的大數據集羣組件,下面自己總結了一下在部署步驟以及自己所遇到的一些問題。

AWS介紹

官方:Amazon Web Services (AWS) 是一個安全的服務平臺,提供計算能力、數據庫存儲、內容交付以及其他功能來幫助實現業務擴展和增長。

其實AWS就是一個雲服務平臺,很多之前線下本地服務器上構建的通用服務環境,都可以在雲端找到對應的AWS服務,對中小企業快速構建服務提供支撐;

AWS-EMR服務介紹

AWS的EMR服務爲雲端託管的集羣平臺,個人/企業構建的大數據集羣可以由該平臺進行管理,集羣服務可以通過配置選擇目標服務,也可以通過自定義引導方式安裝其他服務,構建集羣過程和使用過程非常方便,較早在做大數據項目時是使用移動機房N臺物理服務器進行的集羣構建,採用AMBARI+HDP的方式進行日常管理,包括操作,監控,告警等,每次安裝第三方服務時也是非常麻煩,還有重啓amb server,數據量較低,長期費用運行的情況下還是使用雲端服務較爲方便;

在引用一段官方描述:

Amazon EMR 是一個託管集羣平臺,可簡化在 AWS 上運行大數據框架 (如 Apache HadoopApache Spark ) 以處理和分析海量數據的操作。藉助這些框架和相關的開源項目 (如 Apache Hive 和 Apache Pig)。您可以處理用於分析目的的數據和商業智能工作負載。此外,您可以使用 Amazon EMR 轉換大量數據和將大量數據移入和移出其他 AWS 數據存儲和數據庫,如 Amazon Simple Storage Service (Amazon S3) 和 Amazon DynamoDB。

文檔目標

這裏通過在EMR-HADOOP集羣上處理一個CSV文本文件,對集羣操作進行宏觀瞭解;
操作大致分爲如下幾層:

  • 前期準備工作
  • 集羣構建的配置工作
  • 集羣啓動與監控

前期準備工作

HIVE外部表參考如下:

#region table
CREATE EXTERNAL TABLE IF NOT EXISTS RPT_REGION(
  REGION_ID     STRING,
  REGION_NAME   STRING,
  REGION_TYPE   INT,
  COUNTY_ID     STRING,
  CITY_ID       STRING,
  REGION_DESC   STRING,
  CREATE_TIME   STRING
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE
LOCATION '${INPUT}/data/region';

#region_event table
CREATE EXTERNAL TABLE IF NOT EXISTS RPT_REGION_EVNET(
  REIGON_ID   STRING
  RULE_ID     STRING,
  RULE_NAME   STRING,
  REGION_TYPE   INT,
  ACTIVE_TYPE   INT,
  ENABLE        INT,
  STAY_TIME     STRING,
  STORE_TYPE    STRING,
  CREATE_TIME   STRING
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE
LOCATION '${INPUT}/data/region_event';

數據處理邏輯參考如下:

INSERT OVERWRITE DIRECTORY '${OUTPUT}/' ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
SELECT a.REGION_ID,
       a.REGION_NAME, 
       COUNT(b.RULE_ID) count 
FROM 
     RPT_REGION a, RPT_REGION_EVENT b  
WHERE 
     a.REGION_ID = b.REGION_ID
GROUP BY 
     a.REGION_ID,
     a.REGION_NAME;

以上部分可以寫在一個腳本內region-hive.sql

輸入數據

集羣通過與S3進行交互讀取原始csv文件信息,事件規則數據如下:(區域信息數據文件: region.csv)

10000001,TESTREG01,5,city001,county001,20180518123400
10000002,TESTREG02,7,city001,county001,20180518123400
10000003,TESTREG01,5,city001,county002,20180518123400
10000004,TESTREG02,7,city001,county003,20180518123400

區域事件信息數據文件: region_event.csv

10000001,88000001,1,0,1,300,local_kafka,20180518123400
10000001,88000002,1,1,1,300,local_kafka,20180518123400
10000001,88000003,1,0,1,300,local_kafka,20180518123400
10000002,88000001,1,1,1,400,local_kafka,20180518123400
10000002,88000002,1,0,1,400,local_kafka,20180518123400
10000003,88000001,1,1,1,300,local_kafka,20180518123400
10000004,88000001,1,1,1,600,local_kafka,20180518123400
10000004,88000002,1,0,1,600,local_kafka,20180518123400
10000004,88000003,1,0,1,600,local_kafka,20180518123400
10000004,88000004,1,0,1,600,local_kafka,20180518123400

輸出數據

通過彙總計算,統計出10000001區域下定義的事件數量,並對計算結果進行存儲
(以上統計結果輸出到S3存儲單元內,文件進行保存)

S3資源設置

存儲桶
在S3上創建存儲桶,創建存儲桶時注意選擇與集羣創建選擇同一地理區域,測試過程全程使用寧夏區域,下圖可以看到我創建了一個region_emr_test的存儲桶(S3的實踐在做單獨的博文,這裏使用默認的權限等參數即可)

輸入輸出
在region-emr-test存儲桶內創建3個目錄,分別爲script/datainput/dataoutput/log

進入datainput目錄,創建如下子目錄:
datainput/data/rpt_region -> 區域數據目錄
datainput/data/rpt_region_event -> 區域事件數據目錄

數據上傳
將準備好的文件上傳至對應的目錄:
region-hive.sql 上傳至 region-emr-test/script目錄
region.csv 上傳至 region-emr-test/datainput/data/rpt_region目錄
region_event.csv 上傳至 region-emr-test/datainput/data/rpt_region_event目錄

登錄祕鑰

創建ssh祕鑰對,方便後續登錄集羣節點;
選擇目標區域,這裏選用了寧夏區的相關服務,EC2->網絡與安全->祕鑰對,點擊‘創建祕鑰對’

成功創建祕鑰對後,會下載一個emr-scr-ssh.pem.text的祕鑰文件,要保存好,後續再AWS CLI登錄的時候會攜帶使用作爲認證依據;

通過HIVE服務對該樣本數據進行處理,然後將結果數據通過EMRFS寫入AWS的S3對象存儲單元進行保存;

集羣構建的配置工作

目標

通過使用EMR配置模板規劃出我們預使用的集羣服務所具備的資源與數據處理流;服務人口參考如下,裏面有之前使用的臨時集羣;

集羣配置 - 步驟模式配置

基礎設置

  1. 設置S3日誌的輸出目錄,方便後續觀察日誌,這裏選擇目錄可以直接選擇S3上面已經創建的s3://region-emr-test/log/
  2. 啓動模式選擇步驟執行,可以定製數據處理步驟;
  3. 步驟類型選擇-> Hive程序,表示爲該集羣添加HIVE處理步驟,這裏也是數據的處理流程;
    通過以上設置後如圖所示:

HIVE詳細配置
HIVE的詳細配置主要涉及輸入,輸出,邏輯腳本文件

  1. 腳本S3位置 -> s3://region-emr-test/script/region-hive.sh
  2. 輸入S3位置 -> s3://region-emr-test/datainput/
  3. 輸出S3位置 -> s3://region-emr-test/dataoutput/
    自變量,主要是針對HIVE邏輯執行過程中相關變量的設置,如打開分區模型,修改鎖機制,調整相關限制等等;
    出現故障時這裏選擇繼續 - 具體問題可以通過日誌進行查看;

軟硬件配置

  1. 軟硬件配置直接使用最新發行版本即可,每個EMR發行版本對應的hadoop套裝組件版本各不相同;
  2. 硬件配置使用也同樣使用默認,m4.large在寧夏區域性價比很高,實例數量這裏採用1個主管理節點,2個核心節點,共3個;

訪問安全配置
這裏目前採用默認配置即可,定製化配置需要結合實際使用纔有意義;

通過以上配置,就完成了步驟模式的集羣配置模板創建工作,點擊‘創建集羣’,EMR即可通過該配置實例進行集羣的相關初始化操作;

待執行的步驟

集羣配置 - 集羣模式配置(停止保護)

可以查看官方文檔

網絡VPC配置

可以查看官方文檔

結果觀察

異常類日誌查看
通過任務步驟的日誌文件選項觀察stderr/stdout相關日誌

處理後的步驟狀態會轉換爲已完成

(期間出現了腳本問題,集羣會終止,這種情況下可以修正腳本問題並同步腳本至S3,並克隆一個新的集羣進行數據處理)
處理結束後可以看到S3的輸出目錄上面出現了結果文件,點擊文件,並在屬性中點擊‘選擇範圍’
可以預覽結果文件

在這過程中,自己也遇到了不少坑:

1、在aws上把集羣配置好之後,通過遠程桌面連接,一定記得要自己提前配置好自己的aws的安全組策略,不然用ssh無法連接到集羣。

2、自己創建的aws keypair祕鑰一定記得下載下來,導入到遠程連接工具,不然也是連接不上emr集羣

3、本地使用aws cli連接emr時需要將自己安全賬戶的accessKey和accessSecret下載下來,通過aws configurem命令配置好

4、這裏記得用完立馬釋放資源,不然使用aws免費套餐的時候會收取額外費用,因爲自己第二天查看billing的時候,白白多了10多沒到,用完忘了釋放資源了,悲催

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章