Hadoop任务分配



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

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

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

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

当作业跟踪器安排您的任务时,它会检查哪些任务跟踪器有可用的映射槽,然后确定(如果可能的话)您的作业中哪些任务有输入数据块是任务跟踪器"本地"的拆分。

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

最新更新