首页 技术 正文
技术 2022年11月18日
0 收藏 591 点赞 4,089 浏览 4391 个字

5.1 多job串联

一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现

示例代码:

ControlledJob cJob1 = new ControlledJob(job1.getConfiguration());

ControlledJob cJob2 = new ControlledJob(job2.getConfiguration());

ControlledJob cJob3 = new ControlledJob(job3.getConfiguration());

cJob1.setJob(job1);

cJob2.setJob(job2);

cJob3.setJob(job3);

// 设置作业依赖关系

cJob2.addDependingJob(cJob1);

cJob3.addDependingJob(cJob2);

JobControl jobControl = new JobControl(“RecommendationJob”);

jobControl.addJob(cJob1);

jobControl.addJob(cJob2);

jobControl.addJob(cJob3);

// 新建一个线程来运行已加入JobControl中的作业,开始进程并等待结束

Thread jobControlThread = new Thread(jobControl);

jobControlThread.start();

while (!jobControl.allFinished()) {

Thread.sleep(500);

}

jobControl.stop();

return 0;

5.3 Configuration对象高级应用

mapreduce参数优化

MapReduce重要配置参数

11.1 资源相关参数

以下调整参数都在mapred-site.xml这个配置文件当中有

//以下参数是在用户自己的mr应用程序中配置就可以生效

(1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死。

(2) mapreduce.reduce.memory.mb: 一个Reduce Task可使用的资源上限(单位:MB),默认为1024。如果Reduce Task实际使用的资源量超过该值,则会被强制杀死。

(3) mapred.child.java.opts  配置每个map或者reduce使用的内存的大小,默认是200M

(4) mapreduce.map.cpu.vcores: 每个Map task可使用的最多cpu core数目, 默认值: 1

(5) mapreduce.reduce.cpu.vcores: 每个Reduce task可使用的最多cpu core数目, 默认值: 1

//shuffle性能优化的关键参数,应在yarn启动之前就配置好

(6)mapreduce.task.io.sort.mb   100         //shuffle的环形缓冲区大小,默认100m

(7)mapreduce.map.sort.spill.percent   0.8    //环形缓冲区溢出的阈值,默认80%

//应该在yarn启动之前就配置在服务器的配置文件中才能生效

以下配置都在yarn-site.xml配置文件当中配置

(8) yarn.scheduler.minimum-allocation-mb   1024   给应用程序container分配的最小内存

(9) yarn.scheduler.maximum-allocation-mb         8192  给应用程序container分配的最大内存

以下图片是对container的说明:

第3节 mapreduce高级:12、mapreduce相关的参数调整

(10) yarn.scheduler.minimum-allocation-vcores       1

(11)yarn.scheduler.maximum-allocation-vcores 32

(12)yarn.nodemanager.resource.memory-mb   8192

11.2 容错相关参数

(1) mapreduce.map.maxattempts: 每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。

(2) mapreduce.reduce.maxattempts: 每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。

(3) mapreduce.job.maxtaskfailures.per.tracker: 当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值,比如5,表示如果有低于5%的Map Task失败(如果一个Map Task重试次数超过mapreduce.map.maxattempts,则认为这个Map Task失败,其对应的输入数据将不会产生任何结果),整个作业仍认为成功。

(5) mapreduce.task.timeout: Task超时时间,默认值为600000毫秒,经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒)。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”。

11.3 本地运行mapreduce 作业

设置以下几个参数:

mapreduce.framework.name=local

mapreduce.jobtracker.address=local

fs.defaultFS=local

11.4 效率和稳定性相关参数

(1) mapreduce.map.speculative: 是否为Map Task打开推测执行机制,默认为true,如果为true,如果Map执行时间比较长,那么集群就会推测这个Map已经卡住了,会重新启动同样的Map进行并行的执行,哪个先执行完了,就采取哪个的结果来作为最终结果,一般直接关闭推测执行

(2) mapreduce.reduce.speculative: 是否为Reduce Task打开推测执行机制,默认为true,如果reduce执行时间比较长,那么集群就会推测这个reduce已经卡住了,会重新启动同样的reduce进行并行的执行,哪个先执行完了,就采取哪个的结果来作为最终结果,一般直接关闭推测执行

(3) mapreduce.input.fileinputformat.split.minsize: FileInputFormat做切片时的最小切片大小,默认为0

(4)mapreduce.input.fileinputformat.split.maxsize:  FileInputFormat做切片时的最大切片大小(已过时的配置,2.7.5当中直接把这个配置写死了,写成了Integer.maxValue的值)

(切片的默认大小就等于blocksize,即 134217728)

==================================================================================

mapreduce的参数优化:
使用的是虚拟内核的概念,实体机的一个cpu核数,可能虚拟出来好多个虚拟内核
mapreduce.map.cpu.vcores: 每个Map task可使用的最多cpu core数目, 默认值: 1
mapreduce.reduce.cpu.vcores: 每个Reduce task可使用的最多cpu core数目, 默认值: 1

环形缓冲区的大小 其实就是搞了一个100M内存的数组
mapreduce.task.io.sort.mb 100 //shuffle的环形缓冲区大小,默认100m
mapreduce.map.sort.spill.percent 0.8 //环形缓冲区溢出的阈值,默认80%

yarn的资源调度配置参数
(8) yarn.scheduler.minimum-allocation-mb 1024 每个container最小的内存
(9) yarn.scheduler.maximum-allocation-mb 8192每个container最大的内幕才能

(10) yarn.scheduler.minimum-allocation-vcores1 每个container给定的最小的虚拟内核数
(11)yarn.scheduler.maximum-allocation-vcores32 每个container给定的最大的虚拟内核数
yarn.nodemanager.resource.memory-mb 8192 每个nodemanager分配的最大内存是多少

容错相关的参数
) mapreduce.job.maxtaskfailures.per.tracker: 当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0.
如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值,比如5,
表示如果有低于5%的Map Task失败(如果一个Map Task重试次数超过mapreduce.map.maxattempts,
则认为这个Map Task失败,其对应的输入数据将不会产生任何结果),整个作业仍认为成功。
默认值是0,表示maptask不允许任何的数据处理失败

效率和稳定性相关的参数:
mapreduce.map.speculative: map端的推测执行 如果一个maptask很长时间没有运行完成,集群可能会认为这个maptask由于某些原因卡住了
集群会启动同样的一个maptaks去执行相同的任务,哪个maptask先执行完成就以哪个maptask的结果为准,杀死另外一个没有执行完的maptask
推测执行会造成集群的资源更加紧张。一般都直接关闭推测执行

mapreduce.reduce.speculative: reduce端的推测执行 一般直接关闭reduce端的推测执行

切片的最大值和最小值的调整:可以调整我们的切片文件的大小,默认的切片文件128M

上一篇: LAME的“命令行”
下一篇: tinyxml
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919