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

作业调优

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回调向客户端通知工作流状态


你可能感兴趣的:(Hadoop,MapReduce)