调用MapReduce对文件中单词出现次数进行统计

调用MapReduce对文件中各个单词出现次数进行统计

  • 一、Ubuntu安装
  • 二、准备工作
    • 1.创建hadoop用户
    • 2.安装 Hadoop3.1.3
    • 3.Hadoop伪分布式配置
  • 三、 调用MapReduce执行WordCount对单词进行计数
    • 1.将待分析的文件上传到HDFS
    • 2.安装eclipse
    • 3.在 Eclipse 中创建 MapReduce 项目
    • 4.执行MapReduce的 wordcount程序进行单词统计
  • 四、总结
  • 五、参考资料

一、Ubuntu安装

1.打开VirtualBox,点击“创建”按钮,创建一个虚拟机调用MapReduce对文件中单词出现次数进行统计_第1张图片

2.选择内存大小
调用MapReduce对文件中单词出现次数进行统计_第2张图片

3.创建虚拟硬盘
调用MapReduce对文件中单词出现次数进行统计_第3张图片

4.选择虚拟硬盘文件类型VDI
调用MapReduce对文件中单词出现次数进行统计_第4张图片

5.虚拟硬盘选择动态分配
调用MapReduce对文件中单词出现次数进行统计_第5张图片

6.选择文件存储的位置和容量大小
调用MapReduce对文件中单词出现次数进行统计_第6张图片

7.下载的Ubuntu LTS 14.04的ISO映像文件,进入设置界面后,点击存储中的没有盘片,再点击光盘按钮,选择一个虚拟光驱,添加下载的Ubuntu LTS 14.04 ISO映像文件
调用MapReduce对文件中单词出现次数进行统计_第7张图片

调用MapReduce对文件中单词出现次数进行统计_第8张图片

调用MapReduce对文件中单词出现次数进行统计_第9张图片

8.选择创建的虚拟机Ubuntu,点击“启动”按钮
调用MapReduce对文件中单词出现次数进行统计_第10张图片

9.选择刚才的ISO文件
调用MapReduce对文件中单词出现次数进行统计_第11张图片

10.启动看到Ubuntu的安装欢迎界面。选择安装ubuntu Kylin
调用MapReduce对文件中单词出现次数进行统计_第12张图片

11.选择继续调用MapReduce对文件中单词出现次数进行统计_第13张图片

12.安装类型选择其他选项
调用MapReduce对文件中单词出现次数进行统计_第14张图片

13.点击新建分区表,添加swap和ect4类型分区
调用MapReduce对文件中单词出现次数进行统计_第15张图片

14.选择相应时区和键盘布局
调用MapReduce对文件中单词出现次数进行统计_第16张图片

调用MapReduce对文件中单词出现次数进行统计_第17张图片

15.创建用户名和密码
调用MapReduce对文件中单词出现次数进行统计_第18张图片
16.安装完成,重启
调用MapReduce对文件中单词出现次数进行统计_第19张图片

二、准备工作

1.创建hadoop用户

1.代码如下

$ sudo useradd -m hadoop -s /bin/bash

2.设置密码,添加管理员权限。

$ sudo passwd hadoop
$ sudo adduser hadoop sudo

3.更新apt

$ sudo apt-get update

4.安装配置文件VIM。

$ sudo apt-get install vim

5.安装SSH、配置SSH无密码登陆。

$ sudo apt-get install openssh-server

6.安装JAVA环境
下载文件jdk-8u162-linux-x64.tar.gz 使用Filezilla传输到“/home/linziyu/Downloads/”目录下。

$ cd /usr/lib
$ sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
$ cd ~ #进入hadoop用户的主目录
$ cd Downloads 
$ sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm  #解压

7.设置环境变量

$ cd ~
$ vim ~/.bashrc

上面命令使用vim编辑器(查看vim编辑器使用方法)打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:
调用MapReduce对文件中单词出现次数进行统计_第20张图片
保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

$ source ~/.bashrc

2.安装 Hadoop3.1.3

下载文件hadoop-3.1.3.tar.gz 使用Filezilla传输到“/usr/local/”目录下。

$ sudo tar -zxf ~/下载/hadoop-3.1.3.tar.gz -C /usr/local    # 解压
$ cd /usr/local/
$ sudo mv ./hadoop-3.1.3/ ./hadoop        # 将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop  

3.Hadoop伪分布式配置

1.Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。

修改配置文件 core-site.xml ,将当中的


修改为下面配置:

同样的,修改配置文件 hdfs-site.xml:
调用MapReduce对文件中单词出现次数进行统计_第21张图片

2.执行 NameNode 的格式化:

$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format

3.开启 NameNode 和 DataNode 守护进程。

$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh

