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

本文介绍了如何在Manjora Linux上,利用Idea Ultimate 2018.3和Maven开发环境,创建并运行Hadoop的WordCount程序。重点包括项目的创建流程,如创建Maven项目、配置文件、设置运行参数,以及打包和测试过程。特别提示,项目需在Jdk 1.8环境下运行,并注意解决tools.jar的依赖问题。

开发环境
操作系统: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)
<think> 我们参考提供的引用内容,总结出配置步骤: 1. 创建Maven项目:在IntelliJ IDEA中新建Maven项目,配置好JDK。 2. 配置pom.xml:添加Hadoop依赖(指定版本,如2.6.0)。 3. 编写MapReduce程序:例如WordCount。 4. 本地运行:无需安装Hadoop环境,可直接在IDEA运行(用于测试)。 5. 打包成JAR:通过Maven打包项目为JAR文件。 6. 上传到HDFS(如果需要集群运行):将输入文件和JAR包上传到HDFS。 7. 提交到Hadoop集群运行:使用`hadoop jar`命令。 注意:引用[1]和[2]提到了本地运行无需安装Hadoop环境,但实际集群运行需要Hadoop环境。引用[3]提到了打包和集群运行的步骤,引用[4]提到添加依赖的方式(但Maven方式通常不需要手动添加,所以以pom.xml配置为主)。 下面详细说明步骤: </think> ### IntelliJ IDEA 配置 Maven 执行 Hadoop MapReduce 任务的方法 #### **1. 环境准备** - **JDK 1.8+**:确保系统已安装[JDK](https://www.oracle.com/java/technologies/downloads/) - **IntelliJ IDEA**:推荐 2018.1 或更高版本[^2] - **Maven 3.5.4+**:项目管理工具[^1] - **Hadoop 依赖包**:无需本地安装Hadoop/HDFS,通过Maven自动管理(如Hadoop 2.6.0)[^1][^2] #### **2. 创建Maven项目** 1. **新建项目**: `File → New → Project → Maven`,选择JDK版本 2. **配置pom.xml**:添加Hadoop依赖 ```xml <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0</version> <!-- 匹配你的Hadoop版本 --> </dependency> </dependencies> ``` Maven会自动解析所有依赖[^1][^2] #### **3. 编写MapReduce程序** 以WordCount为例: ```java public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{...} public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {...} public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); ... System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` #### **4. 本地运行调试(无需Hadoop环境)** - 直接右键运行 `main()` 方法 - 输入/输出路径使用本地文件系统: `args = {"本地输入文件路径", "本地输出目录路径"}`[^1][^2] #### **5. 打包与集群部署** 1. **生成JAR包**: ```bash mvn clean package # 生成 target/your-project.jar ``` 2. **上传到HDFS集群**: ```bash hdfs dfs -put your-project.jar /hdfs/path/ hdfs dfs -put input.txt /hdfs/input/ ``` 3. **提交MapReduce任务**: ```bash hadoop jar your-project.jar WordCount /hdfs/input /hdfs/output ``` #### **关键配置说明** | 步骤 | 操作要点 | |----------------|--------------------------------------------------------------------------| | **依赖管理** | Maven自动解决Hadoop依赖冲突,无需手动添加JAR[^1] | | **本地调试** | 利用`ToolRunner`模拟环境,避免依赖HDFS[^2] | | **集群运行** | 需确保JAR中的依赖包含`hadoop-client`(通过`maven-assembly-plugin`打包) | ###
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值