博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop(4):MapReduce on Yarn工作流程
阅读量:4280 次
发布时间:2019-05-27

本文共 4550 字,大约阅读时间需要 15 分钟。

一、关键概念

1.Client客户端

作用:提交mapreduce任务的电脑。

2.Resource manager

作用:用于管理整个集群资源调度分配,包含Applications manager和Resource Scheduler。

(1)Applications manager:管理每个提交任务,创建每个任务的Application master。

(2)Resource Schedule:用于管理每个任务的资源分配,会分配给每个任务相应资源(container)

3.ApplicationMaster

作用:负责客户端提交Job调度的进程,每个job对应一个applicationMaster。

4.Node manager

作用:单个节点的资源管理器。包含计算资源Container,是每个map或者reduce任务运行的位置。一个Node manager可以有多个Container,每个Container运行一个map或者reduce任务。

备注:maptask和reducetask默认资源是1G内存和1核CPU,

二、工作流程

1.框架图

2.提交流程

(1)Clinet向RM申请资源,RM上有所有NM的节点资源信息,RM将资源信息(Node Manager的hostname、以及分配的内存和CPU大小)发送给Client

(2)Client根据请求到资源信息发送到对应的Node Manager,Node Manager中产生Container对象,然后在Container对象中调用相关代码,启动Application Master 

(3)Application Master 开始获取客户端提交job的相关设置信息。例如,获得得到map task数量(由InputFormat的getSplits方法决定)和reduce task数量(由参数mapreduce.job.reduces影响)

(4)Application Master向RM申请Map Task运行的资源(一个Map Task或者Reduce Task就需要申请一个container),RM将分配的资源发送给Application Master

(5)和(6)Application Master远程调用NM的相关方法启动对应的Container,并在Container中启动对应的Map Task

(7)包含两种任务:

        -》map Task:当一个Map Task执行完成后,会通知AM进程,当前Map Task执行完成;

        -》reduce Task:当总Map Task中有5%执行完成,AM向RM申请reduce task运行资源(一个task需要一个container),RM将资源信息发送给AM,AM在对应的NM节点启动对应的Container,并在Container中运行对应的reduce task任务

(8)当reduce task任务执行完成后,会通知Application Master进程,以及进一步通知Applications Manager。当所有的reduce task执行完成,AM通知client表示程序执行完成.

 

三、Map和Reduce细节调度

1.map task运行位置

    map task运行位置是由RM返回给AM资源的时候决定的,因为RM上会有全部CPU和内存,已使用CPU和内存,RM会根据底层写好的算法,返回客户端NM的信息。

    RM在分配资源的时候,会尽可能的将Map Task启动到对应的数据节点上。这样的话AM在启动RM的时候就会在数据节点上启动处理该数据的task任务,该机制叫做mapreduce的数据本地化机制 。但是,如果数据节点本地资源不够,就会选择同一个机架的其他机器,最次是其他机架的服务器。

    一个maptask默认使用1核cpu,使用1G内存。

2.reduce task运行位置

默认算法分配,这个一般无法指定。

3.map数量设置

    MapReduce有两套API,org.apache.hadoop.mapred(旧API)和org.apache.hadoop.mapreduce(新API),开发时基本用新的API。Map和reduce的数量受两个操作的影响,split和partition,一个split就是对应一个maptask,一个partition对应一个reduce数据输入。

    新版本mapreduce的textInputFormat使用参数:mapreduce.input.fileinputformat.split.maxsize和mapreduce.input.fileinputformat.split.minsize来控制split也就是map的数量。

(1)公式:split_size = max(minsize,min(maxsize,blocksize))

    其中,参数默认maxsize为Long.MaxValue,minsize为0,所以默认map大小等于blocksize,也就是128M;如果要增多map数量,就将maxsize的值设置比blocksize小;如果要减少map数量,就将minsize的值设置比blocksize大。

(2)方法一:提交job时

bin/hadoop jar Hadoop.jar Hadoop.WordCountOnline /core-site.xml /output8 -Dmapreduce.input.fileinputformat.split.maxsize=20191226l -Dmapreduce.input.fileinputformat.split.minsize=1000

