我对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的一个数据块?你能给我一个很好的解释来源吗?
答案 0 :(得分:1)
如果D1作为4个块存储在HDFS中,并且您用来读取文件的输入格式可以将文件拆分(例如gz压缩文件不可拆分),那么您将获得4个作业的地图任务使用D1作为输入。
您可以通过修改mapred.min.split.size
和mapred.max.split.size
配置属性来增加/减少地图任务的数量(再次假设您的输入文件是可拆分的,并且您的输入格式也支持它)。
对于数据位置,在提交作业时,将从名称节点获取输入文件(D1)的块位置,并且为运行作业而创建的映射任务将保留此信息(D1,块0,位于node1,称为“拆分”信息。)
当作业跟踪器来安排任务时,它将检查哪些任务跟踪器具有空闲映射槽,然后识别(如果可能)作业的哪些任务具有拆分,其输入数据块对于任务跟踪器是“本地的”
减少任务的数量取决于您配置。