2017-10-07 62 views
0

我正在與一家當前將其所有應用程序數據存儲在AWS Redshift羣集中的小公司合作。我一直負責對Redshift羣集中的數據進行數據處理和機器學習。AWS Redshift數據處理

我需要做的第一個任務需要基於一些相當簡單的SQL邏輯,將該集羣中現有數據基本轉換爲一些新表。在MSSQL環境中,我只需將所有邏輯放入參數化存儲過程中,並通過SQL Server代理作業進行安排。然而,在Redshift中sprocs似乎並不是什麼東西。我將如何着手創建SQL作業並將其安排在AWS環境中每晚(例如)運行?

我的另一個任務涉及開發一個機器學習模型(Python)並在該Redshift數據庫中對記錄進行評分。如果計劃從該Redshift羣集中提取數據並對其進行評分,然後將其插入到同一羣集上的新表中,那麼託管我的python邏輯並執行數據處理的最佳方式是什麼?看起來好像我可以創建一個EC2實例,在那裏託管我的Python腳本,並在那裏進行處理,並安排腳本通過cron運行?

我看到大量看起來可能相關的AWS(和非AWS)產品(AWS膠水/數據管道/ EMR),但有很多我都有點不知所措。預先感謝您的幫助!

+0

請顯示您的代碼。 –

+0

這是一個非常廣泛的問題,並且有許多方法可以實現您正在談論的內容。您通常會詢問ETL(提取,轉換,加載),因此我建議您搜索相關書籍和文檔。 –

+0

另外,由於您是SO的新手,因此如果您始終關注問題,則可能不知道它更有可能獲得答案。我更多地看到,一個集中的問題會有一個普遍的答案,而不是一個普遍的問題得到一個集中的答案。 –

回答

1

ETL

亞馬遜紅移不支持存儲過程。另外,我應該指出,存儲過程通常是壞事,因爲您將邏輯放入存儲層,這使得將來很難遷移到其他解決方案。 (我知道很多Oracle客戶已經鎖定了自己永遠無法改變技術!)

您應該在Redshift外部運行ETL邏輯,只需使用Redshift作爲數據庫。這可能是因爲運行使用psql調用紅移,如腳本一樣簡單:(使用psql的V8發動機,在其紅移爲基礎)

`psql <authentication stuff> -c 'insert into z select a, b, from x'` 

或者,你可以使用更復雜的ETL工具(如AWS Glue(目前不在每個區域中))或第三方工具(如Bryte)。

機器學習

是的,你可以在EC2實例中運行的代碼。如果很小,則可以使用AWS Lambda(最長5分鐘運行時間)。許多ML用戶喜歡在Amazon EMR上使用Spark。這取決於您需要的技術堆棧。

Amazon CloudWatch Events可以schedule Lambda函數,然後可以啓動EC2實例,該實例可以進行處理,然後自行終止。

確實有很多選擇!

0

2個選項對紅移

運行ETL
  1. 創建一些「創建表作爲」類型的SQL,這將需要你的源 表作爲輸入,並生成目標(轉換表)
  2. 執行使用ETL工具在數據庫之外進行轉換。對於 示例EMR或膠水。

通常,在諸如Redshift等MPP環境中,最佳做法是將ETL推送到強大的數據庫(即選項1)。

只考慮採用Redshift以外的ETL(選項2),其中SQL不是轉換的理想工​​具,或者轉換可能需要大量計算資源。

沒有內置調度或編排工具。如果您需要比cron作業更全面的功能,Apache Airflow是一個不錯的選擇。

0

現有數據的基本轉換

看來你是一個Python開發人員(如你說你正在開發基於Python ML模型),你可以按照以下的步驟做了改造:

  1. 您可以使用boto3(https://aws.amazon.com/sdk-for-python/)爲了 從你的任何工作站紅移交談LAN(確保 你的IP有適當的特權)
  2. 你可以寫你的O使用Python來模擬存儲過程。在這些函數內部,您可以放入/縮小邏輯的轉換邏輯。
  3. 或者,您可以在Redshift中創建使用python的函數,並且它將像存儲過程一樣工作。查看更多在這裏 (https://aws.amazon.com/blogs/big-data/introduction-to-python-udfs-in-amazon-redshift/
  4. 最後,你可以使用windows調度/玉米的工作與像SQL Server代理作業參數來安排你的Python腳本確實

最好的方式來承載我的Python邏輯

在我看來,你正在閱讀一些數據從紅移然後創建測試和訓練集,最後得到一些預測結果(記錄)。如果這樣:

  1. 在任何服務器(LAN)中託管腳本並使用boto3連接到Redshift。如果你需要通過互聯網傳輸大量的行,那麼同一地區的EC2將是一個選項。以臨時方式啓用EC2,完成您的工作並將其禁用。這將是成本效益。你可以使用AWS框架來做到這一點。我使用.Net框架完成了這項工作。我假設boto3確實有這種支持。
  2. 如果結果集相對較小,可以直接將它們保存到目標紅移表中
  3. 如果結果集較大,則將它們保存爲CSV(有多個Python庫),並使用複製命令將這些行上載到臨時表中如果你需要任何中間計算。如果不是,則直接將它們上傳到目標表中。

希望這會有所幫助。