MapReduce编程组件
InputFormat组件
主要用于描述输入数据的格式,它提供两个功能,分别是 数据切分和为Mapper提供输入数据。 • InputFormat接口 getSplits()、createRecordReader。 • getSplits():将文件切片 minSize、maxSize、blockSize。
Mapper组件
实现Map任务的一个抽象基类,该基类提供了一个 map()方法。 • 继承Mapper类并重写map()方法 • hadoop数据类型。
Reducer组件
Map过程输出的键值对,将由Reducer组件进行合并处 理,最终的某种形式的结果输出。 • 继承Reducer类并重写reduce()方法。
Partitioner组件
Partitioner组件可以让Map对Key进行分区,从而可以 根据不同的key分发到不同的Reduce中去处理,其目的 就是将key均匀分布在ReduceTask上。
• getPatitioner()
• HashPartitioner
Combiner组件
Combiner组件的作用就是对Map阶段的输出的重复数 据先做一次合并计算,然后把新的(key,value)作为 Reduce阶段的输入。 • 继承Reducer类,重写reduce()方法。
OutputFormat组件
OutputFormat是一个用于描述MapReduce程序输出格 式和规范的抽象类。
• getRecordWriter()返回一个RecordWriter实例
• checkOutputSpecs()用于检测任务输出规范是否有效
• getOutputCommiter()负责输出被正确提交
• TextOutputFormat 继 承 FileOut
MapReduce运行模式
MapReduce性能优化策略
使用Hadoop进行大数据运算,当数据量极其大时 ,那么对MapReduce性能的调优重要性不言而喻,尤 其是Shuffle过程中的参数配置对作业的总执行时间影 响特别大,我们可以从五个方面对MapReduce程序进 行性能调优,分别是数据输入、Map阶段、Reduce阶 段、Shuffle阶段和其他调优属性方面。
在数据输入的时候 在执行MapReduce任务前,将小文件进行合并, 大量小文件会产生大量的map任务,增大map任务装 载次数,而任务装载较耗时,从而导致MapReduce运 行速度较慢。因此采用CombineTextInputFormat来 作为输入,解决输入端大量的小文件场景。
在map阶段
• 合理设置map和reduce数
• 设置map、reduce共存
• 规避使用reduce
• 合理设置reduce端的buffer
在Shuffle阶段
Shuffle阶段的调优就是给Shuffle过程尽量多地提 供内存空间,以防止出现内存溢出现象,可以由参数 mapred.child.java.opts来设置,任务节点上的内存大 小应尽量大。
其他调优属性
MapReduce还有一些基本的资源属性的配置, 这些配置的相关参数都位于mapred-default.xml文 件中,我们可以合理配置这些属性提高MapReduce性 能,例如合理设置MapTask、ReduceTask等参数。
MapReduce编程组件
InputFormat、Mapper、Reducer、Partitioner、 OutputFormat
MapReduce运行模式
本地、集群
MapReduce的性能优化策略
数据输入、Map阶段、Reduce阶段、Shuffle、其他