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

  • 要点剖析
  • MR程序性能优化
  • 作业优化
  • 作业输入和作业输出


要点剖析

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

你可能感兴趣的:(【大数据】➣,Hadoop,【大数据】➣,MapReduce)