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. 项目源代码
      • 2. Maven配置文件
      • 3. 执行的测试文件
      • 4. 项目文件结构
    • 项目创建流程
      • 1. 创建一个Maven项目
      • 2. 创建项目文件
      • 3. 配置项目运行参数
      • 4. 测试开发环境
      • 5. 对项目进行打包

开发注意事项

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

项目代码

  • github-USCHadoop

项目文件

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

<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.0modelVersion>

    <groupId>cn.org.cerambycidaegroupId>
    <artifactId>USCHadoopartifactId>
    <version>1.0-SNAPSHOTversion>

    
    <properties>
        <hadoop.version>3.2.0hadoop.version>
        <hadoop-core.version>1.2.1hadoop-core.version>
        
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
    properties>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-coreartifactId>
            <version>${hadoop-core.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-commonartifactId>
            <version>${hadoop.version}version>
        dependency>
        
        <dependency>
            <groupId>jdk.toolsgroupId>
            <artifactId>jdk.toolsartifactId>
             
            <version>1.8version>
            <scope>systemscope>
            <systemPath>${env.JAVA_HOME}/lib/tools.jarsystemPath>
        dependency>
    dependencies>
    
    <repositories>
        <repository>
            <id>apacheid>
            <url>http://maven.apache.orgurl>
        repository>
    repositories>
project>
  • pom.xml文件中导入的包
		<dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-coreartifactId>
            <version>${hadoop-core.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-commonartifactId>
            <version>${hadoop.version}version>
        dependency>
  • 因为hadoop-common导入包的时候tools.jar依赖maven仓库不知道为啥没了,所以从本地环境中导入
		
        <dependency>
            <groupId>jdk.toolsgroupId>
            <artifactId>jdk.toolsartifactId>
            
            <version>1.8version>
            <scope>systemscope>
            <systemPath>${env.JAVA_HOME}/lib/tools.jarsystemPath>
        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文件夹下即可,包名可以自命名
    Idea+Maven运行简单的Hadoop WordCount程序_第1张图片

项目创建流程

1. 创建一个Maven项目

  1. 选择file->new->madule
    Idea+Maven运行简单的Hadoop WordCount程序_第2张图片
  2. 将jdk环境调成本地配置的默认环境(我这里是1.8最好是1.8)
    Idea+Maven运行简单的Hadoop WordCount程序_第3张图片
  3. 正常的填好maven项目的基础信息后一路next
    Idea+Maven运行简单的Hadoop WordCount程序_第4张图片

2. 创建项目文件

  1. 创建input文件夹(和src文件夹是同级目录)和WordCount.java
    Idea+Maven运行简单的Hadoop WordCount程序_第5张图片
    Idea+Maven运行简单的Hadoop WordCount程序_第6张图片
  2. 配置input文件夹属性,设置Input为source
    Idea+Maven运行简单的Hadoop WordCount程序_第7张图片
    Idea+Maven运行简单的Hadoop WordCount程序_第8张图片
  3. 设置项目运行环境为1.8
  • 选择file->setting或ctrl+alt+s
    Idea+Maven运行简单的Hadoop WordCount程序_第9张图片
    Idea+Maven运行简单的Hadoop WordCount程序_第10张图片

3. 配置项目运行参数

  1. 直接选择右上角的Add Configuration
    也可以选择菜单栏的run->Edit Configuration
    Idea+Maven运行简单的Hadoop WordCount程序_第11张图片
  2. 选择添加Application项目
    Idea+Maven运行简单的Hadoop WordCount程序_第12张图片
  3. 配置Application的主函数参数
    Idea+Maven运行简单的Hadoop WordCount程序_第13张图片
    这里请务必务必添加上执行参数 input/ output/ 不然运行会报错
    Idea+Maven运行简单的Hadoop WordCount程序_第14张图片

4. 测试开发环境

  1. 运行项目
    Idea+Maven运行简单的Hadoop WordCount程序_第15张图片
  2. 在自动生成的output中查看输出文件内容
    Idea+Maven运行简单的Hadoop WordCount程序_第16张图片

5. 对项目进行打包

  1. 可以直接在右侧的maven选项栏中选择直接对maven打包
    Idea+Maven运行简单的Hadoop WordCount程序_第17张图片
    也可以手动输入maven的打包指令
    Idea+Maven运行简单的Hadoop WordCount程序_第18张图片
  2. 在生成的target文件夹中可以查看打包成功的Jar包
    Idea+Maven运行简单的Hadoop WordCount程序_第19张图片

你可能感兴趣的:(大数据)