1 YARN简介
2 YARN安装
3 将MR程序提交到YARN上
3.1windows上提交MR程序
1 本项目中添加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>
2 启动程序中设置一些参数
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");// 设置jar包的位置// 2 获取一个Job对象Job job = Job.getInstance(conf, "wordcount");job.setJar("C:\\Users\\Administrator\\Desktop\\demo.jar");
package com._51doit.mr.day06.yarn;import com._51doit.mr.day03.WordCountMapper;
import com._51doit.mr.day03.WordCountReducer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;import java.io.IOException;/*** @Classname WcDriver* @Date 2020/9/26 0026 10:48* @Created by 多易教育-DOIT18* @Description: MR程序默认是运行在本地上 通过参数设置将MR程序运行在YARN 上* 1 设置MR程序运行模式 yarn* 2 告诉程序yarn的位置* 3 MR程序处理HDFS系统中的文件数据* 4 设置windows上运行程序的跨平台参数* 5 mt rm 程序 --> yarn -->调度 --运行在同的节点上 [jar包]* 设置jar包的位置* 6 添加mapred-site.xml 配置了MR程序的运行环境**/
public class WcDriver {public static void main(String[] args) throws Exception {// 设置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");// 设置jar包的位置// 2 获取一个Job对象Job job = Job.getInstance(conf, "wordcount");job.setJar("C:\\Users\\Administrator\\Desktop\\demo.jar");//3 设置map和reducetask任务类job.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReducer.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("/word.txt"));// 7设置结果的输出路径FileOutputFormat.setOutputPath(job,new Path("/wc2/"));//8提交jobjob.waitForCompletion(true) ;}
}
3.2 linux提交MR程序
启动类中只需要添加程序的运行模式
// 设置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");// 设置jar包的位置// 2 获取一个Job对象Job job = Job.getInstance(conf, "wordcount");//job.setJar("/demo.jar");/*** java -cp /demo.jar com._51doit.day06.uarn.WcDriver**/job.setJarByClass(WcDriver2.class);
package com._51doit.mr.day06.yarn;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;/*** @Classname WcDriver* @Date 2020/9/26 0026 10:48* @Created by 多易教育-DOIT18* @Description: MR程序默认是运行在本地上 通过参数设置将MR程序运行在YARN 上* 1 设置MR程序运行模式 yarn* 2 告诉程序yarn的位置* 3 MR程序处理HDFS系统中的文件数据* 4 设置windows上运行程序的跨平台参数* 5 mt rm 程序 --> yarn -->调度 --运行在同的节点上 [jar包]* 设置jar包的位置* 6 添加mapred-site.xml 配置了MR程序的运行环境*com._51doit.mr.day06.yarn.WcDriver2*/
public class WcDriver2 {public static void main(String[] args) throws Exception {// 设置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");// 设置jar包的位置// 2 获取一个Job对象Job job = Job.getInstance(conf, "wordcount");//job.setJar("/demo.jar");/*** java -cp /demo.jar com._51doit.day06.uarn.WcDriver**/job.setJarByClass(WcDriver2.class);//3 设置map和reducetask任务类job.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReducer.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("/word.txt"));// 7设置结果的输出路径FileOutputFormat.setOutputPath(job,new Path("/wc3/"));//8提交jobjob.waitForCompletion(true) ;}
}
配置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>
启动程序
hadoop jar /demo.jar com._51doit.mr.day06.yarn.WcDriver2