Idea+Maven运行简单的Hadoop WordCount程序

开发环境
操作系统:Manjora Linux
开发软件:Idea Ultimate 2018.3
Jdk开发环境:1.8(请尽量不要使用超过9以上的,如果环境不是1.8请修改pom.xml里面的toos.jar的版本)
Maven版本:maven3.3.9

开发注意事项

  1. 尽量在Linux或MacOs操作系统上开发,Windows上有可能会出现权限问题
  2. Jdk环境如果不是1.8的话请务必记得修改pom.xml里面tools.jar的版本号
  3. idea只有Ultimate版本中才会自动集成这些插件,如果是社区版,操作会和本博客区别很大

项目代码

项目文件

1. 项目源代码

  • WordCount.java
package cn.org.cerambycidae.Hadoop.WordCount;

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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.util.StringTokenizer;

public class WordCount {

    public static class TokenizerMapper
            extends Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context
        ) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer
            extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                           Context context
        ) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

2. Maven配置文件

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.org.cerambycidae</groupId>
    <artifactId>USCHadoop</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 集中定义版本号 -->
    <properties>
        <hadoop.version>3.2.0</hadoop.version>
        <hadoop-core.version>1.2.1</hadoop-core.version>
        <!-- 使用jdk1.8启动,设置字符集解析为UTF-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <!-- 导入hadoop依赖环境 -->
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>${hadoop-core.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <!-- 导入jar tools包,java环境仅限于1.8 -->
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
             <!-- 如果jdk版本非1.8请自行修改对应的版本 -->
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>
    </dependencies>
    <!-- 导入apache镜像原 -->
    <repositories>
        <repository>
            <id>apache</id>
            <url>http://maven.apache.org</url>
        </repository>
    </repositories>
</project>
  • pom.xml文件中导入的包
		<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>${hadoop-core.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
  • 因为hadoop-common导入包的时候tools.jar依赖maven仓库不知道为啥没了,所以从本地环境中导入
		<!-- 导入jar tools包,java环境仅限于1.8 -->
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <!-- 如果jdk版本非1.8请自行修改对应的版本 -->
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>

3. 执行的测试文件

  • test.txt
Hello World
My name is Kezhou Liu.
I majored in software engineering in University Of South China.

4. 项目文件结构

  • 注意test.txt是放在和src同级目录的input文件夹下
  • WordCount.java放在src/java文件夹下即可,包名可以自命名
    AQyhrV.png

项目创建流程

1. 创建一个Maven项目

  1. 选择file->new->madule
    AQvYm6.png
  2. 将jdk环境调成本地配置的默认环境(我这里是1.8最好是1.8)
    AQvt0K.png
  3. 正常的填好maven项目的基础信息后一路next
    AQvGOx.png

2. 创建项目文件

  1. 创建input文件夹(和src文件夹是同级目录)和WordCount.java
    Al9jyj.png
    Al9OSg.png
  2. 配置input文件夹属性,设置Input为source
    AlC86H.png
    Al9XlQ.png
  3. 设置项目运行环境为1.8
  • 选择file->setting或ctrl+alt+s
    AlCD1g.png
    AuZGsH.png

3. 配置项目运行参数

  1. 直接选择右上角的Add Configuration
    也可以选择菜单栏的run->Edit Configuration
    AulBrT.png
  2. 选择添加Application项目
    AulDqU.png
  3. 配置Application的主函数参数
    AulsZF.png
    这里请务必务必添加上执行参数 input/ output/ 不然运行会报错
    Aul0MV.png

4. 测试开发环境

  1. 运行项目
    AKoM2F.png
  2. 在自动生成的output中查看输出文件内容
    AQjVaD.png

5. 对项目进行打包

  1. 可以直接在右侧的maven选项栏中选择直接对maven打包
    AKoeU0.png
    也可以手动输入maven的打包指令
    AKoQv4.png
  2. 在生成的target文件夹中可以查看打包成功的Jar包
    AKouCT.png
发布了10 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/day_to_die/article/details/88691633
今日推荐