Ubuntu上利用IntelliJ IDEA通过maven自动拉取hadoop依赖实现mapreduce中的WordCount

Ubuntu上利用IntelliJ IDEA通过maven自动拉取hadoop依赖实现mapreduce中的WordCount

本文是关于idea实现mapreduce中的WordCount,主要是讲解如何在在idea中开发Hadoop程序以及打包jar包,上传到Hadoop集群中运行

1.在Idea中创建maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里随便填一下就可以了

这是一开始的目录
在这里插入图片描述
可以看到生成了一个pom.xml文件,这是我们接下来用于自动导入Hadoop依赖的jar包的重要文件

2.修改pom.xml文件以便工程自动导入Hadoop依赖

在该文件的 <dependencies></dependencies>之间加入上面的代码段

   
   <dependency>
     <groupId>org.apache.hadoop</groupId>
     <artifactId>hadoop-common</artifactId>
     <version>2.7.1</version>
   </dependency>
   <dependency>
     <groupId>org.apache.hadoop</groupId>
     <artifactId>hadoop-hdfs</artifactId>
     <version>2.7.1</version>
   </dependency>
   <dependency>
     <groupId>org.apache.hadoop</groupId>
     <artifactId>hadoop-client</artifactId>
     <version>2.7.1</version>
   </dependency>
   <dependency>
     <groupId>org.apache.hadoop</groupId>
     <artifactId>hadoop-mapreduce-client-core</artifactId>
     <version>2.7.1</version>
   </dependency>

接着需要右击pom.xml文件,选择maven→Download Sources and Docementation

在这里插入图片描述
当然在下载好之后需要点击import Changes
在这里插入图片描述
等待下载好之后,我们就可以开始编写代码了

3.编写词频统计算法

src/main/java目录下创建三个类,分别为:

WCMapper

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class WCMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    Text k = new Text();
    IntWritable v = new IntWritable(1);
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //1.将文本转化成字符串
        String line = value.toString();
        //2.将字符串切割
        String[] words = line.split("\\s+");
        //3.循环遍历,将每一个单词写出去
        for (String word : words) {
            k.set(word);
            context.write(k,v);
        }
    }
}
WCRducer

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class WCReducer extends Reducer< Text,IntWritable,Text, IntWritable> {
    IntWritable v = new IntWritable();
    int sum;
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //reduce端接收到的类型大概是这样的 (wish,(1,1,1,1))
        //对迭代器进行累加求和
        //sum必须赋值为0初始化,因为reduce方法是每个键都会执行一次
        sum=0;
        for (IntWritable count : values) {
            sum+=count.get();
        }
        v.set(sum);
        //将key和value进行写出
        context.write(key,v);
    }
}

WCDriver

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;

public class WCDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //1.创建配置文件,创建Job
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf,"wordcount");

        //2.设置jar的位置,参数为本类类名.class
        job.setJarByClass(WCDriver.class);

        //3.设置map和reduce的位置
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);

        //4.设置map输出端的key,value类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //5.设置reduce输出的key,value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //6.设置输入和输出路径,输入的是本地自己建的txt文件,会输出一个test目录
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //7.提交程序运行
        boolean result = job.waitForCompletion(true);
        System.exit(result?0:1);
    }
}

4.打包jar包

之后我们需要右击项目找到Open Module Settings

在这里插入图片描述

找到Artifacts→JAR→From modules with dependencies…在这里插入图片描述
找到主类WCDriver在这里插入图片描述
在主页面找到Build → Build Artifacts→Build

在这里插入图片描述

之后我们可以发现目录树中出现了一个out目录,在字树文件中有一个mypro.jar文件,这个就是我们打包的文件

5.将打包的jar文件上传到hdfs

hdfs dfs -put 虚拟机本地jar包存储完整路径 hdfs文件系统存储的路径

6.利用Hadoop集群运行该jar包

hadoop jar 项目名.jar 输入目录 输出目录
ps:需要注意的是,这里的输入目录就是我们需要统计词频的文件目录,而输出目录是mapreduce计算后输出的结果

7.演示

这是需要统计词频的文件

在这里插入图片描述

这是写入命令后,mapreduce开始执行任务

在这里插入图片描述

查看输出后的文件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>