MapReduce之Eclipse本地运行
前面我们介绍的wordcount案例是在Eclipse中写好代码,然后打成jar包,然后在Linux环境中执行的,这种方式在我们学习和调试的时候就显得非常的不方便,所以我们来介绍下直接在Eclipse运行的本地运行方式。
本地运行模式
本地运行模式的特点
- mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行。
- 而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上。
- 本地模式非常便于进行业务逻辑的debug,只要在eclipse中打断点即可
环境准备
- Windows系统中我们需要安装hadoop环境。
具体操作参考此文:https://dpb-bobokaoya-sm.blog.****.net/article/details/88960266
- 配置环境变量信息
测试
package com.sxt.mr.wc;
import java.io.IOException;
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;
/**
* MapReduce的启动类
* @author dengp
*
*/
public class WcTest {
public static void main(String[] args) throws Exception {
// 1.获取配置文件对象
Configuration conf = new Configuration(true);
conf.set("mapreduce.framework.name", "local");
// 输出到HDFS文件系统中
// conf.set("fs.defaultFS", "hdfs://hadoop-node01:9000");
// 输出到本地文件系统
conf.set("fs.defaultFS", "file:///");
// 2.获取Job实例
Job job = Job.getInstance(conf);
// 3.设置类对象
job.setJarByClass(WcTest.class);
// 4.设置对应的自定义的MapTask和ReduceTask
job.setMapperClass(MyMapperTask.class);
job.setReducerClass(MyReduceTask.class);
// 5.设置MapTask的输出数据类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// 6.设置输出输出类
FileInputFormat.setInputPaths(job, new Path("c:/tools/bigdata/mr/wc/input/"));
FileOutputFormat.setOutputPath(job, new Path("c:/tools/bigdata/mr/wc/output/"));
// 7.提交任务
job.waitForCompletion(true);
}
}