hadoop作业map过程调优使用到的参数笔记

参数:io.sort.mb(default 100)

当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘。

而是会利用到了内存buffer来进行已经产生的部分结果的缓存,

并在内存buffer中进行一些预排序来优化整个map的性能。

每一个map都会对应存在一个内存buffer,map会将已经产生的部分结果先写入到该buffer中,

这个buffer默认是100MB大小,

但是这个大小是可以根据job提交时的参数设定来调整的,

当map的产生数据非常大时,并且把io.sort.mb调大,

那么map在整个计算过程中spill的次数就势必会降低,

map task对磁盘的操作就会变少,

如果map tasks的瓶颈在磁盘上,这样调整就会大大提高map的计算性能。

参数:o.sort.spill.percent(default 0.80,也就是80%)

map在运行过程中,不停的向该buffer中写入已有的计算结果,

但是该buffer并不一定能将全部的map输出缓存下来,

当map输出超出一定阈值(比如100M),那么map就必须将该buffer中的数据写入到磁盘中去,

这个过程在mapreduce中叫做spill。

map并不是要等到将该buffer全部写满时才进行spill,

因为如果全部写满了再去写spill,势必会造成map的计算部分等待buffer释放空间的情况。

所以,map其实是当buffer被写满到一定程度(比如80%)时,就开始进行spill。

这个阈值也是由一个job的配置参数来控制,

这个参数同样也是影响spill频繁程度,进而影响map task运行周期对磁盘的读写频率的。

但非特殊情况下,通常不需要人为的调整。调整io.sort.mb对用户来说更加方便。

参数:io.sort.factor

当map task的计算部分全部完成后,如果map有输出,就会生成一个或者多个spill文件,这些文件就是map的输出结果。

map在正常退出之前,需要将这些spill合并(merge)成一个,所以map在结束之前还有一个merge的过程。

merge的过程中,有一个参数可以调整这个过程的行为,该参数为:io.sort.factor。

该参数默认为10。它表示当merge spill文件时,最多能有多少并行的stream向merge文件中写入。

比如如果map产生的数据非常的大,产生的spill文件大于10,而io.sort.factor使用的是默认的10,

那么当map计算完成做merge时,就没有办法一次将所有的spill文件merge成一个,而是会分多次,每次最多10个stream。

这也就是说,当map的中间结果非常大,调大io.sort.factor,

有利于减少merge次数,进而减少map对磁盘的读写频率,有可能达到优化作业的目的。

参数:min.num.spill.for.combine(default 3)

当job指定了combiner的时候,我们都知道map介绍后会在map端根据combiner定义的函数将map结果进行合并。

运行combiner函数的时机有可能会是merge完成之前,或者之后,这个时机可以由一个参数控制,

即min.num.spill.for.combine(default 3),当job中设定了combiner,并且spill数最少有3个的时候,

那么combiner函数就会在merge产生结果文件之前运行。

通过这样的方式,就可以在spill非常多需要merge,并且很多数据需要做conbine的时候,

减少写入到磁盘文件的数据数量,同样是为了减少对磁盘的读写频率,有可能达到优化作业的目的。

参数:mapred.compress.map.output(default false)

减少中间结果读写进出磁盘的方法不止这些,还有就是压缩。

也就是说map的中间,无论是spill的时候,还是最后merge产生的结果文件,都是可以压缩的。

压缩的好处在于,通过压缩减少写入读出磁盘的数据量。

对中间结果非常大,磁盘速度成为map执行瓶颈的job,尤其有用。

控制map中间结果是否使用压缩的参数为:mapred.compress.map.output(true/false)。

将这个参数设置为true时,那么map在写中间结果时,就会将数据压缩后再写入磁盘,读结果时也会采用先解压后读取数据。

这样做的后果就是:写入磁盘的中间结果数据量会变少,但是cpu会消耗一些用来压缩和解压。

所以这种方式通常适合job中间结果非常大,瓶颈不在cpu,而是在磁盘的读写的情况。

说的直白一些就是用cpu换IO。

根据观察,通常大部分的作业cpu都不是瓶颈,除非运算逻辑异常复杂。所以对中间结果采用压缩通常来说是有收益的。

参数:mapred.map.output.compression.codec( default org.apache.hadoop.io.compress.DefaultCodec)

当采用map中间结果压缩的情况下,用户还可以选择压缩时采用哪种压缩格式进行压缩,

现在hadoop支持的压缩格式有:GzipCodec,LzoCodec,BZip2Codec,LzmaCodec等压缩格式。

