澄清地图任务和减少hadoop中的任务?

时间:2014-07-07 19:09:17

标签: hadoop mapreduce hdfs

我正在阅读Hadoop: The definitive guide。在理解一些概念的过程中,我读了一些SO帖子,这让我同样令人困惑但澄清。以下是一些观点,我需要专家意见是否正确以及如果不正确会发生什么?


让我们假设这是我的HDFS在具有一个节点的Psuedo分布式集群中的外观:

/local/path/to/datanode/storage/0/blk_00001  300 MB
/local/path/to/datanode/storage/0/blk_00002  300 MB
/local/path/to/datanode/storage/0/blk_00003  300 MB
/local/path/to/datanode/storage/0/blk_00004  200 MB

我的文件总大小为1100 MB,它被分成300 MB的块(这是我的块大小)。

现在我即将开始我的Mapreduce工作:

我理解InputFormat(反过来拆分文件)决定了地图的数量。

案例1:

我有以下设置: split size mapred.min.split.size=400 MB

总共将有三个MR工作。每个都有一个400 MB的输入大小来处理。

1) Mapper 1 :这意味着第一个MR作业将使用blk_00001中的300 MB和blk_00002中的100 MB(数据位置丢失)。

2)映射器2:现在第二个映射器必须从位置101 MB blk_00002 seek +来自blk_00003的另一个200 MB。

映射器3: blk_0003上还有100 MB需要处理,而blk_0004需要处理200 MB。 现在大小为300 MB,应该整体处理。

块大小在MAPRED任务中没有任何作用

Q1:一切都正确,直到这里????????


案例2:

现在让我说我的MR工作有以下设置: mapred.tasktracker.map.tasks.maximum=3。这意味着对于任何给定节点,并行运行三个map任务。

Q2 :如果上面的所有映射器在同一节点上并行运行,它们是在具有相似优先级的不同线程中运行还是在CPU级别上运行单独的进程。


CASE 3 :如果num中的conf.setNumMapTasks(int num)大于分割数。 也就是说,我有num = 10,splits = 3.将要执行的MR工作总数为3.

** Q3:**正确??


减速机任务:

Q4 映射器必须在reducer启动之前完成 - 在我所知的所有情况下,任何不会出现的示例。因为钥匙需要排序并交给它们以减少它们。

Q5 那么mapred.reduce.slowstart.completed.maps=0.5会有什么影响。这意味着当地图任务完成50%时,启动减速器。但是reducer需要map作业才能完成。正确???

2)如果我没有指定任何内容,那么减少器的默认数量是多少。

proposed使用0.95 - 1.75 *(nodes * mapred.tasktracker.tasks.maximum)。所以,如果我的簇有5个节点,每个节点有5个核心,则公式给出(0.95 * 5 * 5)= 24个reducer。

所以我应该设置conf.setNumReduceTasks(24)????

1 个答案:

答案 0 :(得分:3)

  

Q1:一切都正确,直到这里????????

这取决于输入格式。无论您将最小分割大小设置为什么,FileInputFormat都不会进行小于块大小的分割。以下是计算拆分大小的代码。

protected long computeSplitSize(long goalSize, long minSize, long blockSize) {
  return Math.max(minSize, Math.min(goalSize, blockSize));
}

  

Q2:如果上面的所有映射器在同一节点上并行运行,它们是在具有相似优先级的不同线程中运行还是在CPU级别上运行单独的进程。

每个任务都在其自己的Java virtual machine中运行,因此需要单独的流程。

  

Q3:如果我在conf.setNumMapTasks(int num)中的num大于split的数量。也就是说,我有num = 10,splits = 3.将要执行的MR工作总数为3.

setNumMapTasks()not supported anymore,仅仅是对MapReduce系统的暗示。

  

问题4:映射器必须在reducer启动之前完成 - 在我所知的所有情况下,任何不可能的示例。因为钥匙需要排序并交给它们以减少它们。

     

Q5那么mapred.reduce.slowstart.completed.maps = 0.5会有什么影响。这意味着当地图任务完成50%时,启动减速器。但是reducer需要map作业才能完成。正确???

慢启动涉及将数据复制到适当的计算机。在所有映射器完成之前,不会调用reducer中的reduce()方法。

  

如果我没有指定任何内容,缩减器的默认数量是多少。

1

  

所以我应该设置conf.setNumReduceTasks(24)????

什么对你的任务最有效。