2

头疼了好久,目前我的hadoop集群是这样的,我有40个salve节点要运行,每个slave节点我配置25个mapper 10个reducer,所以大概可以启动40*25=1000个mapper和400个reducer同时。好的,现在我有以下工作:</p>

job1:我配置运行 5 个映射器和 5 个减速器 job2:我配置运行 20 个映射器和 10 个减速器 job3:我配置运行 975 个映射器和 385 个减速器

假设我使用默认的 FIFO 作业调度,如果我连续提交 3 个映射器,这 3 个作业是否可以同时运行?以便最大限度地利用集群?

目前,我测试在mapper阶段,提交3个作业后似乎可以启动1000个mapper,但是在reducer阶段,它变得非常非常慢,所以我等待了很长时间,以上作业都没有完成,似乎他们挂在减速器阶段。

我不是很明白这其中的内在原因,谁能帮我解决这个问题,以便我可以提交工作并睡觉,然后明天早上我看到我所有的工作都按订单完成了?我需要使用公平的调度来使它工作吗????

4

1 回答 1

1

给出解决方案有点困难 - 但我会尝试给出找到解决方案的方向。1.如果集群中有足够的reduce槽——可能你的问题与并行作业执行无关。至少我一开始不会怀疑。
2. 我建议使用 Fair Scheduler - 它是专门为并行执行和资源共享而构建的。
3. 我建议单独测试每个作业,并且只有在每个作业运行良好之后 - 开始并行运行。
4. 减速慢可能有很多原因,但我会检查以下(我所知道的):
a)在映射器和减速器之间传递(并序列化)大量数据。查看文件系统字节写入计数器以识别它。
b) 存在严重的数据倾斜,大量数据来到单个reducer。

于 2012-08-19T15:11:18.470 回答