前面我们介绍的wordcount案例是在Eclipse中写好代码,然后打成jar包,然后在Linux环境中执行的,这种方式在我们学习和调试的时候就显得非常的不方便,所以我们来介绍下直接在Eclipse运行的本地运行方式。
本地运行模式
本地运行模式的特点
mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行。
而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上。
本地模式非常便于进行业务逻辑的debug,只要在eclipse中打断点即可
环境准备
Windows系统中我们需要安装hadoop环境。
具体操作参考此文:https://dpb-bobokaoya-sm.blog.csdn.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); } }