《Hadoop权威指南》书摘-MapReduce概述

2023-10-27

转载请注明出处
独立博客:http://wangnan.tech
简书:http://www.jianshu.com/u/244399b1d776**
知乎:https://zhuanlan.zhihu.com/c_121958856

MapReduce是一种可用于数据处理的编程模型,MapReduce程序本质上是并行运行的,因此可以将大规模数据分析任务分发给任何一个拥有足够多机器的数据中心,它的优势在于处理大规模数据

map和reduce

MapReduce任务可以分为两个处理阶段:map阶段和reduce阶段,每个阶段都以键值对作为输入和输出

一些概念

job
MapReduce job 是客户端需要执行的一个工作单元,它包括输入数据,MapReduce程序和配置信息

task
Hadoop将 job 分成若干 task 执行,task包括两类:map任务和reduce任务,这些任务运行在集群的节点上,并通过YARN进行调度,如果任务失败,它将在另一个不同的节点上自动重新调度运行

split
hadoop将MapReduce的输入数据划分成等长的小数据块,成为split,hadoop为每个分片创建一个map任务

对于大多数作业来说,一个合理的分片大小趋向于HDFS的一个块的大小,默认是123MB

数据本地化优化
Hadoop在储存有输入数据(HDFS中的数据)的节点上运行map任务,可以获得最佳性能,因为它无需使用宝贵的集群带宽资源,但是有时储存该分片的hdfs数据块副本所在的节点可能在运行其他的map任务,此时调度需要从某一个数据块所在的机架中的一个节点上寻找一个空闲的map槽(slot)来运行该map任务分片,仅仅在非常偶然的情况下会发生,这将导致机架之间发生网络传输

思考题:为什么最近分片大小应该与块大小相同

思考题:为什么map任务将其输出写入本地磁盘,而不是HDFS

reduce

reduce任务并不具备数据本地化优势,单个reduce任务的输入通常来自于所有mapper的输出,reduce的输出通常储存在HDFS中以实现可靠储存,reduce输出的每个HDFS块,第一个副本储存在本地节点上,其他复本出于可靠性考虑储存在其他机架的节点上

reduce数据流图

reduce任务的数量并非由输入数据的大小决定,相反是独立的

partition
如果有好多个reduce任务,每个map任务就会针对输出进行分区(partition),即为每个reduce任务建一个分区,每个分区有许多键,但每个建对应的键值对记录都在同一个分区中,分区可以由用户定义的分区函数控制,但通常默认的partitioner通过哈希函数来分区,很高效


shuffle
多个reduce任务的数据流如图,map和reduce任务之间的数据流成为shuffle(混洗),因为每个reduce任务的输入都来自许多map任务,shuffle一般比图中所示的更负责,而且调整shuffle参数对作业总执行时间影响比较大

当数据完全可以并行,无需shuffle时,可能出现无reduce任务的情况,这种情况下,唯一的非本地节点数据传输是map任务

combiner函数
能帮助减少mapper和reducer之间的数据传输量

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

