Hadoop MapReduce 计算框架剖析与学习笔记

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步! https://blog.csdn.net/Coder__CS/article/details/79662694


要点剖析

【1】该键和值类必须由框架序列化,因此需要实现Writable接口。此外,关键类必须实现WritableComparable接口,以方便框架进行排序。
Input and Output types of a MapReduce job:
(input) <k1, v1> -> map -> <k2, v2> ->[Grouping | Partitioner] combine [compress] -> <k2, v2> -> reduce -> <k3, v3> (output)

【2】一般输入数据的block块数决定map数,除非 Configuration.set(MRJobConfig.NUM_MAPS, int)

MR程序性能优化

【1】通常将计算节点和存储节点是相同的,即MapReduce框架和Hadoop分布式文件系统在同一组节点上运行。该配置允许框架在数据已经存在的节点上有效地调度任务,从而在整个集群中产生非常高的总带宽。
【2】对于MR程序,可以在Mapper阶段,执行中间输出的本地聚合combiner,这有助于减少从Mapper传输到Reducer的数据量。
【3】对于Mapper端的输出数据可以执行compress数据压缩,降低中间数据的读写I/O延迟.
【4】在存储mapper阶段产生的中间数据时,增加序列化缓冲区大小,避免map线程阻塞。
【5】在shuffle阶段,增大磁盘上可同时合并的数据段数,增加并行度从而提升shuffle效率。
【6】提高数据本地行,计算和存储同节点部署。

作业优化

【1】比较器的使用,在作业的mapper阶段分组中执行,在Reducer阶段的排序中可能用到二次排序
【2】对于大量只读的数据使用DistributedCache。
【3】对中间数据或者作业输出数据进行压缩存储,减少磁盘IO
【4】对于数据量很大的作业,job通过一个预测机制执行,具体是在两个结点上并行执行map任务的相同实例,谁先执行完取谁的结果,再kill掉另外一个,可以通过configuration关闭预测机制。
【5】任务最大尝试次数的调整
【6】对Mapper/Reducer 任务执行的子虚拟机运行参数和环境的调整与优化,例如分别指定map和reduce执行的最大堆大小,java运行库等
【7】对框架各部分的可用内存的配置,因为这将会影响数据写入磁盘的频率

作业输入和作业输出

InputFormat中常用的是FileInputFormat,其默认实现是TextInputFormat。
OutputFormat中默认实现是TextOutputFormat。

阅读更多

扫码向博主提问

Elon'

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • hadoop
  • 大数据
  • aws
  • 云计算
  • 自动化运维
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页