hadoop MapReduce Job失效模型

实验5:MapReduce 初级编程实践 由于优快云上传md文件总是会使图片失效 完整的实验文档地址如下: https://download.youkuaiyun.com/download/qq_36428822/85709497实验内容与完成情况: (一)编程实现文件合并和去重操作 对于两个输入文件,即文件 A 和文件 B,请编写 MapReduce 程序,对两个文件进行合并, 并剔除其中重复的内容,得到一个新的输出文件 C。下面是输入文件和输出文件的一个样例 供参考。 输入文件 A 的样例如下: 20170101 x 20170102 y 2 阅读详情
hadoop设计的初衷就是容错.计算任务(MapReduce task)能够在节点宕机或其它随机错误下自行恢复.

    但是hadoop并不完美,在实际运营中,我发现MapReduce Job仍然经常会因为一些偶发性错误而

    运行失败.所以我决定深入探究一下各种不同因素是如何导致job失败的.

    如果一个hadoop job的某个给定task在失败预定次(默认是4)后,整个job就会失败.

    这可以通过"mapred.map.max.attempts"和"mapred.reduce.max.attempts"属性来设置.

    一个task可能由于各种偶发原因而失败 - 比如我发现的情况就有磁盘满,hadoop本身的bug,或者硬件失效(e.g.: 磁盘只读).

    下面是针对job失败的概率总结的一个大致公式:

    P[个别task失败的最大次数] = P[task失败] ^ (task总失败次数)

    P[task成功] = 1 - P[个别task失败的最大次数]

    P[job成功] = P[task成功] ^ (task数量)

    P[job失败] = 1 - P[job成功]

    P[job失败] = 1 - (1 - P[task失败] ^ (task总失败次数) ) ^ (task数量)

    task失败的最大次数通过mapred.max.max.tracker.failures设置(默认为4).

    我们来分析一个负载为100000个map task的job:

    task数量  最大失败数  P[task失败]  P[job失败]

    100000  4  0.01  0.00099950017664

    100000  4  0.02  0.015872681207036

    100000  4  0.03  0.077806338804489

    100000  4  0.04  0.22585828487781

    100000  4  0.05  0.46473961691604

    100000  4  0.06  0.72637819455556

    100000  4  0.01  0.00099950017664

    100000  3  0.01  0.095162627208542

    100000  3  0.005  0.012422200279389

    100000  2  0.005  0.91791756653541

    如果task失败概率低于1%的话,job失败概率几乎可以不计. 重点就是保证集群稳定,保持较小失败概率   .

    我们同样可以看到"mapred.max.tracker.failures"参数的重要性, 如果其取值小于4时,job失败的概率明显上升,就算task失败概率降低到0.5%   .

    相较mapper而言, reducer运行的时间更长,这意味着其更容易遭受意外事故.也就是说,我们可以肯定reducer的失败概率比mapper要大很多.但是从另一方面来说,通常reducer task的数量要小于mapper数量,这个又作了一定补偿.

    下面我们来看看一组基于reducer的失效概率分析:

    task数量  最大失败数  P[task失败]  P[job失败]

    300  1

    0.1  0.99999999999998

    300  2

    0.1  0.95095910592871

    300  3

    0.1  0.2592929678439

    300  4

    0.1  0.029555922215749

    300 ; 4  0.01  0.00000299999553

    300  4

    0.05

    0.001873249134037

    300  4  0.1  0.029555922215749

    300  4

    0.2  0.38145442906123

    300  4

    0.3  0.9128299934708

    从上述数据中可以发现, 只有当reducer失败的概率超过10%时才会导致一定的job失败几率.(同样可发现, task最大失败数低于3时,job失败率显著上升).
   坏节点(有故障的机器节点)

    在整个失效模型中还有一个很重要的因子需要考虑,那就是失效节点.通常若出现整个节点失效,那么在此节点上运行的所有task都会失败,失效原因可能是因为磁盘损坏(通常的症状是出现 磁盘只读   或 盘符丢失   ), 磁盘写满等.一旦出现坏节点,你会发现在此节点被列入黑名单之前(被job列入黑名单的节点不会被job再次分配其任务),会有一大堆 map/reduce task失败.为了简化我们的分析,我假设给定坏节点会导致固定数量的task失败.另外,我假设给定task只会在给定坏节点上中招一次, 因为节点会在不久后被列入黑名单.我们用"b-tasks"来标记在坏节点上失败过的task, 其它task标记为"n-tasks"."b-task"会在坏节点上遭受一次失败, 所以后续如果job再出现"最大task失败数 - 1"次失败task就会导致job失败.在我们的集群中,我曾发现一个坏节点引发3个task失败, 那么我就以此为据, 给出reduce阶段失效概率的公式:

    b-tasks数量 = 坏节点数量 * 3

    P[所有b-task都成功] = (1 - P[task失败概率] ^ (最大task失败数 - 1)) ^ (b-tasks数量)

    P[所有n-task都成功] = (1 - P[task失败] ^ (最大task失败数)) ^ (task数量 - b-task数量)

    P[job成功] = P[所有b-task成功] * P[所有n-task成功]

    P[job成功] = (1-P[task失败]^(最大task失败数 - 1))^(b-task数量) * (1-P[task失败]^(最大task失败数))^(最大task数 - b-task数)

    P[job失败] = 1 - P[job成功]

    因为mapper数量通常较多,所以少数坏节点对于以上公式计算的结果并没有太大的出入.但对reducer而言,其数量较少,所以以上公式计算出

    的结果就有比较明显的变化:

    task数量  最大失败数  P[task失败]  坏节点数量  P[job失败]

    300  4  0.1  0

    0.02955592221574

    300  4  0.1  1

    0.03217402532872

    300  4  0.1  2

    0.03478506521768

    300  4  0.1  5

    0.04257599583811

    300  4  0.05  0  0.00187324913403

    300  4  0.05

    5

    0.00364969637240

    300  4  0.05  10

    0.00542298192335

    300  4  0.05  20

    0.00896009046141

    值得庆幸的是结果并没有发生戏剧性的变化 - 在5个坏节点的情况下,只导致失败率提高到了排除坏节点条件下的1.5~2倍.

    最后的结论就是, hadoop在task失效概率保持较低的情况下,容错性还是很好的.基于前面的一些数据分析,我们发现"最大task失败数 " 最好设置为4, 当task失败率达到1%时,你需要开始考虑集群的稳定性了.当然,你可以通过增大"最大task失败数"来提高稳定性,但是如果有太多task失败, 那么job执行的性能也会降低.所以再强调一次, 重点还是 ---  保持集群稳定 .

