hadoop心得

来源:互联网 发布:淘宝网卖家申请 编辑:程序博客网 时间:2024/06/05 02:42

以下是我的心得,欢迎指正~


map任务数量的设置:

  1. 提交的一个文本就是一个map任务:InputFormat在默认情况下会根据hadoop集群的DFS块大小进行分片,每一个分片会由一个map任务来进行处理。
  2. 可以通过参数mapred.min.split.size参数在作业提交客户端进行自定义设置。
  3. mapred.map.tasks参数,只有当InputFormat 决定了map任务的个数比mapred.map.tasks值小时才起作用。
  4. 通过使用JobConf 的conf.setNumMapTasks(int num)方法来手动地设置。
    所有的方法都有个准则:能够增加map任务的个数,但是不能设定任务的个数小于Hadoop系统通过分割输入数据得到的值。就是map只能增加,不能减少。
    参考:hadoop中map和reduce的数量设置问题

reduce任务的数量

  1. 正确的reduce任务的个数应该是0.95或者1.75 *reduce任务槽的个数。(reduce任务槽的个数=(节点数
    ×mapred.tasktracker.tasks.maximum))

  2. 如果任务数是任务槽的0.95倍,那么所有的reduce任务能够在 map任务的输出传输结束后同时开始运行。如果任务数是任务槽的1.75倍,那么高速的节点会在完成他们第一批reduce任务计算之后开始计算第二批 reduce任务,这样的情况更有利于负载均衡。同时需要注意增加reduce的数量虽然会增加系统的资源开销,但是可以改善负载匀衡,降低任务失败带来的负面影响。

  3. 同样,Reduce任务也能够与 map任务一样,通过设定JobConf 的conf.setNumReduceTasks(int num)方法来增加任务个数。