Hadoop(4):MapReduce on Yarn工作流程

25 篇文章 1 订阅
7 篇文章 0 订阅

一、关键概念

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=998
success:0

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

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

4.reduce数量设置

    方法一:通过api设置

job.setNumReduceTasks(2);

四、MapReduce程序

1.参考:大数据调试环境配置(2):IDEA外部链接Hadoop调试环境配置以及部署jar包到服务器https://blog.csdn.net/u010886217/article/details/89278390

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YARN(Yet Another Resource Negotiator)是Hadoop v2版本中用于资源管理和任务调度的框架。在Hadoop v1版本中,资源管理和任务调度是由MapReduce框架本身完成的,这导致了一些问题,例如任务难以弹性调度、资源利用率低等。 YARN的出现解决了这些问题。它的工作方式是将资源管理和任务调度分离开来。YARN有三个核心组件:ResourceManager、NodeManager和ApplicationMaster。 ResourceManager是整个集群的主要协调者,负责集群资源的管理和分配。它接收来自客户端的资源请求,并根据资源容量和使用情况进行调度。ResourceManager为每个应用程序分配一个ApplicationMaster。 NodeManager是每个节点上的代理程序,负责与ResourceManager通信,并管理本地节点的资源。它监测节点上的资源使用情况,并将这些信息报告给ResourceManager,同时启动和监控容器世界。 ApplicationMaster是每个应用程序的主管,负责与ResourceManager通信,申请资源并监控任务的执行。它将任务分成多个容器,并向NodeManager发送容器启动请求。一旦容器启动,ApplicationMaster就会监控这些任务的执行情况,并向ResourceManager报告任务的状态。 YARN的资源调度器是通过使用调度器插件实现的。YARN提供了多个调度器插件,例如先进先出调度器、容量调度器和公平调度器等。这些调度器插件可以根据应用程序的资源需求、业务优先级和集群资源的配置来灵活地分配和管理资源,从而实现更高的资源利用率和更好的任务调度性能。 总的来说,YARN的资源调度器是Hadoop框架中的一个重要组件,它通过将资源管理和任务调度分离,实现了更好的弹性和资源利用率,为大数据处理提供了更高的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值