Hadoop---Yarn资源调度管理器
1.Yarn简介
YARN是一个运算资源(cpu 内存 网络 Io....)管理系统, 主要负责集群资源的管理和调度监控任务进度 , 如果要将程序运行在yarn上需要两个组件 , 客户端和yarn这两个组件在编程的过程中非常复杂
2.Yarn 的安装
2.1 在hadoop_home中的etc下修改yarn-site.xml文件,具体目录为:/opt/apps/hadoop-3.1.1/etc/hadoop/yarn-site.xml,将一下内容编辑到配置文件中,注意:将配置文件修改完成之后,需要将配置文件分发到集群中的每个机器,使用命令:scp /opt/apps/hadoop-3.1.1/etc/hadoop/yarn-site.xml linux02:$PWD
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- resource,manager主节点所在机器 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>linux01</value>
</property>
<!-- 为mr程序提供shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 一台NodeManager的总可用内存资源 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 一台NodeManager的总可用(逻辑)cpu核数 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!-- 是否检查容器的虚拟内存使用超标情况 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 容器的虚拟内存使用上限:与物理内存的比率 -->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
2.2 配置一键启动和停止,在/opt/apps/hadoop-3.1.1/sbin/下修改start-yarn.sh 和 stop-yarn.sh这两个文件
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
2.3 使用一键启动命令,启动yarn服务
2.4 web端访问yarn,http://linux01:8088
3. 将MR程序提交到Yarn上有两种方式:
3.1 在windows上提交Yarn
3.1.1 在idea中添加mapre-site.xml配置文件
3.1.2 在mapre-site.xml文件中添加配置参数
<configuration> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value> </property> </configuration>
3.1.3 在启动程序中需要设置一些参数,具体如下
1) HADOOP_USER_NAME
2) 运行模式为yarn
3) resourcemanage的位置
4) 默认操作的文件系统
5) 跨平台参数
6) Jar包的路径
// 设置hadoop的用户名
System.setProperty("HADOOP_USER_NAME", "root");
// yarn 集群模式运行 单
// 1 配置对象
Configuration conf = new Configuration();
//设置MR程序运行模式
conf.set("mapreduce.framework.name" , "yarn");
//程序yarn的位置
conf.set("yarn.resourcemanager.hostname", "linux01");
// 处理HDFS中的数据
conf.set("fs.defaultFS", "hdfs://linux01:8020");
// 设置跨平台参数
conf.set("mapreduce.app-submission.cross-platform","true");
// 获取一个Job对象
Job job = Job.getInstance(conf, "wordcount");
// 设置jar包的位置
job.setJar("C:\\Users\\Mr。ZXX\\Desktop\\demo.jar");
//3 设置map和reducetask任务类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReduce.class);
// 4 设置maptask和reducetask的输出的key value类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//5 设置reduce的个数
job.setNumReduceTasks(2);
//6 设置处理数据的输入路径 这个路径指的是linux中的要出来文件的路径
FileInputFormat.setInputPaths(job,new Path("/b.txt"));
// 7设置结果的输出路径 ,这个输出路径值得是在linux中的输出路径
FileOutputFormat.setOutputPath(job,new Path("/wc/"));
//8提交job
job.waitForCompletion(true) ;
3.1.4 在linux上提交mr 程序
1)需要修改启动类
// 1 配置对象
Configuration conf = new Configuration();
//设置MR程序运行模式
conf.set("mapreduce.framework.name" , "yarn");
//程序yarn的位置
conf.set("yarn.resourcemanager.hostname", "linux01");
// 2 获取一个Job对象
Job job = Job.getInstance(conf, "wordcount");
//设置jar包中要执行的类名
job.setJarByClass(WcDriver2.class);
//3 设置map和reducetask任务类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReduce.class);
// 4 设置maptask和reducetask的输出的key value类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//5 设置reduce的个数
job.setNumReduceTasks(2);
//6 设置处理数据的输入路径 本地测试
FileInputFormat.setInputPaths(job,new Path("/b.txt"));
// 7设置结果的输出路径
FileOutputFormat.setOutputPath(job,new Path("/wc3/"));
//8提交job
job.waitForCompletion(true) ;
2)将修改完成启动类之后,需要使用maven工具将项目打成jar包,上传到linux中
3)配置linux机器上的HADOOP_HOME/ect/hadoop/mapred-site.xml文件
<configuration>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
</configuration>
4)在linux中输入启动程序命令:
hadoop jar /demo.jar com._51doit.mr.day06.yarn.WcDriver2
标红的这个路径指的是我们要启动类的绝对路径,在idea中使用copy reference