文章目录
1.YARN产生背景
1.1 MapReduce1.x 存在一些问题
- JobTracker 是单点的,自身的压力很大,而且会成为系统扩展的瓶颈,并且不健壮,一挂全挂
- 仅仅只能够支持mapreduce作业
1.2 优化资源利用率和降低运维成本
所有的计算框架运行在一个集群中,共享一个集群的资源,按需分配!
2.YARN概述
2.1 关键词汇概念
- YARN:Yet Another Resource Negotiator 的简称
- Client:向RM提交任务、杀死任务等
- RM:ResourceManager (RM),集群中同一时刻对外提供服务的只有1个,负责分配资源相关;处理来自客户端的请求:提交、杀死任务;启动/监控AM;监控NM
- AM:ApplicationMaster (AM),每个应用程序对应一个AM,AM向RM申请资源用于在NM上启动对应的Task;数据切分;为每个task向RM申请资源(container);NodeManager通信;任务的监控
- NM:NodeManager (NM),多个,干活的;向RM发送心跳信息、任务的执行情况;接收来自RM的请求来启动任务;处理来自AM的命令
- Container: 任务的运行抽象,memory、cpu…;task是运行在container里面的;可以运行AM、也可以运行map/reduce task
2.2 执行流程
- 步骤1:Client提交Job到RM
- 步骤2 + 步骤3:RM分配一个NM启动第一个Container来运行AM,因为一个task对应一个AM,所以首先得启动一个AM
- 步骤4:AM在RM上面注册自己,并且向RM申请资源
- 步骤5 + 步骤6:AM申请到资源之后,通知相应的NM启动Container来运行Job,AM会监控Job的执行情况
3.YARN的部署
文档地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html,按照文档编辑对应的hadoop配置文件即可
4.提交Job到YARN运行
4.1 运行hadoop内置mapreduce-examples任务
cd $HADOOP_HOME/share/hadoop/mapreduce,可以看的有个 hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar,看看有哪些任务?
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar
执行wordcount 任务
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount /wordsCount/input/h.txt /wordsCount/output
控制台:
4.2 运行自己编写的任务
4.2.1 AccessYARNApp
改写上篇文章里的流量统计任务,输入目录和输出目录改成读取参数
package com.zc.bigdata.mapreduce;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class AccessYARNApp {
public static void main(String[] args) throws Exception{
Configuration configuration = new Configuration();
Job job = Job.getInstance(configuration);
job.setJarByClass(AccessYARNApp.class);
job.setMapperClass(AccessMapper.class);
job.setReducerClass(AccessReducer.class);
// 设置自定义分区规则
job.setPartitionerClass(AccessPartitioner.class);
// 设置reduce个数
job.setNumReduceTasks(3);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Access.class);
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Access.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
4.2.2 打包项目
clean一下,package一下,注意要忽略test,得到 hadoop-dfs-1.0-SNAPSHOT.jar
4.2.3 上传项目jar
4.2.4 执行命令
hadoop jar hadoop-dfs-1.0-SNAPSHOT.jar com.zc.bigdata.mapreduce.AccessYARNApp /access/input/access.log /access/output
jar名 包名+类名 + 输入路径+ 输出路径
运行结果,分了三个专区: