数据在MongoDB中摄取GB的数据

时间:2017-07-31 07:50:07

标签: python mongodb apache-kafka apache-storm bigdata

我有各种日志文件,其中包含数百万条记录。我想将记录从这些文件推送到mongodb,我必须在插入MongoDb之前规范化数据并使用Filter on ID,它是文件中每行/记录中的公共变量。

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或其他任何类型的要求吗?我从来没有在卡夫卡和风暴之前使用它

1 个答案:

答案 0 :(得分:2)

在程序中处理大文件需要大量的内存和正如你所说,你的输入很大,所以用一个过程处理它会花费很多时间。对于给定的用例,您可以将storm与kafka结合使用。我将尝试解释它如何帮助您解决问题 -

风暴有两部分 - 喷射和螺栓
Spout - 它从源发布数据流。
Bolt - 保留您的业务逻辑,为您的案例规范化记录。

将您的日志文件放入kafka主题。让Kafka成为Spout的来源。 Spout会将记录作为可以使用bolt处理的流发布。
有关Storm的更多信息,您可以查看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/

希望它有所帮助。