2

我对 Hadoop 任务分配感到困惑。假设我们有 5 个输入数据 D1,D2,D3,D4,D5 那么我们有 5 个作业 J1,J2,J3,J4,J5 并且作业 J1 的输入数据是 D1 等等。现在,如果 D1 分成 4 个块,并且这些块沿着数据中心分布,那么 J1 也被分解为任务(map 和 reduce),现在我们为 J1 有多少个 map 和 reduce 任务?数据局部性如何保存?是不是说mapTask1正好需要D1的一个数据块?你能给我一个很好的解释来源吗?

4

1 回答 1

1

如果 D1 作为 4 个块存储在 HDFS 中,并且您用于读取文件的输入格式可以将文件拆分(例如 gz 压缩文件不可拆分),那么您将获得 4 个使用 D1 作为作业的映射任务输入。

mapred.min.split.size您可以通过修改和配置属性来增加/减少映射任务的数量mapred.max.split.size(再次假设您的输入文件是可拆分的,并且您的输入格式也支持它)。

至于数据局部性,当提交作业时,输入文件(D1)的块的位置是从名称节点获取的,并且为运行您的作业而创建的地图任务保留此信息(D1,块0,位于在 node1 中,称为“拆分”信息)。

当作业跟踪器开始安排您的任务时,它将检查哪些任务跟踪器具有空闲映射槽,然后确定(如果可能)您的作业的哪些任务具有拆分,其输入数据块对于任务跟踪器是“本地的”。

reduce 任务的数量由您来配置。

于 2012-10-02T23:49:32.013 回答