大数据技术应用4-2MapRuduce编程组件、运行模式、性能优化策略

发布于:2022-12-31 ⋅ 阅读:(506) ⋅ 点赞:(0)

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、其他

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到