您的位置:首页 > 运维架构

hadoop中每个节点map和reduce个数的设置调优

2014-04-30 17:25 211 查看
hadoop中每个节点map和reduce个数的设置调优  
2012-02-21 14:40:32|  分类: hadoop|举报|字号 订阅

map red.tasktracker.map.tasks.maximum 这个是一个task tracker中可同时执行的map的最大个数,默认值为2,看《pro
hadoop》:it is common to set this value to theeffective number of CPUs on the node
把ob分割成map和reduce,合理地选择Job中
Tasks数的大小能显著的改善Hadoop执行的性能。增加task的个数会增加系统框架的开销,但同时也会增强负载均衡并降低任务失败的开销。一个极端是1个map、1个reduce的情况,这样没有任务并行。另一个极端是1,000,000个map、1,000,000个reduce的情况,会由于框架的开销过大而使得系统资源耗尽。

Map任务的数量

Map的数量经常是由输入数据中的DFS块的数量来决定的。这还经常会导致用户通过调整DFS块大小来调整map的数量。正确的map任务的并行度似乎应该是10-100
maps/节点,尽管我们对于处理cpu运算量小的任务曾经把这个数字调正到300maps每节点。Task的初始化会花费一些时间,因此最好控制每个
map任务的执行超过一分钟。

实际上控制map任务的个数是很精妙的。mapred.map.tasks参数对于InputFormat设定map执行的个数来说仅仅是一个提示。InputFormat的行为应该把输入数据总的字节值分割成合适数量的片段。但是默认的情况是DFS的块大小会成为对输入数据分割片段大小的上界。一个分割大小的下界可以通过一个mapred.min.split.size参数来设置。因此,如果你有一个大小是10TB的输入数据,并设置DFS块大小为
128M,你必须设置至少82K个map任务,除非你设置的mapred.map.tasks参数比这个数还要大。最终InputFormat
决定了map任务的个数。

Map任务的个数也能通过使用JobConf
的 conf.setNumMapTasks(int num)方法来手动地设置。这个方法能够用来增加map任务的个数,但是不能设定任务的个数小于Hadoop系统通过分割输入数据得到的值。

Reduce任务的个数

正确的reduce任务的个数应该是0.95或者1.75
×(节点数 ×mapred.tasktracker.tasks.maximum参数值)。如果任务数是节点个数的0.95倍,那么所有的reduce任务能够在
map任务的输出传输结束后同时开始运行。如果任务数是节点个数的1.75倍,那么高速的节点会在完成他们第一批reduce任务计算之后开始计算第二批
reduce任务,这样的情况更有利于负载均衡。
目前reduce任务的数量由于输出文件缓冲区大小(io.buffer.size × 2 ×reduce任务个数
<< 堆大小),被限制在大约1000个左右。直到能够指定一个固定的上限后,这个问题最终会被解决。

Reduce任务的数量同时也控制着输出目录下输出文件的数量,但是通常情况下这并不重要,因为下一阶段的 map/reduce任务会把他们分割成更加小的片段。

Reduce任务也能够与 map任务一样,通过设定JobConf
的conf.setNumReduceTasks(int num)方法来增加任务个数。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop 调优