MapReduce:大数据集的编程模型

已发表: 2023-01-08

MapReduce 是一种编程模型和相关实现,用于在集群上使用并行分布式算法处理和生成大型数据集。

我们正在改变我们使用新技术处理大量数据的方式。 Hadoop、NoSQL 和 Spark 等数据仓库是该领域最杰出的参与者之一。 DBA 和基础设施工程师/开发人员属于新一代专业人士,他们专门管理高度复杂的系统。 Hadoop 不是数据库,而是一个软件生态系统,它允许以海量文件的形式进行并行计算。 该技术在支持大数据的海量处理需求方面提供了显着优势。 对于大型数据事务,Hadoop 集群平均可能只需要三分钟即可处理大型事务,而在集中式关系数据库系统中通常需要 20 小时。

mapreduce 集群是一种具有并行算法和编程模型的集群,可以像普通集群一样处理和生成大数据集。

Apache Hadoop 生态系统旨在支持分布式计算,并提供可靠、可扩展且随时可用的环境。 该项目的 MapReduce 模块是一种编程模型,用于处理驻留在 Hadoop(分布式文件系统)上的庞大数据集。

该模块是Apache Hadoop开源生态系统的一个组件,用于查询和选择Hadoop分布式文件系统(HDFS)中的数据。 可以使用可用于进行此类选择的 MapReduce 算法来为各种查询选择数据。

使用 MapReduce,可以运行大数据处理任务。 您可以使用任何编程语言构建 MapReduce 程序,包括 C、Ruby、Java、Python 等。 这些程序可以同时用于运行 MapReduce 程序,使其在大规模数据分析中非常有用。

Mongodb 中 Mapreduce 的用途是什么?

Mongodb 中 Mapreduce 的用途是什么?
图片来源 – https://blogspot.com

MongoDB 中的地图是一种数据处理编程模型,使用户能够执行大型数据集并从中生成聚合结果。 MapReduce 是 MongoDB 用于减少映射的方法。 该函数分为两个部分:映射函数和缩减函数。

使用 MongoDB 的MapReduce 工具,可以组织和聚合大型数据集。 在 MongoDB 中,此命令使用 MongoDB 中的两个主要输入:map 函数和 reduce 函数,以处理大量数据。 要定义示例,请按照以下步骤操作。 我们将定义 map 函数、reduce 函数和示例。

MapReduce 将使用默认排序方法比较字符串以对输出进行排序,无论您是否使用默认方法。 要改变数据的排序方式,您必须首先创建一个排序算法,然后使用映射器类来实现它。
SpiderMonkey 是一种广泛使用的 JavaScript 引擎。 它适用于小规模应用,但也有一些局限性。 例如,SpiderMonkey 没有排序算法。 这样一来,如果要使用Mapmapper对数据进行排序,就必须先创建自己的排序算法,并在Reduce类中实现。
尽管很受欢迎,但 SpiderMonkey 并不使用排序算法。 SpiderMonkey 还有其他限制,但这一限制值得注意。 例如,SpiderMonkey 没有很好的垃圾收集器,因此如果您的程序开始变慢,您可能需要采取一些措施使其更快。

为什么要使用 Mapreduce 函数?

MapReduce 函数在多种情况下都很有用。 该方法在某些情况下可用于批量数据处理。 如果您需要由单个应用程序或进程处理大量数据,它也很有用。 MapReduce 函数还可用于处理分布在分布式系统中多个节点上的数据。 通过使用 MapReduce 功能,来自节点的数据可以组合成单个输出。 MapReduce 应用程序通常用于处理大量数据,尽管它可能需要处理非常大的数据量。

为什么叫Mapreduce?

为什么叫Mapreduce?
照片由 – https://rutgers.edu

关于为什么将其称为 MapReduce,存在一些理论。 一个是它是文字游戏,因为 map-reduce 算法涉及将问题分解成更小的部分(映射),然后解决这些部分并将它们放回一起(减少)。 另一种说法是,它引用了 Google 员工在 2004 年撰写的一篇名为“MapReduce:大型集群上的简化数据处理”的论文。 在论文中,作者使用术语“map”和“reduce”来描述他们提出的处理模型的两个主要阶段。

