MapReduce使用

机器配置:

hadoop集群有一个master和两个slave

hadoop的安装目录为/root/hadoop-2.5.2

利用hadoop自带的wordcount计算词数:

1、启动hadoop集群

命令:source ~/.bash_profile
在这里插入图片描述在这里插入图片描述在这里插入图片描述
2、进入hadoop安装目录

命令:cd ~/hadoop-2.5.2
在这里插入图片描述
3、创建hdfs数据目录:hadoop fs -mkdir /input
在这里插入图片描述
4、查看hdfs根目录下文件

命令:hadoop fs -ls /
在这里插入图片描述在这里插入图片描述
5、把在/root/hadoop-2.5.2目录下的LICENSE.txt放到hdfs的/input文件夹里

命令:hadoop fs -put LICENSE.txt /input
在这里插入图片描述
6、查看是否移入成功

命令:hadoop fs -ls /input
在这里插入图片描述
7、进入jar包目录

命令:cd ./share/hadoop/mapreduce

在这里插入图片描述
8、通过hadoop自带示例程序wordcount计算词数:

命令:hadoop jar hadoop-mapreduce-examples-2.5.2.jar wordcount /input /output

其中:hadoop-mapreduce-examples-2.5.2.jar为使用的jar包,wordcount 为jar中Main入口类的名字,/input为hdfs下输入文件的目录,/output为输出文件的目录,且该目录在命令执行时会创建(之前不能有)

在这里插入图片描述
9、查看此时hdfs根目录

命令:hadoop fs -ls /

在这里插入图片描述在这里插入图片描述
10、查看output下的文件

命令:hadoop fs -ls /output
在这里插入图片描述在这里插入图片描述
11、打开part-r-00000,里面存放着词频统计的结果

命令:hadoop fs -cat /output/part-r-00000

在这里插入图片描述在这里插入图片描述

自己编写程序使用MapReduce

例如:利用IDEA自己编写程序,实现MapReduce

hadoop安装在虚拟机的/opt/hadoop-2.9.2中

1、在IDEA中File->New->Project创建新项目
在这里插入图片描述
2、选择Maven项目,然后点击Next

在这里插入图片描述
3、GroupId为项目包名,ArtifactId为程序名,Version为版本
在这里插入图片描述在这里插入图片描述
4、Project name为项目名称,Project location为项目位置

5、然后点击Finish。跳出New Project后,选择New Window

6、然后在电脑中任意路径下(尽量不要有中文),放入以下5个jar包
在这里插入图片描述
7、将这5个jar包导入到项目中

8、在java下创建以下3个类

WordCount.java

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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
    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]));
        job.waitForCompletion(true) ;
        //System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

TokenizerMapper.java

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

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


public class TokenizerMapper extends Mapper<Object, Text,Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    //由于该例子未用到key的参数,所以该处key的类型就简单指定为Object

    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);
        }
    }
}

IntSumReducer.java

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public 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);
    }
}

在这里插入图片描述
9、然后将这个项目打包为jar包

10、然后在虚拟机的/opt/hadoop-2.9.2目录下创建一个目录job,利用Xftp将这个jar包从主机放到虚拟机上,如放在虚拟机的/opt/hadoop-2.9.2/job目录下(可以放在其他目录下)

[root@hadoop01 hadoop-2.9.2]# mkdir job

在这里插入图片描述
11、在/opt/hadoop-2.9.2/job目录下,创建一个input_data.txt,向其中输入3个harry和1个Potter,作为要统计词频的文本文件

[root@hadoop01 hadoop-2.9.2]# vi job/input_data.txt

在这里插入图片描述

12、在hdfs上创建目录/test,将input_data.txt传上去

[root@hadoop01 hadoop-2.9.2]# hadoop fs -mkdir /test
[root@hadoop01 hadoop-2.9.2]# hadoop fs -put job/input_data.txt /test

13、利用之前生成的MyHadoopTest.jar这个jar包实现词频统计

其中:job/MyHadoopTest.jar为我们生成的jar包,因为放在/opt/hadoop-2.9.2/job下,所以前面加job/

WordCount为打包的项目的Main类的名字,/test为hdfs中输入文件的所在目录,/testoutput为输出文件所在目录,该目录执行完语句后创建

[root@hadoop01 hadoop-2.9.2]# hadoop jar job/MyHadoopTest.jar WordCount /test /testoutput

14、查看hdfs上/testoutput中的文件,其中part-r-00000为输出结果

[root@hadoop01 hadoop-2.9.2]# hadoop fs -ls /testoutput

在这里插入图片描述
15、查看part-r-00000的内容,为文本统计的内容

[root@hadoop01 hadoop-2.9.2]# hadoop fs -cat /testoutput/part-r-00000

在这里插入图片描述

发布了12 篇原创文章 · 获赞 0 · 访问量 114

猜你喜欢

转载自blog.csdn.net/weixin_41732718/article/details/104658922