通常来说,想要达到比较平衡的cpu和磁盘压缩比,LzoCodec比较适合。但也要取决于job的具体情况。

用户若想要自行选择中间结果的压缩算法,

可以设置配置参数:mapred.map.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec或者其他用户自行选择的压缩方式

时间: 2024-10-14 11:34:50

hadoop作业map过程调优使用到的参数笔记的相关文章

Hadoop之MapReduce性能调优

基于对这些组件的深入理解,用户可以很容易通过调整一些关键参数使作业运行效率达到最优,本文将分别从Hadoop管理员和用户角度介绍如何对Hadoop进行性能调优以满足各自的需求. 1 概述 Hadoop性能调优是一项工程浩大的工作,它不仅涉及Hadoop本身的性能调优,还涉及更加底层的硬件.操作系统和Java虚拟机等系统的调优.对这几个系统适当地进行调优均有可能给Hadoop带来性能提升. Hadoop(JobTracker.TaskTracker) JVM OS Hardware(CPU Mem

JVM调优之Tomcat启动参数配置及详解

开发项目中会遇到Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小.年轻代大小.每个线程大小参数进行调优的,具体如下: 一.在Tomcat 启动脚本(catalina.sh/catalina.bat)首行添加如下配置即可解决此问题 JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:Ma

JVM调优(一)——参数查询和问题排查

JVM的参数类型 标准参数 -help -server -client -version -showversion -cp -classpath X参数 -Xint: 解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式,JVM自己来决定是否编译成本地代码 XX参数 特点 非标准化参数 相对不稳定 主要用于JVM调优和Debug 分类 Boolean类型 格式:-XX:[+-]<name>表示启用或禁用name属性 比如: -XX:+UseConcMarkSweepGC

Hive调优(语法与参数层面优化)

一.简介 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商.Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经显得至关重要. 好的架构胜过任何优化,好的Hql同样会效率大增,修改Hive参数,有时也能起到很好的效果. 有了瓶颈才需要优化 1.Hadoop的主要性能瓶颈是IO负载,降IO负载是优化的重头戏. 2.对中间结果的压缩 3.合理设置分区,静态分区和动态分区 二.H

JVM快速调优手册之六: JVM参数设置及分析

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率.但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择).本文将注重

《mysql性能调优与架构设计》笔记: 二存储引擎

3.1 概述: 1,MYISAM 是mysql 5.5以前版本的默认引擎,5.5以后默认存储引擎是innodb 2.查看mysql存储引擎命令,在mysql>提示符下搞入show engines;字段 Support为:Default表示默认存储引擎 3.设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句 3.2 MYISAM存储引擎概述: 1,MyISAM 存储引擎的表在数据库中,每一个表都被存放为

《mysql性能调优与架构设计》笔记:三mysql 安全管理

4.1数据库系统安全相关因素         1,外围网络 2,主机: 3,数据库本身 访问授权相关模块主要是由两部分组成: 一个是基本的用户管理模块:主要负责用户登录链接相关的基本权限控制 另外一个是访问授权控制模块:随时随地检查已经进门的访问者,校验他们是否 有访问所发出请求需要访问的数据的权限.通过校验者可顺利拿到数据,而未通过校验的访问者,只能收到"访问越权了"的相关反馈. 三道防线图: 4,代码:sql注入--危害很大,防不胜防 4.2权限系统简介 4.2.1,相关权限信息主

linux IO 内核参数调优 之 原理和参数介绍

1.  page cache linux操作系统默认情况下写都是有写缓存的,可以使用direct IO方式绕过操作系统的写缓存.当你写一串数据时,系统会开辟一块内存区域缓存这些数据,这块区域就是我们常说的page cache(操作系统的页缓存).查看系统内存常用的命令有:vmstat.free.top等. 可以使用 cat /proc/meminfo 查看详细的内存使用情况 其中的Cached为140M左右(page cache).注意其中有一个Dirty: 24KB,表示当前有24KB的数据缓

《mysql性能调优与架构设计》笔记: 一mysql 架构组成

2.1mysql物理文件组成 2.1.1日志文件: 1,查看mysql配置文件:mysql --verbose --help | grep -A 1 'Default options'; 1,错误日志:--log-error[=file_name] 指定错误日志位置 2,二进制日志: --log-bin[=file_name] 如果未指定file_name默认在数据目录下mysql-bin.**** --max_binlog_size:设置 binlog 的最大存储上限,当日志达到该上限时,My