大数据笔记06--YARN的搭建与MR调优

yarn的搭建

集群规划

在这里插入图片描述

配置

  1. 修改配置文件mapred-sitex.xml
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
<-- 跨平台配置 -->
 <property>
	<name>mapreduce.app-submission.cross-platform</name>
	<value>true</value>
</property>
  1. 修改配置文件yarn-site.xml
 <property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
 </property>
 <property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>cluster1</value>
 </property>
 <property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
 </property>
 <property>
	<name>yarn.resourcemanager.hostname.rm1</name>
	<value>node01</value>
 </property>
 <property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>node02</value>
 </property>
 <property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>node02:2181,node03:2181,node04:2181</value>
 </property>
  1. 将配置好信息分发到所有节点
  2. 在node02 node03 node04上启动zookeeper
./zkServer.sh start
  1. node01上启动hdfs和yarn集群
start-dfs.sh

start-yarn.sh
  • 在node02上单独启动一个备用ResourceManager
    (node01上已自动启动一个active的RM)
yarn-daemon.sh start resourcemanager
  • 从8088端口查看管理页面

测试案例

wordcount

使用MapReduce提供的测试用例wordcount

  • 到mapreduce的jar包目录下
cd $HADOOP_HOME/share/hadoop/mapreduce
  • 运行测试用例
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount  /input  /output
  • input:是hdfs文件系统中数据所在的目录
  • ouput:是hdfs中不存在的目录,程序运行的结果会输出到该目录,若目录存在会报错
  • 查看运行结果
hdfs dfs -cat /output/*

Shuffle调优

Map端调优

选项类型默认值类型
io.sort.mbint100缓存map中间结果的buffer大小(MB)
io.sort.record.percentfloat0.05io.sort.mb中用来保存map output记录边界的百分比
其他缓存用来保存数据
io.sort.spill.percentfloat0.80map开始做spill操作的阈值
io.sort.factorint10做merge操作时同时操作的stream数上限
min.num.spill.for.combineint3combiner函数运行的最小spill数
mapred.compress.map.outputbooleanfalsemap中间结果是否采用压缩
  • io.sort.mb
    一个map都会对应存在一个内存缓冲区kvbuffer,kvbuffer默认为100MB,大小可以根据job提交时设定的参数io.sort.mb来调整。当map产生的数据非常大,并且把io.sort.mb调大,那么在map计算过程中spill的次数就会降低,map task对磁盘的操作就会变少,如果map tasks的瓶颈在磁盘上,这样调整就会大大提高map的计算性能。

  • io.sort.spill.percent
    io.sort.spill.percent控制的是kvbuffer开始spill到磁盘的阈值,默认为0.80。这个参数同样也是影响spill频繁程度,进而影响map task运行周期对磁盘的读写频率。

  • io.sort.factor
    merge的过程中,有一个参数io.sort.factor可以调整这个过程的行为,默认为10。该参数表示当merge spill文件时,最多能有多少并行的stream向merge文件中写入。如果map的中间结果非常大,调大io.sort.factor,有利于减少merge次数,进而减少 map对磁盘的读写频率,有可能达到优化作业的目的。

  • min.num.spill.for.combine
    当job指定了combiner时,会在map端根据combiner定义的函数将map结果进行合并。运行combiner函数的时机有可能会是merge完成之前或之后。这个时机由min.num.spill.for.combine参数控制,默认为3。通过这样的方式,就可以在spill非常多需要merge,并且很多数据需要做combine的时候,减少写入到磁盘文件的数据数量,同样减少了对磁盘的读写频率,有可能达到优化作业的目的。

  • mapred.compress.map.output
    将这个参数设置为true时,那么map在写中间结果时,就会将先数据压缩后再写入磁盘,读结果时也会采用先解压后读取数据。这样做的后果就是:写入磁盘的中间结果数据量会变少,但是cpu会消耗一些用来压缩和解压。所以这种方式通常适合job中间结果非常大,瓶颈不在cpu,而是在磁盘的读写的情况。

  • mapred.map.output.compression.codec
    当采用map中间结果压缩的情况下,通过mapred.map.output.compression.codec参数可以选择不同的压缩模式,现有支持的压缩格式:GzipCodec,LzoCodec,BZip2Codec,LzmaCodec等压缩格式。通常来说,想要达到比较平衡的cpu和磁盘压缩比,LzoCodec比较适合。但也要取决于job的具体情况。

Reduce端优化

选项类型默认值类型
mapred.reduce.parallel.copiesint5每个reduce并行下载map结果的最大线程数
mapred.reduce.copy.backoffint300reduce下载线程最大等待时间(s)
io.sort.factorint10做merge操作时同时操作的stream数上限
mapred.job.shuffle.input.buffer.percentfloat0.7用来缓存shuffle数据的reduce task heap百分比
mapred.job.shuffle.merge.percentfloat0.66缓存的内存中多少百分比后开始做spill操作
mapred.job.reduce.input.buffer.percentfloat0.0sort完成后reduce计算阶段用来缓存数据的百分比
mapreduce.reduce.memory.mbString1024这只map task reduce task使用的内存大小
  • mapred.reduce.parallel.copies
    对一个reduce来说,下载可以从并行的多个map中下载,并行度通过参数mapred.reduce.parallel.copies进行设置。默认为5个并行的下载线程,这个参数比较适合map很多并且完成的比较快的job的情况下调大,有利于reduce更快的获取属于自己部分的数据。

  • mapred.reduce.copy.backoff
    reduce下载线程的最大下载时间段通过参数mapred.reduce.copy.backoff设置,默认为300s。如果超过改时间,reduce下载线程中断,并尝试从其他地方下载。
    如果集群环境的网络本身是瓶颈,那么用户可以通过调大这个参数来避免reduce下载线程被误判为失败的情况。不过在网络环境比较好的情况下,没有必要调整。

  • io.sort.factor
    Reduce将map结果下载到本地时,同样也是需要进行merge,所以io.sort.factor的配置选项同样会影响reduce进行 merge时的行为,可能通过调大这个参数来加大一次merge时的并发吞吐,优化reduce效率。

  • mapred.job.shuffle.merge.percent
    mapred.job.shuffle.merge.percent这个限度阈值可以控制merge的开始,默认为0.66。如果下载速度很快,很容易就把内存缓存撑大,那么调整一下这个参数有可能会对reduce的性能有所帮助。

  • mapred.job.reduce.input.buffer.percent
    mapred.job.reduce.input.buffer.percent参数默认为0,表示reduce是全部从磁盘开始读处理数据。如果这个参数大于0,那么就会有一定量的数据被缓存在内存并输送给reduce,当reduce计算逻辑消耗内存很小时,可以分一部分内存用来 缓存数据

Reduce Task数量调优

选项类型默认值类型
mapred.reduce.tasksint1reduce task数量
mapred.tasktracker.map.tasks.maximumint2每个节点上能够启动map task的最大数量
mapred.tasktracker.reduce.tasks.maximumint2每个节点上能够启动reduce task的最大数量
mapred.reduce.slowstart.completed.mapsfloat0.05map阶段完成5%的时候开始进行reduce计算

参数设置的三种方式:

  1. 在代码的conf对象中设置
  2. 提交任务的时候使用-D设置
hadoop jar wc.jar com.sxt.hadoop.mr.wc.WC -Dmapred.reduce.tasks=100 
#有多个参数加多个-D
  1. 在配置文件中设置mapred-site.xml设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值