【问题标题】:How mapper or reducer writes data to HDFS?mapper 或 reducer 如何将数据写入 HDFS?
【发布时间】:2015-02-18 02:03:21
【问题描述】:

在MapReduce程序中,我们只需设置输出路径FileOutputFormat.setOutputPath,然后使用mapper或reducer的context.write(key, value)将结果写入HDFS文件;

文件写入概念实际上是如何工作的?

  • Mapper/Reducer 将不断地发出记录。

    每条记录会直接发送到HDFS吗?

一旦申请完成,它会发送copyFromLocal?

它在本地文件系统中为每个 mapper 或 reducer 创建一个临时文件?

http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Example:_WordCount_v1.0

【问题讨论】:

  • 映射任务刷新本地磁盘中的数据(“溢出记录”是其名称)。减少任务将数据发送到 HDFS。
  • 当你说“Reduce 任务向 HDFS 发送数据”时,是否意味着 Map reduce 将数据附加到文件中?
  • 我不知道 Map Output 的实现细节,但我记得在某处读过哪个 Map 操作以 SequenceFile 格式写入输出,每个文件的大小为 io.file.buffer.size。在此之前会执行组合器,排序操作会读取这些文件。但我现在没有任何参考资料。

标签: hadoop hdfs


【解决方案1】:

记录被写入字节流,并定期刷新到 HDFS 上的磁盘。每条记录都不是单独写入的,因为那将是一项非常昂贵的操作。此外,数据不会再次写入本地文件系统,因为这将是一项非常昂贵的操作。

每当我对 Hadoop 中的事物有疑问时,我倾向于利用其开源特性并深入研究源代码。在这种情况下,您需要查看输出数据时使用的类 - TextOutputFormat 和 FSDataOutputStream。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多