结果:

[root@hadoop01 hadoop-2.6.0-cdh5.7.0]# bin/hadoop jar Hadoop.jar Hadoop.WordCountOnline /core-site.xml /output8 -Dmapreduce.input.fileinputformat.split.maxsize=20191226l -Dmapreduce.input.fileinputformat.split.minsize=1000 结果:19/04/04 12:52:19 INFO mapreduce.Job: Counters: 49	File System Counters		FILE: Number of bytes read=1357		FILE: Number of bytes written=337515		FILE: Number of read operations=0		FILE: Number of large read operations=0		FILE: Number of write operations=0		HDFS: Number of bytes read=1080		HDFS: Number of bytes written=998		HDFS: Number of read operations=9		HDFS: Number of large read operations=0		HDFS: Number of write operations=4	Job Counters 		Launched map tasks=1		Launched reduce tasks=2		Data-local map tasks=1		Total time spent by all maps in occupied slots (ms)=3219		Total time spent by all reduces in occupied slots (ms)=13345		Total time spent by all map tasks (ms)=3219		Total time spent by all reduce tasks (ms)=13345		Total vcore-seconds taken by all map tasks=3219		Total vcore-seconds taken by all reduce tasks=13345		Total megabyte-seconds taken by all map tasks=3296256		Total megabyte-seconds taken by all reduce tasks=13665280	Map-Reduce Framework		Map input records=28		Map output records=133		Map output bytes=1513		Map output materialized bytes=1357		Input split bytes=99		Combine input records=133		Combine output records=87		Reduce input groups=87		Reduce shuffle bytes=1357		Reduce input records=87		Reduce output records=87		Spilled Records=174		Shuffled Maps =2		Failed Shuffles=0		Merged Map outputs=2		GC time elapsed (ms)=366		CPU time spent (ms)=3300		Physical memory (bytes) snapshot=625266688		Virtual memory (bytes) snapshot=8269815808		Total committed heap usage (bytes)=445120512	Shuffle Errors		BAD_ID=0		CONNECTION=0		IO_ERROR=0		WRONG_LENGTH=0		WRONG_MAP=0		WRONG_REDUCE=0	File Input Format Counters 		Bytes Read=981	File Output Format Counters 		Bytes Written=998success:0

(2)方法二:通过api在程序中设置

FileInputFormat.setMaxInputSplitSize(job,20190101l);FileInputFormat.setMinInputSplitSize(job,1000);

4.reduce数量设置

    方法一:通过api设置

job.setNumReduceTasks(2);

四、MapReduce程序

1.参考:大数据调试环境配置(2):IDEA外部链接Hadoop调试环境配置以及部署jar包到服务器

 

 

转载地址:http://geygi.baihongyu.com/

你可能感兴趣的文章
安装tensorflow,import报错。
查看>>
Tensorflow的MNIST进阶,准确率提升情况,最终训练一万次,准确率达到99.28%,可以说比官方的效果还要好
查看>>
Eclipse连接android7.0+ 手机无日志问题解决
查看>>
数据结构篇
查看>>
java数据结构(一)------枚举(Enumeration)
查看>>
android拍照相册工具类
查看>>
分享一些职业规划的思路
查看>>
Hadoop 2.0.0-cdh4.5.0安装
查看>>
Apache Hadoop 2.2.0 HDFS HA + YARN多机部署
查看>>
【甘道夫】info could only be replicated to 0 nodes, instead of 1
查看>>
【伊利丹】Hadoop2.0 NN HA实验记录
查看>>
ActiveMQ应用笔记四:Ajax应用
查看>>
【甘道夫】Hadoop培训讲义
查看>>
【甘道夫】NN HA 对于 Client 透明的实验
查看>>
【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】
查看>>
【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
查看>>
no talloc stackframe at ../source3/param/loadparm.c
查看>>
【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS
查看>>
【甘道夫】一键启动集群,包括HDFS HA + YARN相关所有程序
查看>>
AIDL
查看>>