【问题标题】:Data Ingestion of GB's of data in MongoDBMongoDB中GB数据的数据摄取
【发布时间】:2018-01-06 16:30:19
【问题描述】:

我有各种日志文件,其中包含数百万条记录。我想将这些文件中的记录推送到 mongodb,我必须在插入 MongoDb 之前对数据进行规范化,并在 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 或任何此类需求吗?在Kafka和storm之前我从来没有用过它

【问题讨论】:

  • 如果它消耗“大量内存”,那么当您应该在“块”中处理时,您可能只是将整个文件“吞食”到内存中。很肯定会有很多阅读示例您的日志文件,一次一个片段。“大数据”不是“创可贴”或任何实际有形的东西。它更像是一种“哲学”,只有在您已经了解基础知识时才会真正有所帮助。
  • 嗯,你需要找出究竟是什么花费了时间。然后我们可以谈谈。我们不知道您的情况出了什么问题。你的代码写得不好?数据库上的索引是否太多?您的数据库服务器是否动力不足?以此类推。

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


【解决方案1】:

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

Storm 有两部分 - Spout 和 Bolt
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/

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 2016-03-15
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多