2012-10-02 62 views
1

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

回答

1

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

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

至于数据局部性,提交作业时,从名称节点获取输入文件(D1)的块位置,并且创建用于运行作业的映射任务保留此信息(D1,块0,位于节点1中,称为'分割'信息)。

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

减少任务的数量由您来配置。