Hadoop mapper或reducer如何将数据写入HDFS?
在MapReduce程序中,我们只需设置输出路径Hadoop mapper或reducer如何将数据写入HDFS?,hadoop,hdfs,Hadoop,Hdfs,在MapReduce程序中,我们只需设置输出路径FileOutputFormat.setOutputPath,并使用mapper或reducer的上下文将结果写入HDFS文件。write(key,value) 文件编写概念实际上是如何工作的 Mapper/Reducer将持续发送记录 每个记录是否会直接发送到HDFS 或 一旦应用程序完成,它将执行copyFromLocal 或 是否在本地文件系统中为每个映射器或还原器创建临时文件 记录被写入字节流,并定期刷新到HDFS上的磁盘。每个记录都不
FileOutputFormat.setOutputPath
,并使用mapper或reducer的上下文将结果写入HDFS文件。write(key,value)
文件编写概念实际上是如何工作的
- Mapper/Reducer将持续发送记录 每个记录是否会直接发送到HDFS
copyFromLocal
或
是否在本地文件系统中为每个映射器或还原器创建临时文件
记录被写入字节流,并定期刷新到HDFS上的磁盘。每个记录都不是单独编写的,因为这将是一个非常昂贵的操作。此外,数据不会写入本地文件系统,因为这将是一个非常昂贵的操作
每当我对Hadoop有疑问时,我都倾向于利用它的开源特性,深入研究源代码。在本例中,您需要查看输出数据时使用的类—TextOutputFormat和FSDataOutputStream。映射任务刷新本地磁盘中的数据(“溢出记录”是其名称)。Reduce tasks将数据发送到HDFS。当您说“Reduce tasks将数据发送到HDFS”时,这是否意味着Map Reduce将数据附加到一个文件中?我不知道Map Output实现的细节,但我记得在某个地方读到过哪个Map操作将您的输出写入SequenceFile格式以及每个文件的io.file.buffer.size大小。合并器将在此之前执行,排序操作将读取这些文件。但我现在没有任何参考资料。