我有一个多阶段/作业mapreduce程序。我的第一个输入必须是TextInputFormat,最后一个输出必须是TextOutputFormat。我想实现的是在第一项作业中将格式从文本转换为序列文件。因此:
TextInputFormat
Job1.execute()
SequenceFileOutputFormat
SequenceFileInputFormat
Job2.execute()
SequenceFileOutputFormat
...
SequenceFileInputFormat
JobLast.execute()
TextOutputFormat
在所有示例中,我发现这是通过创建一个额外的作业来实现的,该作业只是将输入作为序列文件写入,另一个作业读取序列文件并以不同的格式存储。是否可以在不使用其他作业的情况下完成此操作?我可以做这样的事情吗:
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(SequenceFileOutputFormat.class);
当作业实际执行其计算时。如何在不创建两个额外作业(写入和读取)的情况下实现这一目标。
问题解决了,我在代码中的错误,对此感到抱歉。
您当然可以以任何您想要的形式存储输出。你真的不需要一份单独的工作。 SequenceFileOutputFormat
可以存储任何类型的键值,因此只需说明conf.setOutputFormat(SequenceFileOutputFormat.class);
就可以了。你试过吗?没用吗?但请确保下一个映射作业的输入键和值类与用于最后一个化简器的输出键/值类兼容。