AWS的集成數據管道磚:建築ETL管道與Apache火花
2017年1月23日 在公司博客上
這是一個一係列的博客將磚與常用的軟件包。看到末尾的“下一步”一節閱讀其他係列,其中包括教程AWSλ,運動,氣流和更多。
磚是一個完全的管理Apache火花在雲中數據平台,建立實時數據探索和部署生產工作容易數據工程師,Beplay体育安卓版本數據科學家,或任何有興趣使用火花數據處理。
AWS數據管道是一個web服務,它幫助可靠過程和不同AWS之間移動數據計算和存儲服務指定的時間間隔。AWS數據管道幫助用戶輕鬆地創建複雜容錯數據處理工作負載,可重複的和高可用性。
磚是我們用戶的本地部署到AWS VPC,與AWS生態係統中的每個工具兼容。在這個博客中,我將演示如何構建一個ETL管道使用磚和AWS的數據管道。
如何使用數據管道磚嗎
的磚REST API使編程訪問磚而不是通過Web UI。它可以自動創建和運行工作,productionalize工作流,等等。它還允許我們集成數據管道磚,通過基於事件觸發一個動作在其他AWS服務。
使用AWS數據管道,您可以創建一個管道通過定義:
“數據源”包含您的數據。以確保數據可用執行一個活動前,AWS數據管道允許您選擇創建數據可用性檢查先決條件。這些檢查將反複嚐試驗證數據可用性和將阻止任何相關活動執行,直到成功的先決條件。
“活動”或業務邏輯推出磚等工作。一個可以使用AWS數據管道對象ShellCommandActivity
Linux調用curl命令觸發一個REST API調用磚。
您的業務邏輯執行的“時間表”。在安排的情況下開始時間在過去,數據管道回填工作。它還允許您最大化效率的資源通過支持不同的資源和相關活動的安排時間。例如通過重用相同的資源如果調度時間許可。
下麵是一個例子,建立一個數據管道處理日誌文件定期使用磚。AWS數據管道用於編排這管道通過檢測當日常文件準備好處理和設置一個“前提”,檢測輸出的日常工作和發送最後一個電子郵件通知。
日誌處理示例
設置數據管道:
圖1:ETL自動化:1)土地在S3中來自Web服務器的數據,InputDataNode
2)觸發一個事件和調用數據磚通過ShellCommandActivity
3)磚處理日誌文件並寫出鑲花的數據,OutputDataNode
4)一次SNS發送通知,上一步的結果。
這個管道有幾個步驟:
1。輸入條件
檢查輸入數據:
s3:/ / < bucket名> /輸入/< / bucket名>
2。輸入數據節點
配置輸入作為下一步的源的shell腳本調用REST API。
3所示。調用數據磚REST API
調用ShellCommandActivity
操作符調用磚REST API文件輸入和輸出參數(為了說明這個博客的點,我們使用下麵的命令;你的工作量,有很多方法可以保持安全):
curl - x POST - u <用戶名>:<密碼> https:// < shard-name >.cloud.m.eheci.com/api/2。0/工作/運行- d”{job_id”: <作業id >,“notebook_params”: {“inputPath”:“s3a: / / <訪問密鑰>:< secrte-key > @ < bucket名> /輸入/ sample_logs /部分- 00001”,“outputPath”:“s3a: / / <訪問密鑰>:< secrte-key > @ < bucket名> /輸出/ sample_log_parquet}}”< / bucket名> < / secrte-key > < /訪問密鑰> < / bucket名> < / secrte-key > < /訪問密鑰> < /工作-id> < / shard-name > < /密碼> < /用戶名>
圖2:一個截圖在磚的工作被調用。注意,這個工作不是安排在磚,它正在引發的數據管道。
4所示。磚的行動
磚行動涉及讀取一個輸入日誌文件,創建一個模式並將其轉換為拚花:
val inputPath = getArgument (“inputPath”,“默認”)情況下類ApacheAccessLog(ipAddress:字符串,clientIdentd:字符串,用戶標識:字符串,dateTime:字符串,方法:字符串,端點:字符串,協議:字符串,responseCode: Int, contentSize:長){}瓦爾模式= " " " ^ (\ S +)(\ S +)(\ S +)\ [((\ w: /) + \ [+ \ -] \ d {4})\]”(\ S +)(\ S +)(\ S +)”(\ d {3})(\ d +)”“”。rdefparseLogLine(日誌:字符串):ApacheAccessLog = {val res = Pattern.findFirstMatchIn(日誌)如果(res.isEmpty) {把新的RuntimeException (“不能解析日誌行:“+日誌)}val m = res.getApacheAccessLog (m.group (1),m.group (2),m.group (3),m.group (4),m.group (5),m.group (6),m.group (7),m.group (8)。toInt m.group (9.toLong)}val accessLogs = (sc.textFile (inputPath)。地圖.cache (parseLogLine)) .toDF () ()
/ /附加處理accessLogs dataframeval outPath = getArgument (“outputPath”,“默認”)accessLogs.write。格式(“鋪”).mode (“覆蓋”).save (outPath)
5。輸出的前提
檢查輸出數據:
s3:/ / < bucket名> /輸出/ sample_log_parquet< / bucket名>
6。把亞馬遜SNS報警
作為最後一步,發出亞馬遜SNS報警時的工作是成功的。你可以訂閱SNS信息以多種方式,如電子郵件或文本通知推送。
接下來是什麼
我們希望這個簡單的例子顯示了如何使用Amazon數據管道和磚API來解決你的數據處理問題。數據管道集成了多種儲層在AWS和使用ShellCommandActivity
它可以與磚REST API的集成和參數參數可以傳遞動態磚的筆記本或庫。嚐試磚,注冊一個免費試用或聯係我們。
閱讀別人的博客係列的學習如何整合磚與您現有的架構: