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