我是一名具有相當不錯的RDBMS體驗的python開發人員。我需要處理大量的數據(大約500GB)。數據在s3桶中大約有1200個csv文件。我用Python編寫了一個腳本,並可以在服務器上運行它。但是,它太慢了。根據目前的速度和數據量,大概需要50天時間才能完成所有文件(當然,在此之前的截止日期是好的)。並行處理大量數據
注:處理是那種東西你的基本ETL型 - 沒有什麼可怕的幻想。我可以很容易地將它壓入PostgreSQL中的臨時模式,然後將腳本運行到它。但是,從我的初始測試來看,這將會變慢。
注意:一個全新的PostgreSQL 9.1數據庫將是它的最終目的地。
所以,我在想試圖旋轉了一堆EC2實例,試圖成批運行它們(並行)。但是,我從來沒有做過以前,所以我一直在四處尋找的想法是這樣的,等
同樣,我是一個Python開發,所以它看起來像布+博託可能是有前途的。我不時使用boto,但從來沒有使用Fabric的經驗。
我從閱讀/研究中瞭解到,這對於Hadoop來說可能是一項很好的工作,但我不知道它並且無法承擔這項工作,並且時間線不允許學習曲線或招聘有人。我也不應該這樣,這是一次性交易。所以,我不需要構建一個非常優雅的解決方案。我只需要它的工作,並能夠在今年年底前完成所有數據。
另外,我知道這不是一個簡單的計算器,各種問題(像「我怎樣才能扭轉蟒蛇名單」)。但是,我期望的是有人閱讀這篇文章,「說,我做了類似的事情,並使用XYZ ......太棒了!」
我想我問的是有沒有人知道我可以用來完成此任務的任何東西(鑑於我是Python開發人員,並且我不知道Hadoop或Java - 並且擁有時間緊迫,防止我學習一門新技術,如Hadoop的或學習一門新語言)
感謝您的閱讀。我期待着任何建議。
布+博託的確看起來像這個任務的良好結合。也可以在每個實例上並行執行任務(除非您希望有1200個實例,每個文件一個實例),也許可以使用'multiprocessing'模塊中的'Pool'。此外,解析文件和編輯結果的方式可能會對總時間產生很大影響。你看過「numpy」嗎? – goncalopp
所以沒有人試圖重複可能的建議 - 你能描述一下你在現有腳本中做了什麼太慢 - 所以我們不知道該走下去嗎:) –
@JonClements - 看起來像一個公平的請求。基本上,我嘗試了兩種方法。我已經嘗試將數據放入臨時模式中,並將其編入索引(根據需要)並對其運行查詢以「按摩」數據並將其轉換爲請求的格式。這太慢了,因爲我認爲索引比PostgreSQL緩存大得多。注意:我在Heroku上運行一個小的PostgreSQL實例。 (接下來的評論會繼續) –