大数据|MapReduce模型 | Hadoop MapReduce的基本工作原理 MapReduce模型 | Hadoop MapReduce的基本工作原理 阅读详情

相关推荐

Hadoop学习笔记(五)MapReduce

MapReduce概述 源自于Google的MapReduce论文,发表于2004年12月 Hadoop MapReduce是Google MapReduce的克隆版 MapReduce优点:海量数据的离线处理、易开发、易运行。 所谓海量数据,说明MapReduce可以处理的数据量非常大,离线处理说明MapReduce跟实时响应不同,用户将作业提交,系统按批次进行处理,由于数据量大,自然非常耗时...

微信搜:import_bigdata,大数据领域硬核原创作者 511

Hadoop Map Reduce 限制counter的默认数量120

最近用Hadoop统计将近一亿行的数据,由于每一行的列再加上Overall的统计 counter数量超过了120,故在Hadoop的运行过程中,抛出如下异常: [java] view plaincopyprint? org.apache.hadoop.mapreduce.counters.LimitExceededException: Too m

momo的专栏 1867

STM32 FMC驱动AD7606实战:从硬件连接到时序调试全流程解析

本文详细解析了STM32 FMC驱动AD7606的全流程,包括硬件连接、FMC接口配置、驱动程序设计和时序调试。通过实战案例,展示了如何利用STM32的FMC总线实现与AD7606的高效数据传输,特别强调了电源设计、信号连接和PCB布局等关键要点,为嵌入式数据采集系统开发提供了实用指导。

aa123的博客 1005

生存回归(加速失效时间模型)算法原理及Spark MLlib调用实例(Scala/Java/python)

生存回归(加速失效时间模型) 算法介绍:         在spark.ml中,我们实施加速失效时间模型(Acceleratedfailure time),对于截尾数据它是一个参数化生存回归的模型。它描述了一个有对数生存时间的模型,所以它也常被称为生存分析的对数线性模型。与比例危险模型不同,因AFT模型中每个实例对目标函数的贡献是独立的,其更容易并行化。          给定协变量

liulingyuan6的博客 1万+

nupkg 本地安装_使用Nuget安装离线包nupkg

一:Nuget简介:NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到Nuget的站点。如果想要使用别人已经开发好的工具或是库,只需要从站点获得这个package,并且安装到自己的Visual Studio项目或是解决方案里。NuGet能更方便地把一...

weixin_34460380的博客 1万+

AD7768与STM32F439的硬件设计避坑指南:如何优化高精度ADC系统的电源与PCB布局

本文详细解析了AD7768与STM32F439在高精度ADC系统硬件设计中的关键问题与优化方案。从电源系统设计、PCB布局到基准电压选型,提供了实用的避坑指南和实测数据,帮助工程师提升系统性能至110dB动态范围。特别强调了SPI信号布线和电源滤波对ADC精度的重要影响。

