我有一个多阶段/工作mapreduce计划。我的第一个输入必须是TextInputFormat,最后一个输出必须是TextOutputFormat。我想要实现的是在第一个Job中将格式从Text转换为SequenceFile。就这样:
TextInputFormat
Job1.execute()
SequenceFileOutputFormat
SequenceFileInputFormat
Job2.execute()
SequenceFileOutputFormat
...
SequenceFileInputFormat
JobLast.execute()
TextOutputFormat
在所有示例中,我发现这是通过创建一个额外的Jobs来实现的,它只是将输入写为SequenceFile而另一个读取SequenceFile并以不同的格式存储它。这可以在不使用额外工作的情况下完成吗?我能做那样的事吗:
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(SequenceFileOutputFormat.class);
虽然作业实际上正在执行其计算。如何在不创建两个额外作业(写入和读取)的情况下实现此目的。
问题解决了,我在代码中的错误,抱歉。
答案 0 :(得分:2)
您当然可以以任何您想要的形式存储输出。你真的不需要一份单独的工作。 SequenceFileOutputFormat
可以存储任何类型的键值,因此只需说明conf.setOutputFormat(SequenceFileOutputFormat.class);
即可。你试过吗?不行吗?但请确保您的下一个地图作业的输入键和值类与您用于上一个减速器的输出键/值类兼容。