如果我必须逐行将文本文件转换为另一个文本文件,我们如何设计mapper / reducer。
我写了一个简单的map / reduce程序,它做了一个小的转换,但下面的细节要求更详细一点:
答案 0 :(得分:3)
将文件拆分成行,并行转换(映射)每一行,将生成的行连接(缩小)到一个文件中?
答案 1 :(得分:1)
您不能依赖第一行中的列信息。如果您的文件大于HDFS块,则您的文件将被分成多个拆分,每个拆分交给不同的映射器。在这种情况下,只有接收第一个分割的映射器才会收到带有列信息的第一行,其余的则不会。
我建议将文件特定的元数据传递到单独的文件中,并将其作为辅助数据进行分发。 mapper或reducer任务可以读取元数据文件。
通过Hadoop Context对象,您可以获取映射器正在处理的文件的名称。在所有这些之间,我认为您拥有所引用的所有上下文信息,并且您可以进行文件特定的转换。即使不同文件的转换逻辑不同,映射器输出也需要具有相同的格式。
如果使用reducer,可以将reducer的数量设置为1,以强制所有输出聚合为一个文件。