gpt4 book ai didi

java - "Adopting MapReduce model"= 可扩展性的通用答案吗?

转载 作者:可可西里 更新时间:2023-11-01 14:12:50 25 4
gpt4 key购买 nike

我一直在努力理解 MapReduce 概念并将其应用到我目前的情况中。我的情况是什么?好吧,我这里有一个 ETL 工具,其中数据转换发生在源和目标数据源(数据库)之外。因此,源数据源纯粹用于提取,目的地用于加载。

因此,对于今天的这种转换行为,假设一百万条记录大约需要 X 个小时。我想解决一个场景,我将拥有十亿条记录,但我希望在相同的 X 小时内完成工作。因此,我的产品需要根据数据规模进行横向扩展(添加更多商品机器)。如您所见,我只担心将我的产品的转换功能分配到不同机器的能力,从而利用所有这些机器的 CPU 能力。

我开始寻找选择,然后遇到了 Apache Hadoop,然后最终遇到了 MapReduce 的概念。我非常成功地快速设置了 Hadoop,而没有在集群模式下遇到问题,并且很高兴也运行了一个 wordcount 演示。很快,我意识到要实现我自己的 MapReduce 模型,我必须将我的产品的转换功能重新定义为 MAP 和 REDUCE 函数。

这就是麻烦开始的时候。我读了一本 Hadoop:权威指南,我了解到 Hadoop 的许多常见用例都在人们面临的场景中:

  • 非结构化数据,想要执行聚合/排序/或类似的操作。
  • 非结构化文本,需要进行挖掘
  • 等等!

这是我的场景,我从数据库中提取数据并加载到数据库(具有结构化数据),我的唯一目的是以可靠的方式让更多 CPU 发挥作用,并在那里分发我的转换。重新定义我的转换以适应 Map 和 Reduce 模型本身就是一个巨大的挑战。所以这是我的问题:

  1. 您在 ETL 中使用过 Hadoop 吗场景?如果是,可以是具体的关于你如何处理 MapReducing 的你的转变?你用过吗Hadoop 纯粹是为了利用额外的处理器功率?

  2. MapReduce 概念是 分布式的通用答案 计算?有没有其他的一样 好的选择?

  3. 我的理解是 MapReduce 适用于大型 的数据集 排序/分析/分组/计数/聚合/等, 我的理解正确吗?

最佳答案

如果你想在很多系统上扩展一个处理问题,你必须做两件事:

  1. 确保您可以独立处理信息。
  2. 这些部分之间不应需要任何共享资源。

如果存在依赖关系,那么这些将是您水平可扩展性的限制。

因此,如果您从关系模型开始,那么主要障碍是您拥有关系这一事实。拥有这些关系是关系数据库中的一项重要 Assets ,但在尝试横向扩展时……是一种痛苦。

从关系部分到独立部分的最简单方法是跳转并将数据反规范化为包含所有内容的记录,并专注于您要对其进行处理的部分。然后您可以将它们分布在一个巨大的集群上,并在处理完成后使用结果。

如果你做不到这样的跳跃,那你就有麻烦了。

所以回到你的问题:

#你在ETL场景中使用过Hadoop吗?

是的,输入是 Apache 日志文件,加载和转换包括解析、规范化和过滤这些日志行。结果不会放入普通的 RDBMS 中!

# MapReduce 概念是分布式计算的通用答案吗?还有其他同样好的选择吗?

MapReduce 是一种非常简单的处理模型,非常适合处理任何可以拆分为许多较小的 100% 独立部分的处理问题。 MapReduce 模型非常简单,据我所知,任何可以拆分为独立部分的问题都可以编写为一系列 mapreduce 步骤。

但是:重要的是要注意,目前只有面向 BATCH 的处理可以使用 Hadoop 完成。如果你想要“实时”处理,你现在运气不好。

目前我不知道有更好的模型可以实际实现。

# 我的理解是 MapReduce 适用于大型数据集进行排序/分析/分组/计数/聚合等,我的理解正确吗?

是的,这是最常见的应用。

关于java - "Adopting MapReduce model"= 可扩展性的通用答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4081922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com