MapReduce运行机制(四) 任务的执行

任务执行环境

Hadoop提供运行环境信息

1) 处理文件名称

2) 任务的尝试次数

3) 作业配置信息...

Streaming环境变量

Hadoop设置作业配置参数作为Streaming环境变量,下划线代替非字母数字的符号

1) os.environ["mapreduce_job_id"]    Python

2) -cmdenv 设置环境变量

    -cmdenv MAGIC_PARAMETER=abracadabra


推测执行

1) Hadoop不会诊断或修复执行慢的任务,如果有任务执行慢,会检测到并在其他NM上执行一个相同的任务作为备份,这就是任务的"推测执行"

2) 任务完成后,任何正在运行的重复任务将被终止,如果备份任务完成,原任务也会被终止

3) 推测执行只是优化,并不是可靠的

    > 软件缺陷导致的问题推测执行无法避免,相同的软件缺陷影响推测执行,要修复软件缺陷,加速任务运行

4) 推测执行默认启用,可以基于集群,或基于作业中的任务

5) 为什么关闭推测执行

    > 推测执行为了减少执行时间,但同样占用了集群资源,降低集群效率,不能过度使用,所以一般是在集群关闭这个选项,根据个别作业来开启

    > reduce任务一般都是关闭推测执行,因为每次都重新获取map输出增加网络传输

    > reduce中为了非幂等任务,更多是将任务写成幂等的并使用OutputCommitter提升最终结果的输出速度


关于OutputCommitters

1) Hadoop提交协议确保作业和任务都成功或失败,使用抽象类OutputCommitter实现 

2) OutputFormat.getOutputCommitter()确定

    > 默认为FileOutputCommitter

    > 默认最终输出目录 mapreduce.output.fileoutputformat.outputdir,并创建临时工作空间_temporary

    > 可以自定义OutputCommitter

3) 作业

    > 如果作业成功,调用commitJob(),删除临时工作空间并在输出目录创建一个_SUCCESS文件,告知客户端作业完成

    > 如果作业不成功,调用abortJob(),删除临时工作空间,作业失败

4) 任务

    > 任务执行框架保证在多次任务尝试的情况下,只提交一个任务。

    > setupTask() commitTask() abortTask()

任务附属文件

1) 任务附属文件可以通过写入任务的工作目录而输出到最终结果目录

2) 任务工作目录

    > mapreduce.task.output.dir

    > FileOutputFormat.getWorkOutputPath()



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