hadoop任务分配

j91ykkif  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(314)

我对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的一个数据块?你能给我一个很好的解释吗?

flvtvl50

flvtvl501#

如果d1作为4个块存储在hdfs中,并且您用来读取文件的输入格式可以将文件拆分(例如gz压缩文件是不可拆分的),那么对于使用d1作为输入的作业,您将获得4个map任务。
可以通过修改 mapred.min.split.size 以及 mapred.max.split.size 配置属性(同样假设您的输入文件是可拆分的,并且您的输入格式也支持它)。
至于数据位置,提交作业时,从名称节点获取输入文件(d1)的块位置,为运行作业而创建的Map任务保留此信息(d1,块0,位于节点1中,称为“拆分”信息)。
当作业跟踪器来安排您的任务时,它将检查哪些任务跟踪器有空闲的Map槽,然后确定(如果可能)您的作业的哪些任务有其输入数据块在任务跟踪器“本地”的拆分。
reduce任务的数量由您自行配置。

相关问题