gpt4 book ai didi

hadoop - 如何在MapReduce框架中分割输入文件?

转载 作者:行者123 更新时间:2023-12-02 20:09:08 25 4
gpt4 key购买 nike

假设有一个m映射程序的映射缩减作业,由输入文件F提供。我的问题是,如果我多次执行此mapreduce作业,那么所有块的形成方式是否都相同?也就是说,mapreduce框架拆分F的要点保持不变还是可能不同?

例如,假设F包含以下几行:

1,2

3,5

5,6

7,6

5,5

7,7

在第一次运行中,mapreduce分为两个块,如下所示:

块1:

1,2

3,5

5,6

块2:

7,6

5,5

7,7

我的问题是,如果再次运行拆分,拆分的方式是否保持不变?

此外,每个块都具有可在映射器中使用的唯一名称吗?

最佳答案

我的问题是,如果再次运行拆分,拆分的方式是否保持不变?

的确,首先将输入数据拆分为多个块,然后将这些块中的每个块馈送到映射器。但是,它并不总是64M。也许您对HDFS块(通常为64M)和MR拆分感到困惑。两者是完全不同的东西。尽管您的分割大小和块大小可能相同。

谈到您的实际问题,是的,对于所有使用相同InputFormat 的作业都是相同的。原因是,创建拆分是使用InputInput的工作。确切地说,InputFormat的 getSplits(JobContext context)内部的逻辑控制拆分的创建。因此,如果所有作业都相同,则拆分创建也将相同。

此外,每个块都具有可在映射器中使用的唯一名称吗?

每个块都有2件东西:

  • 字节长度。
  • 一组存储位置,仅是主机名字符串。

  • 编辑:

    如何获取映射器正在执行的文件的名称:
    FileSplit fileSplit = (FileSplit)context.getInputSplit();
    String filename = fileSplit.getPath().getName();

    现在,您可以在此文件上打开 FSDataInputStream 并读取其内容。

    希望它能回答您的查询。

    关于hadoop - 如何在MapReduce框架中分割输入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858630/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com