Haoop Mapreduce 中的FileOutputFormat类

FileOutputFormat类继承OutputFormat,需要提供所有基于文件的OutputFormat实现的公共功能,主要有以下两点:
(1)实现checkOutputSpecs方法
checkOutputSpecs方法一般在作业被提交到JobTracker之前,由JobClient自动调用,以检查输出目录是否存在,如果目录存在则抛出异常,以防止之前的数据被覆盖。
(2)处理side-effect file
任务的side-effect file并不是任务的最终输出文件,而是具有特殊用途的任务专属文件。其典型应用是时执行推测式任务。在Hadoop中,因为硬件老化、网络故障等问题,同一个作业可能会因为某些任务的执行速度影响其他任务,导致拖慢整个作业的整体速度。所以Hadoop会在另外一个节点上启动同一个相同的任务,该任务被称为推测式任务,最先完成的任务的计算结果便是这块数据对应的处理结果。为了防止两个任务输出到同一个文件时产生冲突,FileOutputFormat会为每个Task的数据创建一个side-effect file,当Task完成后,再移动到最终输出目录。

默认情况下,当作业成功执行后,会在最终结果目录下生成空文件_SUCCESS。该文件主要为高层应用提供作业运行完成的标识,比如,Oozie需要通过检测结果目录下是否存在该文件判断作业是否运行完成。

猜你喜欢

转载自www.cnblogs.com/wgyang/p/10398707.html
今日推荐