hadoop一个节点默认起两个map slot,请问这两个slot是多线程吗?
hadoop-0.21.0 源码中是这样的:
首先看看 org.apache.hadoop.mapred.TaskTracker 类:
两个类变量 maxMapSlots 和 maxReduceSlots:
maxMapSlots = conf.getInt(TT_MAP_SLOTS, 2);
maxReduceSlots = conf.getInt(TT_REDUCE_SLOTS, 2);
其中 public static final String TT_MAP_SLOTS = "mapreduce.tasktracker.map.tasks.maximum";
public static final String TT_REDUCE_SLOTS = "mapreduce.tasktracker.reduce.tasks.maximum";
类方法 initializeMemoryManagement() 中 ,根据 slots 来决定申请内存的大小
totalMemoryAllottedForTasks = maxMapSlots * mapSlotMemorySizeOnTT + maxReduceSlots * reduceSlotSizeMemoryOnTT;
类方法 TaskTracker.initialize() 中会起两个 TaskLauncher 线程,
分别负责启动 Mapper 和 Reduce 任务:
mapLauncher = new TaskLauncher(TaskType.MAP, maxMapSlots);
reduceLauncher = new TaskLauncher(TaskType.REDUCE, maxReduceSlots);
hadoop-0.21.0 源码中是这样的:
首先看看 org.apache.hadoop.mapred.TaskTracker 类:
两个类变量 maxMapSlots 和 maxReduceSlots:
maxMapSlots = conf.getInt(TT_MAP_SLOTS, 2);
maxReduceSlots = conf.getInt(TT_REDUCE_SLOTS, 2);
其中 public static final String TT_MAP_SLOTS = "mapreduce.tasktracker.map.tasks.maximum";
public static final String TT_REDUCE_SLOTS = "mapreduce.tasktracker.reduce.tasks.maximum";
类方法 initializeMemoryManagement() 中 ,根据 slots 来决定申请内存的大小
totalMemoryAllottedForTasks = maxMapSlots * mapSlotMemorySizeOnTT + maxReduceSlots * reduceSlotSizeMemoryOnTT;
类方法 TaskTracker.initialize() 中会起两个 TaskLauncher 线程,
分别负责启动 Mapper 和 Reduce 任务:
mapLauncher = new TaskLauncher(TaskType.MAP, maxMapSlots);
reduceLauncher = new TaskLauncher(TaskType.REDUCE, maxReduceSlots);