windows下IDEA本地運行MapReduce

  1. github下載對應版本的hadoop.dllwinutils.exe
    下載地址
  2. 配置環境變量
    步驟1下載的東西放到這個目錄裏面,
    在這裏插入圖片描述
    在Path中添加如下
    在這裏插入圖片描述
  3. IDEA創建Maven項目
    pom文件
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <hadoop.version>2.6.0-cdh5.15.1</hadoop.version>
  </properties>

  <repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
	<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  1. 找到對應hadoop版本的源碼
# 找到這個類,修改
org.apache.hadoop.io.nativeio.NativeIO

在這裏插入圖片描述
然後將這個類加到你的項目中,如下
在這裏插入圖片描述
5. 配置JVM參數
在這裏插入圖片描述
在這裏插入圖片描述
6. 編寫WordCount

package www.immoc.hadoop.mapreduce.wc;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import www.immoc.hadoop.utils.FileUtils;

import java.io.IOException;

public class WordCountApp {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        String inputPath = "data/wc.data";
//        String inputPath = args[0];
        String outputPath = "out/";
//        String outputPath = args[1];

        FileUtils.deleteTarget(outputPath, conf);

        job.setJarByClass(WordCountApp.class);

        job.setMapperClass(myMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setReducerClass(myReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        FileInputFormat.setInputPaths(job, new Path(inputPath));
        FileOutputFormat.setOutputPath(job, new Path(outputPath));

        // 按行輸入,每行一個map
        job.setInputFormatClass(NLineInputFormat.class);
        NLineInputFormat.setNumLinesPerSplit(job, 3);

        boolean result = job.waitForCompletion(true);
        System.out.println(result ? 0 : 1);
    }

    public static class myMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] datas = value.toString().split(",");

            for (String data : datas) {
                context.write(new Text(data), new IntWritable(1));
            }
        }
    }
    
    public static class myReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int count = 0;

            for (IntWritable value : values) {
                count += value.get();
            }

            context.write(key, new IntWritable(count));
        }
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章