欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Spark写入HDFS数据SUCCESS文件生成控制

Spark写入HDFS数据SUCCESS文件生成控制

2025/6/8 17:50:58 来源:https://blog.csdn.net/weixin_55629186/article/details/144810964  浏览:    关键词:Spark写入HDFS数据SUCCESS文件生成控制

Spark写入HDFS数据SUCCESS文件

        • 1、_SUCCESS的控制
        • 2、_SUCCESS的实现




1、_SUCCESS的控制

与Hive不同,MapReduce和Spark在执行写入HDFS数据任务时,数据输出目录一般都会有一个名为_SUCCESS的空文件,该文件仅用来表示任务执行成功

但有些时候,在读取HDFS中的数据时,有_SUCCESS文件会使任务报错。此时,可以在 Spark代码中加以限制,不生成_SUCCESS文件即可

在Spark的Driver端配置如下参数:

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

或在SparkSQL中配置如下参数:

set mapreduce.fileoutputcommitter.marksuccessfuljobs=false;
2、_SUCCESS的实现

在Hadoop的源码中,有一个抽象类OutputCommitter专门负责Job的生命周期管理,Hadoop默认使用org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter作为具体的实现,在FileOutputCommitter的实现中,Hadoop会根据参数mapreduce.fileoutputcommitter.marksuccessfuljobs的值来判断是否要生成_SUCCESS文件。因为该参数的默认值为true,所以我们平常跑的任务基本都会输出_SUCCESS标志文件

Spark则复用了这个OutputCommitter机制,Spark任务在运行时会从配置中获取指定的实现类,如果没有指定,Spark默认会使用org.apache.hadoop.mapred.FileOutputCommitter作为实现

相反,Hive则自己实现了一个NullOutputCommitter来作为OutputCommitter的实现类,空实现其中的所有方法,即什么也不做,因此也就无法生成_SUCCESS文件

相关描述参考:https://stackoverflow.com/questions/13082606/getting-success-file-for-hive-script

更多源码细节参考文末参考文章

参考文章:
https://blog.csdn.net/u013332124/article/details/94468945
https://blog.csdn.net/u013332124/article/details/92001346

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词