然而,重要的是要注意 MapReduce 模型仅在有限的基础上使用。 它不适合大型数据集,必须并行化才能正常运行。 在解决这些问题时,Apache Spark 有一个强大的 MapReduce 替代方案。 Spark集群计算系统基于Hadoop,作为一个通用的计算平台。 该工具可用于加速传统的数据分析任务,如数据挖掘和机器学习,以及更复杂的数据处理任务,如数据仓库和大数据分析。 该软件是使用 Erlang 构建的,Erlang 是一种可扩展且容错的编程语言。 它可以处理大量数据并且可以同时在多台机器上运行。 此外,Spark 采用并行机制,允许多个节点同时执行相同的任务。 总的来说,它具有自动化大规模数据分析任务并使其更具可扩展性的潜力。 如果您需要并行处理和处理大型数据集,它是 MapReduce 的绝佳替代方案。

Mapreduce 和聚合之间有什么区别?

在处理大数据时,mapreduce 是从大量数据中提取数据的重要方法。 截至目前,MongoDB 2.2 包含新的聚合框架。 在功能方面,聚合类似于 mapreduce,但在理论上,它似乎更快。

在这种情况下,MongoDB 聚合和 MapReduce 在分片设置中的 Docker 容器上运行。 聚合器管道性能优于 mapreduce,因为它允许更快、更轻松的导航。 问题的工作原理如下:tweet 在 Twitter 标签中计算瑞典语代词,如“den”、“denne”、“denna”、“det”、“han”、“hon”和“hen”(区分大小写)。 一个用户有多少个推特账号? 已发出超过 400 万条推文。 在这个实验中,我们将首先创建一个 MongoDB 数据库并启用分片。 Twitter 流被导入数据库,并使用 MapReduce 和聚合管道执行查询。

Mapreduce:终极数据聚合工具

mapReduce 程序从集合中读取文档列表并使用一组预定义的函数处理它们。 mapReduce 操作生成准备处理的文档流,这些文档将在 reduce 阶段进行处理。 可以在各种情况下结合 mapsreduce 和聚合。 $group 聚合运算符是一种可用于在单个字段中对文档进行分组的工具。 当使用 $merge 聚合运算符合并多个文档时,可以创建一个新文档。 $accumulator 聚合运算符可用于将多个 map-reduce 操作的结果表示为单个文档。


MongoDB 中的映射减少

Mongodb mapreduce是一种针对大数据集的数据处理技术。 它是分析数据的强大工具,提供了一种以并行和分布式方式处理和聚合数据的方法。 MapReduce 已广泛用于各种领域的数据分析,包括网络流量分析、日志分析和社交网络分析。

使用mapReduce 命令时,您可以对集合运行 map-reduce 聚合操作。 map 函数可以将任何文档转换为零个或多个其他文档。 在从 4.2 到更早版本的 MongoDB 版本中,每个 emit 只能容纳最大 BSON 文档大小的一半。 不再支持 MapReduce 中使用的已弃用的 BSON 类型 JavaScript 代码,并且该代码不能再用于其功能。 MongoDB 4.4 现在不再包含已弃用的具有作用域的 BSON 类型 JavaScript 代码(BSON 类型 15)。 scope 参数指定 reduce 函数允许访问哪些变量。 为了减少输入,MongoDB 将 BSON 文档大小限制为其最大大小的一半。

返回到服务器的大型文档可能会被返回,然后在后续的缩减中合并,这可能会破坏需求。 MongoDB 4.2 是最新版本。 此选项可用于创建新的分片集合以及 map-reduce 以创建具有相同集合名称的新集合。 finalize 函数接收键值和来自 reduce 函数的缩减值作为参数。 配置 out 参数有三个选项。 此选项除了创建新集合外,对副本集的次要成员不起作用。 NonAtomic: false 选项只能在集合已经存在时提供,传递具有明确的规范。

如果新文档上的键与现有文档上的键相同,则对新文档和现有文档都使用 reduce 函数会产生结果。 当 collectionName 是已设置的现有未硬集合时,map-reduce 不起作用。 在这种情况下,如果 nonAtomic 为真,MongoDB 将无法锁定其数据库。 只有使用此选项的副本集的次要成员才能脱离集合。 不需要自定义函数来重写 map-reduce 操作。 cust_id 用于通过cust_id 方法计算$group 阶段组的值字段。 $merge 阶段使用可用的聚合管道运算符将 $merge 阶段的结果组合到输出集合中。

例如,$out 阶段可用于写入集合 agg_alternative_1 的输出。 每个输入文档都可以使用地图功能进行处理。 订单中的每个项目都与一个新的对象值相关联,该对象值包含 1 的数量和订单中的项目数量。 在 reducedVal 中,count 字段表示数组元素生成的 count 字段的总和。 如果 finalize 函数修改 reducedVal 对象以包含名为 avg 的计算字段,则修改后的对象将返回给用户。 $unwind 阶段使用 items 数组字段将文档分解为每个数组元素的文档。 $project 阶段通过包含两个字段 -id 和 value 来重塑输出文档以反映 mapreduce 的输出。

