Hadoop MapReduce作业如何生成无额外_SUCCESS文件的输出
如何在Hadoop MapReduce作业中禁用_SUCCESS文件生成
嘿,这个需求我太熟悉了——有时候下游脚本或者数据处理流程里,那个自动生成的_SUCCESS文件确实会添点小麻烦。要解决这个问题,有两种简单可靠的方法,看你适合哪种场景:
方法一:提交作业时通过命令行参数指定
如果你是通过hadoop jar命令提交作业,可以直接在命令里添加一个配置参数,禁用成功标记文件的生成:
hadoop jar your-job-jar-file.jar com.your.package.YourMainClass \ -Dmapreduce.job.success.completion.indicator=false \ /path/to/input /path/to/output
这个参数的作用就是告诉Hadoop:作业完成后不要创建_SUCCESS文件。
方法二:在MapReduce代码中配置Job对象
如果你是开发MapReduce作业的开发者,可以在代码里直接给Job实例设置这个配置,这样每次运行作业都会自动生效,不用每次提交都加参数:
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.Job; public class YourMapReduceJob { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Your Job Name"); // 常规配置:设置主类、Mapper、Reducer、输出格式等 job.setJarByClass(YourMapReduceJob.class); // ... 其他必要配置 // 关键配置:禁用_SUCCESS文件 job.getConfiguration().setBoolean("mapreduce.job.success.completion.indicator", false); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
注意事项
- 如果你使用的是Hadoop 1.x版本(比较老了,但还是有人在用),参数名要改成
mapred.job.success.completion.indicator(前缀是mapred而不是mapreduce)。 - 这个设置只会影响_SUCCESS文件的生成,不会干扰作业的正常执行和输出结果的写入,完全不用担心数据问题。
内容的提问来源于stack exchange,提问作者Gopal Kumar
相关产品推荐
相关产品推荐

