7.4mapreduce任务执行--环境配置、推测执行、outputCommter提交协议

1.1  任务的执行

1.1.1         任务执行环境

Map和reduce的任务会有一些属性,创建任务时传入,可以通过任务的函数(旧版configure()函数)或者对象方法获取这些属性。 

 

1.1.2         推测执行

一个作业被分解为多个任务,并发的执行多个任务,提高速度,但是如果某个任务执行的慢就会拖后腿,所以检测到执行慢的任务,就会另起一个系相同的任务作为备份,这就是任务的推测执行。哪一个先执行成功,另外一个会被终止。这种方法不能避免软件本身的缺陷。推测执行会占用额外的资源,影响整体的吞吐量。任意重复的reduce任务,必须获取所有map输出,这会增大网络传输。所以也会关闭推测执行,根据特别作业开启该功能。

 

1.1.3         outputCommiters提交协议

提交协议用来确保作业和任务都完成成功或失败,旧版本通过jobconf的setOutputCommitter()或配置中的mapred.output.committter.class来设置。新版本中由OutputFormat通过getOutputCommitter()方法确定,默认值是FileOutputCommitter。可以重新实现OutputCommitter虚拟类,来做一些特殊的设置或清理。

 

Setupjob()初始化方法,作业运行前调用,设置输出目录(mapreduce.output.fileoutformat.outputdir),建立临时的工作空间_trmporary。这些目录在写任务输出时才被创建。

Commitjob()作业成功提交方法,将输出结果移动到最后的输出路径(mapreduce.output.fileoutputformat.outputdir)删除临时的工作空间,并且在输出目录中创建_success隐藏的标志文件。

Abortjob()终止任务方法,意味着作业失败或终止,也会删除作业的临时工作空间。推测任务中,一个任务成功,其它相同的推测任务取消。

needTaskCommit()判断是否需要提交任务,例如当一个任务没有任何输出,则不必运行分布提交协议,直接跳过提交阶段。

任务附属文件,每个任务有一个任务附属文件,任务的输出结果先写入附属文件,提交任务时,才将附属文件输出到输出目录(mapreduce.task.output.dir),失败的任务,附属文件删除。OutputCommitter协议避免了同一个任务的多个实例向同一输出目录输出文件。

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

https://www.cnblogs.com/bclshuai/p/11380657.html

原文地址:https://www.cnblogs.com/bclshuai/p/12233843.html