如果不存在与新结果具有相同键的现有文档,它将覆盖现有文档。 如果您指定 out 参数,如果您要将结果写入集合,mapReduce 将返回一个文档作为以下格式的输出。 如果输出是内联写入的,则返回结果文档数组。 每个文档包含两个字段:源文档的名称和接收文档的名称。 当在 -id 字段中输入键值时,将创建一个值字段以减少或确定键的值。

Mongodb 中的 Emit 是什么?

作为一个map函数,map函数可以随时调用emits(key,value)生成包含key和value的输出文档。 MongoDB 4.2 及更早版本中的单个 emit 只能容纳 MongoDB BSON 文件最大大小的一半。 从 MongoDB 4.4 版本开始,该限制被移除。

为什么 Mongodb 是灵活和可扩展数据的最佳选择

由于缺乏严格的模式,MongoDB 经常与 NoSQL 联系在一起。 由于它没有严格的模式,数据可以以任何对应用程序方便的格式存储。 数据库的灵活性在向上或向下扩展时提供了一个重要的优势,因为这意味着数据可以以适合应用程序需求的方式存储。
带有 ER 图的数据图可用于可视化各种数据之间的关系。 ER图描绘了代表数据集合的一系列节点,它们之间的连接充当标识符。
关系在 MongoDB 中没有强制执行,因为它不是关系数据库。 ER 图描绘了数据中存在的关系,它也有助于可视化它们。
MongoDB 是灵活且可扩展的数据的绝佳选择。 它的灵活性使其能够以对应用程序有意义的方式存储数据,其可扩展性使其能够快速轻松地处理大型数据集。

Map-reduce Mongodb 示例

在 MongoDB 中,map-reduce 是一种数据处理范例,用于从集合中聚合数据。 它类似于函数式编程中的 map 和 reduce 函数。
Map-reduce 操作有两个阶段:
1. 映射阶段对集合中的每个文档应用一个映射函数。 映射函数为每个输入文档发出一个或多个对象。
2. reduce 阶段对 map 阶段发出的文档应用 reduce 函数。 reduce 函数聚合对象并生成单个对象作为输出。
例如,考虑一个文章集合。 我们可以使用 map-reduce 来计算每篇文章中的单词数。
首先,我们定义一个映射函数,它为每个文档发出一个键值对,其中键是文章 ID,值是文章中的单词数。
接下来,我们定义一个 reduce 函数,对每个键的值求和。
最后,我们对集合执行 map-reduce 操作。 结果是包含聚合数据的文档。

在mongosh中,有一个数据库。 mapReduce() 方法是 mapReduce 命令的包装器。 本节中提供了几个示例,例如没有自定义聚合表达式的聚合管道替代方案。 通过使用 Map-Reduce 到聚合管道转换示例,可以使用自定义表达式转换地图。 可以更改 map-reduce 操作,而无需使用可用的聚合管道运算符定义自定义函数。 map 函数可用于处理输入中的每个文档。 每个项目都有自己的对象值,该对象值与包含数字 1、订单数量和项目列表的新值相关联。

如果当前文档中的键与新文档中的键相同,则该操作将覆盖该文档。 您可以使用聚合管道运算符而不是定义自定义函数来重写 map-reduce 操作。 $unwind 阶段按 items 数组字段分解文档,从而为每个数组元素生成一个文档。 当 $project 阶段重塑输出文档时,map-reduce 输出被镜像。 操作会覆盖与新结果具有相同键的现有文档。

Hadoop中的Mapper函数是什么?

作为一个 reducer,你必须结合来自 mappers 的数据来生成一个统一的答案。 当一组映射输出被接受为输入时,会产生 Reduce 输出,每个映射输出代表生成结果的一个子集。
映射器用于将数据划分为可管理的块,然后根据块的大小将每个块分配给任务。 输入数据由映射器函数接收,其中有参数指示要执行的任务。
一系列项目对应于映射器在输出中映射的数据块。 结果,map 输出被转发到 reducer,reducer 将其转换为 reduce 输出。
错误也由映射器函数处理。 在这种情况下,映射器将返回错误输出,这不是映射输出。 因为 reducer 无法处理这些数据,所以 mapper 会返回一个错误信息。

Hadoop生态系统

Hadoop 生态系统是一个处理和存储大数据的平台。 它由许多组件组成,每个组件在数据的处理和存储中都扮演着特定的角色。 该生态系统最重要的组件是 Hadoop 分布式文件系统 (HDFS)、MapReduce 框架和Hadoop Common 库