sugar的博客 735

学习笔记:MapReduce作业失败原因及其恢复过程(理论层级)

MR作业失败一般可能有以下五种情况: 任务运行失败 AM运行失败 NM运行失败 RM运行失败 以上四种失败情况严重程度同以上排序,RM运行失败最为严重。 任务运行失败 异常模式 用户代码抛出的异常 jvm运行异常 任务挂起 任务异常后的处理过程 ...

敲烂键盘为止 2756

【OWL部署】Manus又一开源平替OWL真的很好用吗?手把手带你部署并运行你的AI助手OWL(对接Qwen、硅基流动接口)

本文介绍了通用人工智能OWL的部署及国内接口对接,全篇干货满满,手把手教学。

MosuoLc的博客 4042

hadoop2 如何在执行mapreduce的时候指定job的名字

如果想在执行mapreduce的时候指定job的名字,则在 public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf,args).ge

www.hohode.com 1715

代谢组数据分析(三):代谢组降维分析

本文详细介绍了代谢组学中常用的降维分析方法,包括PCA、PLS-DA和OPLS-DA。PCA通过线性变换降低数据维度,便于数据可视化和异常值检测;PLS-DA是一种有监督的模式识别方法,适用于分类和预测;OPLS-DA通过正交分解避免过拟合,更准确地筛选差异代谢物。降维分析在揭示样本间差异和发现生物标志物方面具有重要意义

专注生信领域 3790

交换机初始化配置详解

MGMT或称MGT(Management Port,管理端口)是一个可以连接计算机的三层主机端口,如下图所示。只需使用一条双绞线跳线,就可以将计算机的以太网端口与交换机的MGMT端口连接在一起,实现对交换机的配置与管理。也就是说,可以使用MGMT端口代替Console端口实现对交换机或交换机堆叠的网络管理。MGMT端口既可用于交换机的初始化,也可以在交换机初始化完成后,以Telnet、Web浏览器或Cisco CNA方式进行管理。当将计算机连接到独立的交换机时,连接方式如下图所示。

悦分享 1995

MapReduce 原理与实践

MapReduce 简介 MapReduce 核心思想 Hadoop MapReduce 是一个编程框架,它可以轻松地编写应用程序,以可靠的、容错的方式处理大量的数据(数千个节点)。 正如其名,MapReduce 的工作模式主要分为 Map 阶段和 Reduce 阶段。 一个 MapReduce 任务(Job)通常将输入的数据集分割成独立的块,这些块被 map 任务以完全并行的方式处理。框架对映射(map)的输出进行排序,然后将其输入到 reduce 任务中。通常,作业的输入和输出都存储在文件系统中。框架负

Create value with coding 2万+

SAP-ABAP:SAP的BAPI_GOODSMVT_CREATE 深度解析

BAPI_GOODSMVT_CREATE 深度解析** **功能定位**:SAP 标准接口,支持 **11 种库存移动场景**(收货/发货/转储/生产投料等),是 MM 模块集成核心

baidu_35680696的博客 1826

又双叒叕来更新啦!Hadoop———MapReduce篇

文章目录MapReduce(计算)MapReduce概述MapReduce定义MapReduce的优缺点核心思想MapReduce计算程序运行时的相关进程官方WordCount源码MapReduce编程规范手动实现WordCountWindows上Java程序实现集群上运行序列化序列化概述自定义bean对象实现序列化接口实操实现MapReduce框架原理数据切片和MapTask并行度决定机制Job提交源码过程分析Job切片源码CombineTextInputFormat切片机制实操测试FileInputFo

5akura's Blog 835

【AIGC】大模型面试高频考点07-注意力(Attention)篇

AIGC面试高频考点

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3363

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hadoop组件之MapReduce框架

Hadoop组件之MapReduce框架此处的介绍不是书上的抄写,只作理解为主,所以请谅解语言用词的精确性。而且不可能用一篇文章就学会MapReduce 框架,仅作为引导。认识MapReduceMapReduce是一种编程模型,用于大规模数据集的离线式并行运算。关于实时计算用storm和spark,后面会介绍。"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来

Steve lock的blog记录之地 1647

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Hadoop-分布式并行编程模型MapReduce

MapReduce是一种分布式并行编程模型,用于大规模数据集(大于1 TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数Map和Reduce上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,完成海量数据的处理。通俗地说,MapReduce的核心思想就是“分而治之”,它把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。...

wulj666的博客 2402

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hadoop知识点总结——MapReduce

MapReduce核心思想以及体系结构

笑看风云路的博客 654
上一篇: java正则表达式 过滤特殊字符的正则表达式
Java_Cowboy
博客等级 码龄19年 59粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值