使用AWSλ與磚ETL自動化和ML模式服務
2016年10月11日 在公司博客上
作為一個數據解決方案架構師,我與客戶合作與磚建立端到端解決方案。磚是建立在AWS,本地兼容所有AWS產品,我們所有的客戶都是狂熱的AWS用戶。自然,這意味著我經常在建築等問題建議他們如何與更廣泛的集成數據磚AWS的生態係統。
在這個博客中,我將展示如何利用AWSλ和磚共同應對兩個用例:一個基於事件的ETL自動化(例如,分區創作火花SQL表或工作觸發使用磚的REST API)和服務機器學習模型結果訓練與Apache火花。
讀數據Lakehouse上升探索為什麼lakehouses未來的數據架構和數據倉庫的父親,Bill Inmon。
一點背景AWSλ
λ是一個管理的計算服務,允許您運行一個自定義函數響應事件(例如,寫入特定的AWS S3 bucket)無需建立一個服務器。計算資源、供應能力、自動伸縮功能,代碼監控、日誌記錄、和代碼和安全補丁部署都是由AWS管理。它支持三種編程語言、Java、Python和node . js。
λ是完美的補充數據磚基於事件觸發一個動作在其他AWS服務。磚REST API提供了一種機製來連接你的火花集群λ。
介紹磚的REST API
磚REST API允許編程訪問數據磚,(而不是通過Web UI)。它可以自動創建和運行工作,productionalize數據流,等等。更多信息的API是如何工作的,閱讀文檔或這個博客。
下一個例子中,我將演示如何使用API自動化一個ETL作業。
示例# 1:ETL自動化
有情況每天ETL作業不能安排在一組。例如,有時你需要一個特定的數據點的數量,或每天可能有相當大的變化,使一個簡單的CRON作業不是一個好選擇。在這個和其他類似的情況下,一個AWS Lambda函數可以用來檢查條件(s)在各種各樣的係統(如數據是否降落在S3中或運動)並通過磚的REST API開始這項工作。在下圖所示的例子中,自定義函數是由S3在一桶新的數據的土地。lambda函數觸發磚的工作是使用REST API。具體來說,在S3中各種數據的土地(步驟1);一個事件通知被推到自定義函數在亞馬遜λ(步驟2);自定義函數是一個REST API調用磚開始一份新工作(步驟3);和ETL作業的一部分磚讀取和寫入數據到/從S3(步驟4)。
在下圖所示的例子中,自定義函數是由S3在一桶新的數據的土地。AWSλ觸發磚的工作是使用REST API。具體來說,在S3中各種數據的土地(步驟1);一個事件通知被推到自定義函數在AWSλ(步驟2);自定義函數是一個REST API調用磚開始一份新工作(步驟3);和ETL作業的一部分磚讀取和寫入數據到/從S3(步驟4)。
圖1:ETL自動化:1)土地是S3數據從各種各樣的來源,2)觸發一個事件和調用自定義函數在AWSλ,3)自定義函數是一個REST API調用磚開始一份新工作,4)作為ETL作業的一部分,磚從S3 /讀取和寫入數據。
圖2:亞馬遜λ的配置頁麵的截圖。在前綴和後綴字段,你可以進一步限製範圍,將觸發通知通過提供一個前綴或後綴,如文件擴展名。如果不指定,桶中創建的所有對象觸發通知。
下麵的代碼顯示了自定義lambda函數寫在node . js。它使一個HTTPs post調用REST端點在磚。JSON負載是一個鍵/值(job_id和實際的工作號碼),預配置的火花在磚的工作。你可以學習如何引發就業工作在磚這個視頻。
常量https =需要(“https”);出口.handler =(事件,情況下,回調)= >{vardata =JSON.stringify ({“job_id”:job_id});var選擇= {主機:“xxx.cloud.www.eheci.com”,港口:443年,路徑:“/ api / 2.0 /工作/運行”,方法:“職位”,/ /驗證頭頭:{“授權”:“基本”+新緩衝(“用戶:通過”).toString (“base64”),“內容類型”:“application / json”,“內容長度”:Buffer.byteLength(數據)}};var請求= https.request(選項,函數(res){var身體=”“;res.on (“數據”,函數(數據){身體+ =數據;});res.on (“結束”,函數(){控製台. log(身體);});res.on (“錯誤”,函數(e){控製台. log (”“有錯誤:+ e.message);});
});
request.write(數據);request.end ();};
例2:機器學習模型
在這個例子中,我們使用一個預測模型訓練數據磚使用火花毫升的隨機森林回歸量。這個數據是每小時快照的騎手的自行車共享係統。對於每一個小時,我們有注冊的計數,隨意,和總目前使用自行車騎手以及有關日期和天氣信息。基於這些數據,我們訓練機器學習模型預測的乘客數量。自行車共享係統對於一個給定的小時。一旦訓練模型,我們把它應用到一個測試集的數據和寫結果預測NoSQL數據庫(在這種情況下Riak TS)。關於這個模型的更多信息,看一下數據建模的3和4部分筆記本。
在上麵的示例中,訓練數據存儲在S3和模型建立和預測結果寫入Riak TS在批處理模式。AWSλ是一個好的解決方案服務模型預測結果的持久層不處理任何頭痛在縮放、版本控製和安全性。同樣,λ可以用來提供預測結果DynamoDB,複述,或其他適當的數據存儲係統。這種方法不僅限於回歸模型:它可以用於建立一個推薦係統或分類器一樣。這種方法的一個問題是,它僅限於預測分類特性(如城市和國家在這種情況下)。連續特性,如溫度與無限可能的值的數量,可以使離散(即連續特性。,使用QuantileDiscretizer),細節超出了這篇文章的範圍。
還可以擴展這個用例和攝取訓練數據作為流使用運動與火花流(或卡夫卡)。在ML算法允許流情況下更新(例如k - means或邏輯回歸),我們可以以接近實時的更新模型。之間會有一些延遲實時模型預測結果的更新和刷新到數據庫中。
圖3:機器學習模型服務:1)實時數據反饋,例如日誌,像素或感官數據落在運動,2)火花結構化流拉數據的存儲和處理,批處理或實時ML模型創建/更新,3)模型預測輸出寫入Riak TS, 4) AWSλ和AWS API網關用於預測結果不同的客戶服務。
下麵的代碼顯示了一個定製的lambda函數用Java編寫的。它調用Riak服務器將乘客的預測數量的基礎上,城市,州和時間信息。JSON負載。{“城市”:“華盛頓”,“狀態”:“特區”“時間”:“1356436800000”}
參數相同,筆記本。
公共類RiakModelServer實現了RequestHandler<請求響應= " " > {靜態字符串的表= "火花- - - - - -riak- - - - - -預測- - - - - -時間”;靜態字符串主機名= "主機名”;公共響應handleRequest(請求,請求上下文語境){雙predictedCount= 0;試一試{RiakClient客戶端=RiakClient。newClient(主機名);列表inputPKs=新ArrayList();inputPKs。添加(新的細胞(request.getCity ()));inputPKs。添加(新的細胞(request.getState ()));inputPKs。添加(Cell.newTimestamp (Long.parseLong (request.getTime ())));獲取獲取=新獲取。構建器(表名,inputPKs)。構建();QueryResultqueryResult=客戶端。執行(獲取);如果(queryResult.getRowsCount ()! =0){predictedCount=queryResult。getRowsCopy()。得到(0)。getCellsCopy()。得到(3)。用();}}抓(異常的前女友){前女友。printStackTrace();}返回新響應(”“+ predictedCount);}}< /請求>
圖4:截圖AWSλ的配置頁麵。預測數在中午12點為2012年聖誕節車手比賽第四節的筆記本。
接下來是什麼
現在您已經看到了磚可以使用AWSλ,你可以自己嚐試一下。注冊一個免費試用開始嚐試磚的Apache火花集群、API和更多(選擇平台試驗得到完全訪問API)。Beplay体育安卓版本
這是第一個在一係列的博客如何使用AWS磚與其他服務的生態係統,在Twitter上關注我們或注冊為我們的時事通訊一個新博客發布時得到通知。