`

调用MapReduce对文件中单词出现次数进行统计_第22张图片

三、 调用MapReduce执行WordCount对单词进行计数

1.将待分析的文件上传到HDFS

1.使用Firezilla将2002.txt文件传到hadoop中
调用MapReduce对文件中单词出现次数进行统计_第23张图片

文件已传进/home/hadoop文件夹下。
调用MapReduce对文件中单词出现次数进行统计_第24张图片

启动hadoop,将2002.txt上传至HDFS。
调用MapReduce对文件中单词出现次数进行统计_第25张图片

2.安装eclipse

在ubuntu软件中心中下载安装:调用MapReduce对文件中单词出现次数进行统计_第26张图片

下载后执行如下命令,将 Eclipse 安装至 /usr/lib 目录中:

 sudo tar -zxf ~/下载/eclipse-java-mars-1-linux-gtk*.tar.gz -C/usr/lib

3.在 Eclipse 中创建 MapReduce 项目

1.在Eclipse中创建项目。
调用MapReduce对文件中单词出现次数进行统计_第27张图片

2.选择“File–>New–>Java Project”菜单,开始创建一个Java工程,弹出如下图所示界面。
调用MapReduce对文件中单词出现次数进行统计_第28张图片

在“Project name”后面输入工程名称“WordCount”,选中“Use default location”,让这个Java工程的所有文件都保存到“/home/hadoop/workspace/WordCount”目录下。在“JRE”这个选项卡中,选择jdk1.8.0_162。然后,点击界面底部的“Next>”按钮,进入下一步的设置。

3.为项目添加需要用到的JAR包。
调用MapReduce对文件中单词出现次数进行统计_第29张图片

4.点击界面右侧的“Add External JARs…”按钮,弹出如下图所示界面。
调用MapReduce对文件中单词出现次数进行统计_第30张图片
(1)“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包,但是,不包括jdiff、lib、lib-examples和sources目录。
(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有JAR包。

5.在Eclipse工作界面左侧的“Package Explorer”面板中(如下图所示),找到刚才创建好的工程名称“WordCount”,然后在该工程名称上点击鼠标右键,在弹出的菜单中选择“New–>Class”菜单。
调用MapReduce对文件中单词出现次数进行统计_第31张图片
6.选择“New–>Class”菜单以后会出现如下图所示界面。
调用MapReduce对文件中单词出现次数进行统计_第32张图片

在该界面中,只需要在“Name”后面输入新建的Java类文件的名称,这里采用名称“WordCount”,其他都可以采用默认设置,然后,点击界面右下角“Finish”按钮。

4.执行MapReduce的 wordcount程序进行单词统计

文件MapReduce处理的代码,在exclipse上运行 wordcount程序:

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
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 org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
    public WordCount() {
    }
     public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
        if(otherArgs.length < 2) {
            System.err.println("Usage: wordcount  [...] ");
            System.exit(2);
        }
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(WordCount.TokenizerMapper.class);
        job.setCombinerClass(WordCount.IntSumReducer.class);
        job.setReducerClass(WordCount.IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class); 
        for(int i = 0; i < otherArgs.length - 1; ++i) {
            FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
        }
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
        System.exit(job.waitForCompletion(true)?0:1);
    }
    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);
        private Text word = new Text();
        public TokenizerMapper() {
        }
        public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString()); 
            while(itr.hasMoreTokens()) {
                this.word.set(itr.nextToken());
                context.write(this.word, one);
            }
        }
    }
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();
        public IntSumReducer() {
        }
        public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int sum = 0;
            IntWritable val;
            for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
                val = (IntWritable)i$.next();
            }
            this.result.set(sum);
            context.write(key, this.result);
        }
    }
}

10.编译打包程序。
调用MapReduce对文件中单词出现次数进行统计_第33张图片

调用MapReduce对文件中单词出现次数进行统计_第34张图片

11.点击界面右下角的“OK”按钮,开始运行程序。程序运行结束后,会在底部的“Console”面板中显示运行结果信息
调用MapReduce对文件中单词出现次数进行统计_第35张图片
12.把Java应用程序打包生成JAR包,部署到Hadoop平台上运行。现在可以把词频统计程序放在“/usr/local/hadoop/myapp”目录下。

$ cd /usr/local/hadoop
$ mkdir myapp

13.在Eclipse工作界面左侧的“Package Explorer”面板中,在工程名称“WordCount”上点击鼠标右键,在弹出的菜单中选择“Export”,
调用MapReduce对文件中单词出现次数进行统计_第36张图片

调用MapReduce对文件中单词出现次数进行统计_第37张图片

14.在该界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮,弹出如下图所示界面。
调用MapReduce对文件中单词出现次数进行统计_第38张图片

调用MapReduce对文件中单词出现次数进行统计_第39张图片

调用MapReduce对文件中单词出现次数进行统计_第40张图片

15.运行程序。

cd /usr/local/hadoop
./sbin/start-dfs.sh

16.把2002.txt上传到HDFS中的“/user/hadoop/input”目录下

$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -put ./2002.txt input

17.查看HDFS input文件,看是否存在2002.txt。
在这里插入图片描述

18.使用hadoop jar命令运行程序

$ cd /usr/local/hadoop
$ ./bin/hadoop jar ./myapp/WordCount.jar input output

19.查看output文件夹是否有运行成功后生成的文件以及查看运行后生成的output/part-r-00000这个文件。
在这里插入图片描述

调用MapReduce对文件中单词出现次数进行统计_第41张图片

20.将output文件夹下载至本地:
在这里插入图片描述
21.查看文件:
调用MapReduce对文件中单词出现次数进行统计_第42张图片

22.查看part-r-00000文件:
调用MapReduce对文件中单词出现次数进行统计_第43张图片

调用MapReduce对文件中单词出现次数进行统计_第44张图片

四、总结

通过本次实验让我了解并学习了很多东西,从ubuntu,hadoop,jdk和eclipse的安装再到WordCount执行完成后的结果,每个步骤都让我知道和学习了一些操作、命令和知识。在这次试验之后我对大数据这门课有了不一样的理解,对linux的命令记得更牢了。并且在这次实验的操作过程中也发现了很多自己的不足之处,在今后会多加练习提高自身水平。

五、参考资料

1.http://dblab.xmu.edu.cn/blog/install-hadoop/
2. http://dblab.xmu.edu.cn/blog/285/
3. http://dblab.xmu.edu.cn/blog/290-2/
4. http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/

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