MapReduce 编程 系列十一 Map阶段的调优

MapOutputBuffer

对于每一个Map,都有一个内存buffer用来缓存中间结果,这不仅可以缓存,而且还可以用来排序,被称为MapOutputBuffer, 设置这个buffer大小的配置是

io.sort.mb

默认值是100MB.

一般当buffer被使用到一定比例,就会将Map的中间结果往磁盘上写,这个比例的配置是:

io.sort.spill.percent

默认值是80%或者0.8.

在内存中排序缓存的过程叫做sort,而当超过上面的比例在磁盘上写入中间结果的过程称之为spill.

如果能够追踪到sort和spill的状态,就可以通过调整上面两个参数对Map进行优化。

Merge

Map的输出结果,最后会变成多个spill文件写入到磁盘上,需要将它们合并成一个文件,这个阶段称作merge.

每次并行merge多少个spill文件,有一个配置参数:io.sort.factor。

默认为10, 如果文件很多,影响到了merge阶段完成的速度,可以适当调大。

压缩

设置mapred.output.compress为true或者false,可以控制map的输出结果文件变为压缩或者不压缩。

同时可以指定压缩格式,用参数mapred.output.compression.codec,可选值为:

zipCodec,LzoCodec,BZip2Codec,LzmaCodec

选择压缩主要的时机是当磁盘I/O成了瓶颈,而不是CPU计算成瓶颈时。

压缩格式的选择也是在压缩时间,CPU利用率和磁盘空间三者间做平衡。

其他参数参考官方文档:

https://hadoop.apache.org/docs/r1.0.4/mapred-default.html

时间: 2024-11-03 22:14:31

MapReduce 编程 系列十一 Map阶段的调优的相关文章

MapReduce 2.x 编程 系列二 Map阶段实现

现在想从日志中提取数据,日志文件如下: 2014-05-10 13:36:40,140307000287,536dbacc4700aab274729cca,login 2014-05-10 13:37:46,140310000378,536dbae74700aab274729ccb,login 2014-05-10 13:39:20,140310000382,536dbb284700aab274729ccd,login 2014-05-10 13:39:31,140331001080,536db

MapReduce 编程 系列十二 Reduce阶段内部细节和调节参数

Reduce计算分为若干阶段 1. copy(或者叫shuffle)阶段和merge阶段并行 之前Map产生的结果被存放在本地磁盘上,这时需要从reduce节点将数据从map节点复制过来.放得下进内存,比较大的则写到本地磁盘. 同时,有两个线程对已经获得的内存中和磁盘上的数据进行merge操作. 具体细节是: 通过RPC调用询问task tracker已经完成的map task列表,shuffle(洗牌)是对所有的task tracker host的洗牌操作,这样可以打乱copy数据的顺序,防止

MapReduce编程系列 — 5:单表关联

1.项目名称: 2.项目数据: chile    parentTom    LucyTom    JackJone    LucyJone    JackLucy    MaryLucy    BenJack    AliceJack    JesseTerry    AliceTerry    JessePhilip    TerryPhilip    AlimaMark    TerryMark    Alma 3.设计思路: 分析这个实例,显然需要进行单表连接,连接的是左表的parent列

MapReduce 编程 系列七 MapReduce程序日志查看

首先,如果需要打印日志,不需要用log4j这些东西,直接用System.out.println即可,这些输出到stdout的日志信息可以在jobtracker站点最终找到. 其次,如果在main函数启动的时候用System.out.println打印的日志,直接在控制台就可以看到. 再其次,jobtracker站点很重要. http://your_name_node:50030/jobtracker.jsp 注意,在这里看到Map 100%不一定正确,有时候会卡在Map阶段并没有完成,而此时居然

Java系列笔记 - JVM监控与调优

光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置.如何监控.如何优化3点上.下面就将针对这3点进行学习. (如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅读本文前,请先阅读我的前一篇博客<Java系列笔记(3) - Java 内存区域和GC机制>,在该博客中,详细叙述了Java HotSpot虚拟机(Sun/Oracle JDK系列默认的虚拟机)的内存分配和垃圾回收机制.

Spark学习之路 (十一)SparkCore的调优之Spark内存模型

摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html 一.概述 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文

Spark学习之路 (十一)SparkCore的调优之Spark内存模型[转]

概述 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解 RDD.Shuffle.JVM 等相关概念. 在执行 Spark 的应用程序时,Spark 集群会启动 Driv

【CNMP系列】PHP配置和调优

上一节我们说到PHP5.6.30在CentOS7.0下的整个安装过程,http://www.cnblogs.com/riverdubu/p/6428226.html 今天我来和大家讲解一下PHP-FPM安装的一些配置和调优. PHP-FPM配置相关 再来解释下php-fpm的概念,PHP-FPM(PHP FastCGI Process Manager的简称,意思是"PHP FastCGI进程管理器"),是用于管理PHP进程池的软件,用于接收和处理来自Web服务器(例如nginx)的请求

Java 性能优化系列之3.1[JVM调优]

Java 虚拟机内存模型 JVM 虚拟机将其内存数据分为程序计数器.虚拟机栈.本地方法栈.Java 堆和方法区等部分. 程序计数器用于存放下一条运行的指令:虚拟机栈和本地方法栈用于存放函数调用栈信息: Java堆用于存放Java 程序运行时所需的对象等数据:方法区用于存放程序的类元数据信息. 1. 程序计数器- Program Counter Register 是一块很小内存空间. 由于Java  是支持线程的语言, 当线程数量超过CPU 数量时,线程之间根据时间片轮询抢夺CPU 资源.对于单核