MapReduce应用开发(四) 作业调优和MapReduce的工作流

本文介绍了MapReduce作业的调优策略,包括检查mapper和reducer数量、combiner、中间值压缩及自定义序列化的优化。强调了本地优化可能不适用于集群环境,并提到了HPROF分析工具的使用。此外,文章还探讨了MapReduce的工作流设计,建议在处理复杂问题时避免增加单个作业的复杂度,可以使用Pig, Hive, Spark等高级语言。文章介绍了线性作业链、JobControl类实现的有向无环图DAG以及Apache Oozie作为工作流管理系统的优势,如处理作业依赖和失败重试。" 133232031,20037361,Go语言中的匿名函数与闭包原理,"['golang', '开发语言', '后端']
摘要由CSDN通过智能技术生成

作业调优

1) 检查以下项是否可以优化

mapper数量    reducer数量    combiner    中间值的压缩    自定义序列化    调整shuffle

2) 分析任务

Hadoop允许分析作业中的一部分任务,任务完成时把分析信息存储以使用标准分析工具分析

本地作业运行器与集群是不同的环境,且数据流模式也不同,如果MR作业是I/O密集的,那么本地优化的对于集群可能没帮助,有些问题只会在集群上重现,要到实际集群中取比较执行时间

HPROF分析工具

通过配置属性或者调用JobConf的方法控制分析过程

启用分析: mapreduce.task.profile设置true

默认只分析ID为0,1,2的map和reduce任务,设置mapreduce.task.profile.maps和mapreduce.task.profile.reduces配置要分析的任务ID

任务的分析输出和任务日志存放在NodeManager的本地日志目录的userlogs下


MapReduce的工作流

1) 如果处理复杂的问题,增加作业的数量,不是增加作业(map函数和reduce函数)的复杂度

2) 也可以使用高级语言Pig Hive Spark等处理复杂问题

使用多个作业解决MR问题组成一个MR工作流

当工作流中不止一个作业时,如何管理作业按顺序执行?

1) 线性的作业链

JobClient.runJob(conf1);

JobClient.runJob(conf2);

如果有一个Job运行失败,则之后无法继续运行

利用waitForCompletion()方法的布尔返回值

2) 有向无环图DAG(Directed acyclic Graph)

org.apache.hadoop.mapreduce.jobcontrol.JobControl类

表示一个作业的运行图,设置作业配置,作业之间的依赖关系,根据以来顺序执行

如果一个作业失败,将不执行与之有依赖的后续作业

3) Apache Oozie

运行工作流的系统,作业相互依赖,管理数千工作流 + 每个工作流作业可能有好几十个,可以处理失败工作流的重运行,Oozie作为服务器运行,客户端提交工作流到服务器,工作流由action节点和控制流节点组成的DAG

工作流引擎存储和运行不同类型的作业;coordinator引擎基于预定义的调度策略和数据可用性运行工作流作业

action节点执行工作流任务,控制流节点构建条件逻辑,管理工作流执行,工作流结束时,Oozie发送HTTP回调向客户端通知工作流状态


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值