我刚刚使用Hadoop 0.20.205建立了一个Hadoop集群。我有一个主人(NameNode和JobTracker)和另外两个盒子(奴隶)。
我试图了解如何定义地图数量和减少要使用的任务。
到目前为止,我了解到我可以设置每个TaskTracker能够同时处理的地图和减少任务的最大数量:*mapred.tasktracker.map.tasks.maximum*
和*mapred.tasktracker.reduce.tasks.maximum*
。
此外,我可以定义整个群集可以与*mapred.map.tasks*
同时运行的最大映射任务数。是吗?
如果是这样,我怎么知道*mapred.tasktracker.map.tasks.maximum*
的值应该是多少?我看到默认值是2.但为什么呢?增加或减少这个值的利弊是什么?
答案 0 :(得分:0)
我认为没有规则(就像设置减速器数量的规则一样)。
我所做的是,将映射器和缩减器的数量设置为每个机器可用的核心数量减去1。直观地说,这将为每台机器留下一些内存用于其他进程(如集群通信)。但我可能错了。无论如何,这是我从“Pro Hadoop”找到的唯一的东西。它建议使用与可用内核数量和一个或两个减速器一样多的映射器。 我希望它有所帮助。
答案 1 :(得分:0)
这是我的建议。希望它有所帮助!
运行" hadoop fsck /"在主节点中找出块的大小和数量。例如:
...
Total size: 21600037259 B
Total dirs: 78
Total files: 152
Total blocks (validated): 334 (avg. block size 64670770 B)
...
我将减少任务设置为num_of_blocks / 10
。
设置mapred.map.tasks=33
;
我将地图任务设置为block_size (in MB) * 2
。
set mapred.reduce.tasks=124;
到目前为止,这是我发现的最佳配置。而且您必须根据群集的配置对其进行修改。