微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用MapReduce对英文单词文件进行单词出现次数统计

使用MapReduce对英文单词文件进行单词出现次数统计

一、事前准备工作

1、创建相关的hadoop账户。

(1)打开终端窗口输入下面命令创建相关新的用户,使用 /bin/bash 作为 shell。

sudo useradd -m hadoop -s /bin/bash

(2)设置相关密码,按照相关提示输入两次密码。

sudo passwd mima

(3)hadoop 用户增加管理员权限,方便后续命令操作。

sudo adduser hadoop sudo

(4)选择退出登录,选择刚建立的用户登陆。

2、更新apt。

打开终端窗口,输入下面命令进行apt的更新,以及安装vim。

sudo apt-get update
sudo apt-get install vim

3、安装并配置SSH

(1)Ubuntu系统已经认安装SSH client,但是还需要安装 SSH server,相关命令如下。

sudo apt-get install openssh-server

(2)安装完成后,用下面命令登陆。

ssh localhost

(3)紧接着输入exit退出刚才的ssh,就回到了终端窗口,然后生成密钥,并将密钥加入到相关授权中。再用ssh localhost命令,不用输入密码就可以直接登陆。

exit 
cd ~/.ssh/ 
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys

二、安装相关Java环境

1、安装相关jdk。

下载相关jdk到本地电脑。在Linux命令行界面中,执行如下命令。

cd /usr/lib
sudo mkdir jvm
cd ~ 
cd Downloads
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm

2、查看jdk安装情况。

使用下面命令查看。

cd /usr/lib/jvm

3、设置相关环境变量。

(1)使用以下命令进行设置,打开vim编辑器

cd ~
vim ~/.bashrc

(2)配置.bashrc文件,在文件的开始加入以下命令。

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLAsspATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

(3)输入wq保存.bashrc退出vim编辑器。执行如下命令让配置生效,并且输入命令验证安装情况。

source ~/.bashrc
java –version

三、安装Hadoop。

1、使用ftp上传下载,选择要上传的位置,进行相关上传,点击远程控制Ubuntu你自己需要上传的位置。

2、安装。

输入以下命令把Hadoop安装到/usr/local/,Hadoop 解压后即可使用。

sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop
sudo chown -R hadoop ./hadoop

3、检查。

输入以下命令检查是否安装成功。

cd /usr/local/hadoop
.bin/hadoop version

四、Hadoop伪分布式。

1、修改相关的配置文件

(1)使用以下命令修改配置文件core-site.xml。

<configuration>
</configuration>

(2)修改成为以下配置。

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

(3)使用以下命令修改配置文件hdfs-site.xml。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

2、进行NameNode的格式化。

(1)使用以下命令进行格式化

cd /usr/local/hadoop
./bin/hdfs namenode –format

(2)输入以下命令开启NameNode和Datanode守护进程。

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

3、开启NameNode和Datanode守护进程。

(1)通过jps来判断是否成功启动,成功则如下图所示。

在这里图片描述

(2)成功启动后,可以访问http://localhost:50070查看NameNode和Datanode信息。

在这里插入图片描述

五、使用MapReduce执行WordCount对单词进行计数。

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

(1)将文件拉入Ubuntu中。

在这里插入图片描述

(2)将相关文件113zhengmin.txt上传到HDFS上传到/home/hadoop文件夹。

在这里插入图片描述

(3)启动hadoop,并将113zhengmin.txt从本机上传至HDFS。

在这里插入图片描述


(4)在/usr/hadoop创建input文件夹,将113zhengmin.txt上传到HDFS。

在这里插入图片描述


(5) 查看hdfs input中的文件,查看是否存在上传文件

在这里插入图片描述

2、安装eclipse。

如图所示

在这里插入图片描述

3、安装Hadoop-Eclipse-Plugin。

输入以下命令将release中的hadoop-eclipse-kepler-plugin-2.6.0.jar复制到 Eclipse 安装目录的 plugins文件夹中运行eclipse -clean重启Eclipse即可。

unzip -qo ~/下载/hadoop2x-eclipse-plugin-master.zip -d ~/下载
sudo cp ~/下载/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar /usr/lib/eclipse/plugins/
/usr/lib/eclipse/eclipse –clean

4、配置Hadoop-Eclipse-Plugin。

(1)启动Hadoop,打开eclipse,可以在左侧的Project Explorer栏目中看到DFS Locations。

在这里插入图片描述


(2)选择窗口下的首选项

在这里插入图片描述


(3)点击Hadoop Map/Reduce 选项,选择Hadoop的安装目录。

在这里插入图片描述


(4)点击窗口,打开透视图,选择 Map/Reduce 选项进行切换。

在这里插入图片描述

5、在eclipse中操作HDFS中的文件

点击左侧MapReduce Location就能查看HDFS中的文件列表。

在这里插入图片描述

6、创建MapReduce项目。

(1)点击文件新建项目,选择Map/Reduce Project,填写项目名称即可创建完成。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


(2)在WordCount右击选择新建类,在包中填写org.apache.hadoop.examples,在名称处填写WordCount

在这里插入图片描述


(3)运行MapReduce程序前,需要将 /usr/local/hadoop/etc/hadoop 中将有修改过的配置文件(如伪分布式需要 core-site.xml 和 hdfs-site.xml),以及 log4j.properties 复制到 WordCount 项目下的 src 文件夹(~/workspace/WordCount/src)中,在终端中输入下面代码

cp /usr/local/hadoop/etc/hadoop/core-site.xml ~/workspace/WordCount/src
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml ~/workspace/WordCount/src
cp /usr/local/hadoop/etc/hadoop/log4j.properties ~/workspace/WordCount/src

(4)执行完成后,会看到以下文件

在这里插入图片描述


(5)在WordCount.java中输入以下代码

package org.apache.hadoop.examples;

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();
        String[] otherArgs=new String[]{"input","output"};
        if(otherArgs.length < 2) {
            System.err.println("Usage: wordcount <in> [<in>...] <out>");
            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 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);
        }
    }
 
    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);
            }
 
        }
    }
}

(6)右键WordCount.java选择运行方式,运行配置,在此处可以设置运行时的相关参数。切换到自变量,在程序自变量处填写input output就可以。

在这里插入图片描述


在这里插入图片描述

7、执行MapReduce的WordCount程序进行单词统计

(1)运行成功后,如以下图片所示。

在这里插入图片描述


(2)回到终端,查看output文件夹是否有运行成功后生成文件

在这里插入图片描述


(3)查看生成output/part-r-00000文件,结果如图所示。

在这里插入图片描述


(4)使用红框内的命令将output文件下载至本地中。

在这里插入图片描述


(5)查看output文件夹中查看part-r-00000这个文件,已经成功生成并且有结果。

在这里插入图片描述


在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