《Hadoop权威指南》书摘-MapReduce概述 的相关文章

  • 猪参考

    我正在学习 Hadoop Pig 并且我总是坚持引用元素 请查找下面的示例 groupwordcount group chararray words bag of tokenTuples from line token chararray
  • hive 从两个数组创建映射或键/值对

    我有两个具有相同数量值的数组 它们映射为 1 1 我需要从这两个数组创建一个键 值对或映射 键 值 任何想法或提示都会有帮助 当前表结构 USA WEST NUMBER Street City 135 Pacific Irvine USA
  • 带有安全 Kafka 抛出的 Spark 结构化流:无权访问组异常

    为了在我的项目中使用结构化流 我正在 hortonworks 2 6 3 环境上测试 Spark 2 2 0 和 Kafka 0 10 1 与 Kerberos 的集成 我正在运行下面的示例代码来检查集成 我能够在 Spark 本地模式下的
  • Hive“添加分区”并发

    我们有一个外部 Hive 表 用于处理原始日志文件数据 这些文件每小时一次 并按日期和源主机名分区 目前 我们正在使用简单的 python 脚本导入文件 这些脚本每小时触发几次 该脚本根据需要在 HDFS 上创建子文件夹 从临时本地存储复制
  • 伪分布式模式下的 Hadoop。连接被拒绝

    P S 请不要将此标记为重复 Hi 我一直在尝试以伪分布式模式设置和运行 Hadoop 当我运行 start all sh 脚本时 我得到以下输出 starting namenode logging to home raveesh Hado
  • Spark 有没有办法捕获执行器终止异常?

    在执行我的 Spark 程序期间 有时 其原因对我来说仍然是个谜 yarn 会杀死容器 执行器 并给出超出内存限制的消息 我的程序确实恢复了 但 Spark 通过生成一个新容器重新执行任务 但是 在我的程序中 任务还会在磁盘上创建一些中间文
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • Sqoop - 绑定到 YARN 队列

    因此 使用 MapReduce v2 您可以使用绑定到某些 YARN 队列来管理资源和优先级 基本上通过使用 hadoop jar xyz jar D mapreduce job queuename QUEUE1 input output
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • Pig 10.0 - 将元组分组并在 foreach 中合并包

    我在用着Pig 10 0 我想在 foreach 中合并包 假设我有以下内容visitors alias a b 1 2 3 4 a d 1 3 6 a e 7 z b 1 2 3 我想对第一个字段上的元组进行分组 并将包与一组语义合并以获
  • pyspark.sql.utils.AnalysisException:u'Path不存在

    我正在使用标准 hdfs 与 amazon emr 运行 Spark 作业 而不是 S3 来存储我的文件 我在 hdfs user hive warehouse 有一个配置单元表 但当我的 Spark 作业运行时找不到它 我配置了 Spar
  • Talend 和 Apache Spark?

    我对 Talend 和 Apache Spark 在大数据生态系统中的定位感到困惑 因为 Apache Spark 和 Talend 都可以用于 ETL 有人可以用一个例子解释一下吗 Talend 是一种基于工具的大数据方法 通过内置组件支
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • hive 添加分区语句忽略前导零

    我在 hdfs 上有文件夹 user test year 2016 month 04 dt 25 000000 0 需要将上面的分区路径添加到test table 命令 ALTER TABLE test ADD IF NOT EXISTS
  • 如何直接将一个mapper-reducer的输出发送到另一个mapper-reducer而不将输出保存到hdfs中

    问题最终解决检查底部的我的解决方案 最近 我尝试运行 Mahout in Action 的第 6 章 列表 6 1 6 4 中的推荐示例 但我遇到了一个问题 我用谷歌搜索但找不到解决方案 问题是 我有一对映射器减速器 public fina
  • Spark on Hive SQL 查询错误 NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

    针对 Hive 2 1 0 提交 Spark 1 6 0 SQL 应用程序时出现错误 Exception in thread main java lang NoSuchFieldError HIVE STATS JDBC TIMEOUT a
  • 当我将文件存储在 HDFS 中时,它们会被复制吗?

    我是 Hadoop 新手 当我使用以下方式存储 Excel 文件时hadoop fs putcommoad 它存储在HDFS中 复制因子为3 我的问题是 是否需要3份并分别存储到3个节点中 这是 HDFS 工作的漫画 https docs
  • 无法在 Windows 10 中启动 Spark Master

    我是 Spark 新手 我正在尝试手动启动 master 在 Windows 10 中使用 MINGW64 当我这样做时 Downloads spark 1 5 1 bin hadoop2 4 spark 1 5 1 bin hadoop2
  • 将 Apache Zeppelin 连接到 Hive

    我尝试将我的 apache zeppelin 与我的 hive 元存储连接起来 我使用 zeppelin 0 7 3 所以没有 hive 解释器 只有 jdbc 我已将 hive site xml 复制到 zeppelin conf 文件夹

