2017-07-31 16 views
1

我有各種包含數百萬條記錄的日誌文件。我想把記錄從這些文件推送到mongodb,我必須在插入MongoDb之前對數據進行規範化處理,並在文件中的每行/記錄中使用作爲常用變量的ID。數據在MongoDB中GB的數據攝入

MY_MONGO_DB_SCHEMA =

{ 
        "ID" : "common in all the files", 
         "LOG_FILE_1":[{ 
          # variable from LOG_FILE_1 
          "var1" : "contains the value matching with ID in 
            record", 
          "var2": "contains the value matching with ID in 
            record" 
           }], 
          "LOG_FILE_2" :[{# variable from LOG_FILE_2 
          "var3: "contains the value match with ID in record" 
          "var4": "contains the value match with ID i record" 
          }] 
          } 

我寫的Python腳本,但它會佔用大量的內存,或者需要大量的時間,如果我用我的劇本限制內存的使用。有人可以建議使用APACHE STORM,APACHE KAFKA或任何其他類型的要求嗎?我從來沒有在卡夫卡和風暴之前使用它

+0

如果它正在消耗「大量內存」,那麼當你應該用「塊」處理時,你可能只是「sl」「整個文件到內存中,相當肯定會有大量的讀取你的日誌文件的例子, 「大數據」不是「創可貼」或任何真正有形的東西,它更像是一種「哲學」,只有當你已經瞭解基礎知識時纔會有所幫助, –

+0

那麼,你需要找出什麼我們不知道你的情況有什麼問題,你的代碼是否寫得很糟糕?你的數據庫索引太多了嗎?你的數據庫服務器服務不足?等等。 –

回答

2

在程序中處理大文件需要大量內存&正如您所說的,您的輸入很大,因此使用單個進程處理它需要很長時間。您可以將風暴與kafka結合起來用於給定的用例。我將試圖解釋它如何幫助您解決您的問題 -

風暴有兩個組成部分 - 脫粒機和博爾特
脫粒機 - 它釋放的數據流從源代碼。
螺栓 - 持有您的業務邏輯,爲您的情況正常化記錄。

將您的日誌文件放入kafka主題。讓Kafka成爲Spout的來源。 Spout會將記錄釋放爲可用螺栓處理的流。
關於風暴的更多信息,您可以通過https://in.udacity.com/course/real-time-analytics-with-apache-storm--ud381/當然。這是一個免費課程。
瞭解Storm的平行度 - http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/

希望它有幫助。