用 Hive 生成数据的时候,是没有 _SUCCESS 文件的。
但是我们在跑完 MR 或者 Spark 程序时,会发现数据输出目录一般都会有一个 _SUCCESS 的空文件。这个 _SUCCESS 空文件用来表示该任务运行成功。
举个例子,比如我们有两个 Spark 任务:A 任务和 B 任务。B 任务依赖于 A 任务,也就是说 B 任务要根据 A 任务的结果再判断是否运行。这时我们就可以根据 A 任务的输出目录下是否有 _SUCCESS 文件来判断 A 任务是否运行成功。
但是在用 DataX 读取 HDFS 中的数据时,有 _SUCCESS 文件会使任务报错,因此可以在 Spark 代码中加以限制,不生成 _SUCCESS 文件即可。
在 Spark 的 Driver 端参数里加上如下参数即可。
sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
或者在 Spark SQL 中设置如下参数:
set mapreduce.fileoutputcommitter.marksuccessfuljobs = false;
参考文章:
https://blog.csdn.net/wx1528159409/article/details/104779519
了解为什么 Hive 生成数据的时候,是没有 _SUCCESS 文件的:点击查看原因