随机推荐

  • 史上最全Elasticsearch学习

    文章目录 Elasticsearch 一 Elasticsearch简介 安装 1 1 Elasticsearch是什么 1 2 全文搜索引擎 1 3 Elasticsearch的应用案例 1 4 Elasticsearch的下载 安装 运
  • python异常处理

    Python3 错误和异常 作为 Python 初学者 在刚学习 Python 编程时 经常会看到一些报错信息 在前面我们没有提及 这章节我们会专门介绍 Python 有两种错误很容易辨认 语法错误和异常 Python assert 断言
  • 【计算机科学与技术】信息论笔记(6):微分熵

    200803本篇是学习信息论的入门笔记 希望能与各位分享进步 这是第六章 微分熵 文章目录 6 微分熵 6 1 定义 6 2 连续随机变量的AEP 6 3 微分熵与离散的关系 6 4 联合微分熵与条件微分熵 6 5 相对熵与互信息 6 6
  • ubuntu 12.04安装jdk

    分类 LINUX 在安装之前 系统没有任何jdk软件 也就是说在终端执行 java version 将会输出如下内容 root haiyang Aspire java version 程序 java 已包含在下列软件包中 default j
  • 解决linux下图形界面卡死不能操作的问题

    由于linux系统bug很多 所以有时候用着用这就会发生图形界面卡死不能操作的情况 具体解决方法如下 1 按住ctrl alt f2 然后进入了一个黑色的shell界面 注 linux下共有六个虚拟控台 f2 f6 分别对应这不同的权限 2
  • 小程序仿微信支付键盘实现

    先上图 2 实现过程 键盘放在了vant weapp组件的弹窗框popup中 并且默认进入页面自动弹出键盘 index wxml
  • java -- Math、BigInteger、BigDecimal类和基本类型的包装类、正则表达式

    Math java lang Math 类包含用于执行基本数学运算的方法 如初等指数 对数 平方根和三角函数 类似这样的工具类 其所有方法均为静态方法 并且不会创建对象 调用起来非常简单 Math PI 静态常量 public static
  • AD器件飞出可视区域如何推拽回来

    步骤1 选择器件 步骤2 摆放器件 先说摆放器件 如下图 三个器件 加入我们需要摆放右侧的两个器件到指定区域 先选择要摆放的器件 操作如下 绘制需要摆放的区域 器件已经被移动过来了 完成 上述方法可以对大量器件进行整体移动 利用上述方法可以
  • 基于改进YOLO的玉米病害识别系统(部署教程&源码)

    1 研究背景与意义 近年来 农业科技的快速发展为农作物的种植和管理带来了许多便利 然而 农作物病害的防治仍然是一个全球性的挑战 玉米作为世界上最重要的粮食作物之一 受到了许多病害的威胁 如玉米灰斑病 玉米穗腐病等 这些病害不仅会导致玉米产量
  • IM群聊消息如此复杂,如何保证不丢不重?

    1 前言 群聊已经成为主流IM软件的基本功能 不管是QQ群 还是微信群 一个群友在群内发了一条消息 那么对于IM服务器来说需要保证 在线的群友能第一时间收到消息 离线的群友能在登陆后收到消息 由于 消息风暴扩散系数 的存在 概念详见 IM单
  • sas数字转日期格式_一个关于sas日期时间读入格式的问题

    方法一 直接使用SAS的PROC IMPORT 可以直接识别DATETIME格式 SAS版本9 2 PROC IMPORT OUT WORK T5 DATAFILE C temp csv DBMS CSV REPLACE GETNAMES
  • clickhouse优化最佳实践

    clickhouse在易企秀数据仓库项目中已投入使用两年 主要为内部用户提供快速查询和多维分析的能力 希望你在业务当中遇到的性能问题 在这里都能得到解决 Clickhouse堪称OLAP领域的黑马 最近发布的几个版本在多表关联分析上也有了极
  • 有什么事在Linux上顺理成章,在Windows就令人费解?

    Linux与Windows都是十分常见的电脑操作系统 相信大家对它们二者都有所了解 在我们的使用过程中 是否有遇到这种情况 在Linux上顺理成章 换到Windows上就令人费解 文章目录 一 介绍 2 1 Linux系统 1 2 Wind
  • c# 已知文件路径,遍历文件夹下的.lnk文件(其他类型的文件也可同样的方法操作)

    遍历文件夹下的 lnk文件 public static string ForeachFiles lnk string FilePath string files Directory GetFiles FilePath lnk SearchO
  • vue webpack3 升级webpack4

    vue webpack3 升级webpack4 据说webpack3 比webpack4 编译速度将近快了60 80 成功升级之后 于是来记录下 项目主要是vue 2 5 9 webpack 4 10 2 webpack dev sever
  • 支付宝支付回调

    1 支付宝回调地址设置在上一篇博客已经记录 地址 https blog csdn net qq 38669394 article details 106671410 2 支付宝回调方法 最主要两点 一个是如何接受参数 另一个是验签 这里需要
  • 软件工程师的衰落与程序员的崛起

    全文共4711字 预计学习时长14分钟 来源 cu manmanbuy 我周围大多数人都是软件工程师或计算机科学家 大多经验丰富且接受过严格的计算机科学教育 当然 这只能成就一个计算机科学 却不一定能成就编程 许多经验丰富的同事都痛惜年轻同
  • 用secureCRT串口工具发送hex字符串的方法

    最近工作中 遇到了需要在串口工具发送hex字符 直接在secureCRT的 交互窗口输入是不行的 我需要输入的hex字符串为 FEFE010601F9 解决方法如下 1 下载并安装winhex 下载地址 https www onlinedo
  • 怎么样使用Navicat for MySQL 导出mysql中的数据和将sql数据库文件导入到mysql数据库中

    很久没有使用navicat for mysql 了 一些基本的操作都遗忘 为避免下次再出现这种情况 先记下吧 将mysql数据文件导入到数据库中 1 在navicat 中创建一个mysql数据库链接 填写端口 用户名 密码 2 创建数据库
  • 《Hadoop权威指南》书摘-MapReduce概述

    转载请注明出处 独立博客 http wangnan tech 简书 http www jianshu com u 244399b1d776 知乎 https zhuanlan zhihu com c 121958856 MapReduce是