Idea远程连接Hadoop运行MapReduce

Idea远程连接Hadoop运行MapReduce

环境:hadoop2.7.1虚拟机伪分布式集群
虚拟机镜像文件下载

看到网上有许多文章,都很复杂,其实只需要以下三步就可以使用Idea远程连接Hadoop运行MapReduce

  1. 新建项目
  2. 导入jar包及设置配置文件
  3. 编写MapReduce运行

一、新建项目

这里不用多说,新建普通项目。

二、导入jar包及配置文件

  1. 导入jar包
  • HADOOP_HOME/share/hadoop/common目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;
  • HADOOP_HOME/share/hadoop/common/lib目录下的所有JAR包;
  • HADOOP_HOME/share/hadoop/hdfs目录下的haoop-hdfs-2.7.1.jar和haoop-hdfs-nfs-2.7.1.jar;
  • HADOOP_HOME/share/hadoop/hdfs/lib目录下的所有JAR包;
  • HADOOP_HOME/share/hadoop/mapreduce除hadoop-mapreduce-examples-2.7.1.jar之外的jar包;
  • HADOOP_HOME/share/hadoop/mapreduce/lib/所有jar包。
    HADOOP_HOME为hadoop安装目录,例如/usr/local/hadoop
  1. 配置文件
    将HADOOP_HOME/etc/hadoop目录下的log4j.properties,core-site.xml,hdfs-site.xml文件放到工程目录下的resources文件夹(如果没有resources则在idea中新建并将该文件夹设置为Sources Root)。

三、编写MapReduce程序运行

  1. 向hdfs上传两个txt文件,文件名称及位置为
/user/hadoop/input/myLocalFile.txt
/user/hadoop/input/wordCount.txt

myLocalFile.txt

Hadoop
Spark
WYT DBLAB

wordCount.txt

Hello World
Hello Hadoop
  1. WordCount测试代码
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;

public class WordCount {
    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable> {
        /**
         * Map处理逻辑
         * Map输入类型为 -> 
         * Map输出类型为<单词, 出现次数> -> 
         **/

        // 每个单词出现次数都为1
        private final static IntWritable one = new IntWritable(1);
        // 解析出来每个单词用Text类型存储
        private Text word = new Text();

        @Override
        public void map(LongWritable key, Text value,
                        OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException {
            /**
             * @Description: 重写map函数
             * @param: [key, value, output, reporter]
             * @return: void
             **/
            // Text类型转换成String类型
            String line = value.toString();
            // 分词器,将一行文本切分成多个单词
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens()) {
                // 取出单词并进行输出
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }

    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable> {
        /**
         * Reduce处理逻辑
         * Reduce输入类型为
         * Reduce输出类型为
         **/

        @Override
        public void reduce(Text key, Iterator<IntWritable> values,
                           OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException {
            /**
             * @Description: 重写reduce函数
             * @param: [key, values, output, reporter]
             * @return: void
             **/
            // 统计词频并输出结果
            int sum = 0;
            while (values.hasNext()) {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }

    public static void main(String[] args) throws Exception {
        // 配置信息
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");
        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(IntWritable.class);
        conf.setMapperClass(Map.class);
        conf.setCombinerClass(Reduce.class);
        conf.setReducerClass(Reduce.class);
        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);
        // 文件路径信息
        FileInputFormat.setInputPaths(conf, new Path("hdfs://192.168.199.105:9000/user/hadoop/input/"));
        FileOutputFormat.setOutputPath(conf, new Path("/Users/wangyutian/code/java/hadoop/result/wordCount"));
        // 执行
        JobClient.runJob(conf);
    }
}

需要注意的地方是,文件输入路径为hdfs文件存储路径,输出路径我这里设置为本地路径,方便查看,输出路径不能存在,运行mapreduce程序后自动生成。

  1. 运行程序,运行成功后,会在输出文件夹下生成两个文件_SUCCESS与part-00000,打开part-00000文件可以看到mapreduce运行结果
DBLAB	1
Hadoop	2
Hello	2
Spark	1
WYT	1
World	1

你可能感兴趣的:(hadoop)