控制map的任务个数

最近使用mapreduce处理一批数据,但要处理的文件大部分都是几MB的小文件,当任务刚跑起来,发现启动了不少map任务,很影响执行效率。(任务运行在cdh5.13集群对应yarn下)负载均衡

经过配置mapreduce加载的配置文件能够控制map的任务个数,提升执行效率。oop

mapred-site.xmlxml

  <property>
    <name>mapreduce.job.split.metainfo.maxsize</name>
    <value>268635456</value>
  </property>blog

hdfs-site.xmlit

  <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
  </property>效率

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任务的数量同时也控制着输出目录下输出文件的数量,可是一般状况下这并不重要,由于下一阶段的 map/reduce任务会把他们分割成更加小的片断。 
Reduce任务也可以与 map任务同样,经过设定JobConf 的conf.setNumReduceTasks(int num)方法来增长任务个数。meta

相关文章
相关标签/搜索