MapReduce作业的Map阶段的输出总是排序的吗?

2024-01-08

我对从 Mapper 获得的输出有点困惑。

例如,当我使用以下输入文本运行一个简单的字数统计程序时:

hello world
Hadoop programming
mapreduce wordcount
lets see if this works
12345678
hello world
mapreduce wordcount

这是我得到的输出:

12345678    1
Hadoop  1
hello   1
hello   1
if  1
lets    1
mapreduce   1
mapreduce   1
programming 1
see 1
this    1
wordcount   1
wordcount   1
works   1
world   1
world   1

如您所见,映射器的输出已经排序。我没有跑Reducer根本不。 但我在另一个项目中发现映射器的输出未排序。 所以我对此非常清楚..

我的问题是:

  1. 映射器的输出总是排序的吗?
  2. 排序阶段是否已集成到映射器阶段中,以便映射阶段的输出已在中间数据中排序?
  3. 有没有办法收集数据sort and shuffle在进入Reducer之前阶段并持久化它?减速器带有一个键和一个可迭代列表。有什么办法可以保留这些数据吗?

映射器的输出总是排序的吗?

不,如果你不使用reducer,它不会被排序。如果您使用减速器,则在将映射器的输出写入磁盘之前会有一个预排序过程。数据在Reduce 阶段进行排序。这里发生的情况(只是猜测)是您没有指定一个Reducer类,在新的API中,该类被转换为使用IdentityReducer(请参阅这个答案 https://stackoverflow.com/a/9749215/2516301并评论)。 Identity Reducer 仅输出其输入。要验证这一点,请查看默认的Reducer计数器(应该有一些reduce任务,reduce输入记录和组,reduce输出记录......)

排序阶段是否已集成到映射器阶段中,以便映射阶段的输出已在中间数据中排序?

正如我在上一个问题中所解释的,如果不使用减速器,映射器不会对数据进行排序。如果您确实使用化简器,则数据从映射阶段开始排序,然后在化简阶段进行合并排序。

有没有办法从排序和洗牌阶段收集数据并在进入Reducer之前将其保留。减速器带有一个键和一个可迭代列表。有什么办法可以保留这些数据吗?

同样,洗牌和排序是Reduce 阶段的一部分。 IdentityReducer 会做你想做的事。如果你想为每个reducer输出一个键值对,并且这些值是可迭代的串联,只需将可迭代存储在内存中(例如在StringBuffer中),然后将该串联输出为一个值。如果您希望映射输出直接进入程序的输出,而不经过reduce阶段,那么在驱动程序类中将reduce任务的数量设置为零,如下所示:

job.setNumReduceTasks(0);

但这不会对你的输出进行排序。它将跳过映射器的预排序过程并将输出直接写入HDFS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapReduce作业的Map阶段的输出总是排序的吗? 的相关文章

  • 从 Spark 访问 Hdfs 会出现令牌缓存错误 Can't get Master Kerberosprincipal for use as renewer

    我正在尝试运行测试 Spark 脚本 以便将 Spark 连接到 hadoop 脚本如下 from pyspark import SparkContext sc SparkContext local Simple App file sc t
  • 使用字符串数组在 Hive 表上加载 CSV 文件

    我正在尝试将 CSV 文件插入 Hive 其中一个字段是 string 数组 这是 CSV 文件 48 Snacks that Power Up Weight Loss Aidan B Prince Health Fitness Trave
  • 如何按行扩展数组值!!使用 Hive SQL

    我有一个有 4 列的表 其中一列 项目 类型是 ARRAY 其他是字符串 ID items name loc id1 item1 item2 item3 item4 item5 Mike CT id2 item3 item7 item4 i
  • 更改 Hadoop 中的数据节点数量

    如何改变数据节点的数量 即禁用和启用某些数据节点来测试可扩展性 说得更清楚一点 我有4个数据节点 我想一一实验1 2 3 4个数据节点的性能 是否可以只更新名称节点中的从属文件 临时停用节点的正确方法 创建一个 排除文件 这列出了您想要删除
  • 覆盖hadoop中的log4j.properties

    如何覆盖hadoop中的默认log4j properties 如果我设置 hadoop root logger WARN console 它不会在控制台上打印日志 而我想要的是它不应该在日志文件中打印 INFO 我在 jar 中添加了一个
  • 为什么我们需要将外部表移动到托管 Hive 表?

    我是 Hadoop 新手 正在学习 Hive 在 Hadoop 权威指南第 3 版中 第 12 页 第428章 最后一段 我不明白下面关于 HIVE 中外部表的段落 一种常见的模式是使用外部表访问存储在 HDFS 中的初始数据集 由另一个进
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 全部配对图表上的所有路径

    这可能是一个没有最佳解决方案的问题 假设我有一个有向图 不知道它是否有循环 循环检测将是这个问题的方面之一 给定一组顶点 可能是数百万个顶点 我需要计算给定图的所有唯一对之间的所有不同路径 没有重复顶点的路径 我该如何应对这种情况 让我们看
  • MongoDB/PyMongo:如何在 Map 函数中使用点表示法?

    我正在尝试计算每个邮政编码中找到的记录数 在我的 MongoDB 中 嵌入了邮政编码 使用点表示法 它位于 a res z a 代表地址 res 代表住宅 z 代表邮政编码 例如 这工作得很好 db NY count a res z 141
  • Impala:如何查询具有不同模式的多个镶木地板文件

    在 Spark 2 1 中我经常使用类似的东西 df spark read parquet path to my files parquet 即使具有不同的模式 也可以加载镶木地板文件的文件夹 然后我使用 SparkSQL 对数据帧执行一些
  • ETL informatica 大数据版(非云版)可以连接到 Cloudera Impala 吗?

    我们正在尝试在 Informatica 大数据版本 不是云版本 上进行概念验证 我发现我们可能能够使用 HDFS Hive 作为源和目标 但我的问题是 Informatica 是否连接到 Cloudera Impala 如果是这样 我们是否
  • 如何对 RDD 进行分区

    我有一个文本文件 其中包含大量由空格分隔的随机浮动值 我正在将此文件加载到 scala 中的 RDD 中 这个RDD是如何分区的 另外 是否有任何方法可以生成自定义分区 以便所有分区都具有相同数量的元素以及每个分区的索引 val dRDD
  • 错误 hive.HiveConfig:无法加载 org.apache.hadoop.hive.conf.HiveConf。确保 HIVE_CONF _DIR 设置正确

    我正在尝试将数据从 sqoop 导入到 hive MySQL use sample create table forhive id int auto increment firstname varchar 36 lastname varch
  • 为什么 CouchDB 归约函数接收“键”作为参数

    使用 CouchDB 减少功能 function keys values rereduce 这被称为这样 reduce key1 id1 key2 id2 key3 id3 value1 value2 value3 false 问题1 将键
  • 如何用snappy解压hadoop的reduce输出文件尾?

    我们的 hadoop 集群使用 snappy 作为默认编解码器 Hadoop作业减少输出文件名就像part r 00000 snappy JSnappy 无法解压缩文件 bcz JSnappy 需要以 SNZ 开头的文件 归约输出文件以某种
  • Hive 聚集在多个列上

    据我所知 当配置单元表聚集在一列上时 它会执行该分桶列的哈希函数 然后将该行数据放入其中一个桶中 每个桶都有一个文件 即如果有 32 个桶 那么 hdfs 中就有 32 个文件 将 clustered by 放在多个列上意味着什么 例如 假
  • 将数据从 .txt 文件加载到 Hive 中以 ORC 形式存储的表

    我有一个数据文件位于 txt格式 我正在使用该文件将数据加载到 Hive 表中 当我将文件加载到类似表中时 CREATE TABLE test details txt visit id INT store id SMALLINT STORE
  • MapReduce 中的分区到底是如何工作的?

    我认为我总体上对 MapReduce 编程模型有一定的了解 但即使在阅读了原始论文和其他一些来源之后 我仍然不清楚许多细节 特别是关于中间结果的分区 我将快速总结到目前为止我对 MapReduce 的理解 我们有一个可能非常大的输入数据集
  • 没有函数映射到名称“coord:formatTime”

    我正在尝试使用 oozie 中的以下内容获取当前时间戳
  • Hadoop 超立方体

    嘿 我正在启动一个基于 hadoop 的超立方体 具有灵活的维度数 有人知道这方面现有的方法吗 我刚刚发现PigOLAP草图 http wiki apache org pig PigOLAPSketch 但没有代码可以使用它 另一种方法是Z

随机推荐

  • 有没有可以重新格式化 C# 代码的工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 最好是 命令行工具 可以在目录树上重新格式化 C 源代码 理想情况下 我应该能够自定义格
  • 如何按日期范围查询Cassandra

    我有一个 Cassandra ColumnFamily 0 6 4 它将包含来自用户的新条目 我想向 Cassandra 查询这些新条目 以便我可以在另一个系统中处理该数据 我的感觉是 我可以使用 TimeUUIDType 作为条目的键 然
  • 世博相机变焦

    这是我第一次在 React Native 中使用捏合手势处理程序 我正在尝试使用 Expo 创建一个可缩放相机 我正在做的是 const handlePinch nativeEvent gt const scale velocity nat
  • 调试帮助 - 交换双向链表的 2 个节点

    您能帮我调试这段代码以交换双链表的两个节点吗 我无法弄清楚我做错了什么 这是代码 dll swap node dll head dll node1 dll node2 dll tmp int flag 0 if node1 gt prev
  • 从每组中选择前 1 行

    我有一个表格列出了已安装的软件版本 id userid version datetime 111 75 10075 2013 03 12 13 40 58 770 112 75 10079 2013 03 12 13 41 01 583 1
  • 没有Mac就无法使用Xamarin吗?

    我在 Windows 10 上使用 Visual Studio 2017 根本没有使用 Mac 当我尝试调试新的 Xamarin 跨平台项目时 VS 尝试找到 Mac 通过 Xamarin 创建跨平台应用程序几乎需要 Mac 吗 是的 您需
  • TypeScript 类型混淆(TypeError:无法读取未定义的属性“切片”)

    我有以下数据csv我的 Angular 项目中的文件也导入了D3 js图书馆 group Nitrogen normal stress banana 12 1 13 poacee 6 6 33 sorgho 11 28 12 triticu
  • 如何使用基于 PHP/MySQL 的脚本来禁止网站的 IP 封锁?

    我有一个相当大的 IP 和 IP 块列表 我想禁止它们 我的列表是分块完成的 目前的格式如下 1 2 3 4 1 2 3 54 5 6 7 8 5 6 7 8 2 3 4 5 2 3 4 116 我正在尝试找到最有效的方法来阻止这些 IP
  • 有没有办法将spirit::lex字符串标记的内容匹配为spirit::qi语法中的文字

    我正在编写 DSL 并使用 Boost Spirit 词法分析器来标记我的输入 在我的语法中 我想要一个与此类似的规则 其中tok是词法分析器 header block tok name gt gt gt gt tok stringval
  • Google Translator Toolkit API 错误(“Multipart 必须有 Atom 和媒体部分”)

    我尝试通过 API 将文档 srt 字幕 上传到 Google Translator Toolkit 但我收到一个错误 Multipart 必须有 Atom 和媒体部分 怎么了 我的请求 POST toolkit feeds documen
  • 线程在调用 Thread.start 之前开始运行

    t1 threading Thread target self read print something t2 threading Thread target self runChecks args self self read无限期地运行
  • 如果容器宽度、填充和行高已知,如何计算高度?

    我正在向 DOM 动态添加元素 div class entry div text data status appendTo app twitter feed 我想在将元素添加到 DOM 之前获取元素高度 通常的方法是将元素添加到具有相同样式
  • 打印出指定宽度的 ASCII 圆

    我正在尝试更改以下代码 以便得到半径 2 的输出 任何帮助将不胜感激 因为我快要疯了 public class Main public static void main String args dist represents distanc
  • 跨多个容器或父级的 jQuery UI 可排序 div

    我有一个对象列表 它被分成两个容器 我想通过 jQuery 对其进行排序 但我不知道如何使一个对象能够添加到其他容器列表中 反之亦然 因此 我希望能够将一个对象从一个容器拖到另一个容器中 并让代码将其视为一个列表 下面是我的代码
  • 如何在不变得模糊的情况下放大图像

    I have an ImageView that is 32x32 Its a sprite basically But when I go to upscale the image it blurs like this But I wan
  • 如何创建此查询

    如果我需要在选择行中包含两个聚合函数并且每个函数我需要不同的分组依据和位置条件 如何创建查询 在我的示例中 我需要返回玩家名称 以及玩家获胜的次数 可以检查桌面游戏结果 第一中的结果 以及他玩了多少次 但不知道如何处理两个聚合函数 只是我想
  • 为什么 OpenGL 中没有圆形或椭圆形图元?

    圆是基本几何实体之一 然而没有定义原语OpenGL http en wikipedia org wiki OpenGL为此 例如直线或多边形 为什么这样 一直为此包含自定义标头有点烦人 有什么具体原因可以省略吗 虽然圆形可能是基本形状 但在
  • C# WPF MenuItem 自定义模板

    在 Main xaml 中 我有这两个菜单项 第一个带有标题 断开电流 第二个带标题 Quit 更多具有不同标题文本的菜单项 为了编辑第一个项目的一些颜色 我在 App xaml 中创建了一个自定义模板
  • _SESSION 变量不起作用

    我有一个 PHP 脚本 我尝试在 HTML 标头开始之前获取会话变量 如果我使用 SESSION变量位于 HTML 正文中的某个位置 由于某种原因它可以工作 但如果我使用 SESSION变量在 HTML 开始之前 我无法从中获取值 有人知道
  • MapReduce作业的Map阶段的输出总是排序的吗?

    我对从 Mapper 获得的输出有点困惑 例如 当我使用以下输入文本运行一个简单的字数统计程序时 hello world Hadoop programming mapreduce wordcount lets see if this wor