调优总结(一)

1.代码调优

代码调优,主要是 mapper 和 reducer 中,针对多次创建的对象,进行代码提出操作。 这个和一般的 java 程序的代码调优一样。

2.mapper 调优

mapper 调优主要就是就一个目标:减少输出量。我们可以通过增加 combine 阶段以 及对输出进行压缩设置进行 mapper 调优。

combine 介绍: 实现自定义 combine 要求继承 reducer 类,特点: 以 map 的输出 key/value 键值对作为输入输出键值对,作用是减少网络输出, 在 map 节点上就合并一部分数据。 比较适合,map 的输出是数值型的,方便进行统计。

压缩设置: 在提交 job 的时候分别设置启动压缩和指定压缩方式。

3.reducer 调优

reducer 调优主要是通过参数调优和设置 reducer 的个数来完成。
reducer 个数调优:
要求:一个 reducer 和多个 reducer 的执行结果一致,不能因为多个 reducer 导致执行结果异常。

规则:一般要求在 hadoop 集群中的执行 mr 程序,map 执行完成 100%后,尽量 早的看到 reducer 执行到 33%,可以通过命令 hadoop job -status job_id 或者 web 页面来查看。
原因: map 的执行 process 数是通过 inputformat 返回 recordread 来 定义的;而 reducer 是有三部分构成的,分别为读取 mapper 输出数据、合并所有输出数 据以及 reduce 处理,其中第一步要依赖 map 的执行,所以在数据量比较大的情况下,一 个 reducer 无法满足性能要求的情况下,我们可以通过调高 reducer 的个数来解决该问 题。
优点:充分利用集群的优势。 缺点:有些 mr 程序没法利用多 reducer 的优点,比如获取 top n 的 mr 程序。

4.runner 调优

runner 调优其实就是在提交 job 的时候设置 job 参数,一般都可以通过代码和 xml 文件两种方式进行设置

  1. mapred.child.java.opts: 修改 childyard 进程执行的 jvm 参数,针对 map 和 reducer 均有效,默认:-Xmx200m
  2. mapreduce.map.java.opts: 需改 map 阶段的 childyard 进程执行 jvm 参 数,默认为空,当为空的时候,使用 mapred.child.java.opts。
  3. mapreduce.reduce.java.opts:修改 reducer 阶段的 childyard 进程执行 jvm 参数,默认为空,当为空的时候,使用 mapred.child.java.opts。
  4. mapreduce.job.reduces: 修改 reducer 的个数,默认为 1。可以通过 job.setNumReduceTasks 方法来进行更改。
  5. mapreduce.map.speculative:是否启动 map 阶段的推测执行,默认为 true。 其实一般情况设置为 false 比较好。可通过方法 job.setMapSpeculativeExecution 来设置。
  6. mapreduce.reduce.speculative:是否需要启动 reduce 阶段的推测执行, 默 认 为 true , 其 实 一 般 情 况 设 置 为 fase 比 较 好 。 可 通 过 方 法 job.setReduceSpeculativeExecution 来设置。
  7. mapreduce.map.output.compress:设置是否启动 map 输出的压缩机制,默 认为 false。在需要减少网络传输的时候,可以设置为 true。
  8. mapreduce.map.output.compress.codec:设置 map 输出压缩机制,默认 为 org.apache.hadoop.io.compress.DefaultCodec,推荐使用 SnappyCodec(在 之 前 版 本 中 需 要 进 行 安 装 操 作 , 现 在 版 本 不 太 清 楚 , 安 装 参 数 : http://www.cnblogs.com/chengxin1982/p/3862309.html)
  9. hbase 参数设置 由于 hbase 默认是一条一条数据拿取的,在 mapper 节点上执行的时候是每处理 一条数据后就从 hbase 中获取下一条数据,通过设置 cache 值可以一次获取多条数据,减 少网络数据传输。
上一篇:09.Mapreduce实例——ChainMapReduce小


下一篇:Mybatis学习笔记(四)