的英文单词进行统计

Posted space202020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了的英文单词进行统计相关的知识,希望对你有一定的参考价值。

调用MapReduce对英文单词做统计

首先,我们需要安装hadoop才能够使用它里面的MapReduce功能来对文章进行分析统计。安装hadoop我是使用虚拟机Linux操作系统Ubuntu来作为hadoop的安装环境,当然你也可以使用本地windows来作为安装环境,这些不影响hadoop的功能使用和实现。

一.Hadoop的安装

(一)准备工作

1、创建用户
如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户:

sudo useradd -m hadoop -s /bin/bash   #创建hadoop用户
sudo passwd hadoop   #设置密码

可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:

sudo adduser hadoop sudo

2、更新apt、安装vim
用 hadoop 用户登录后,我们先更新一下 apt,不然后面要安装一些软件时就没法安装:

sudo apt-get update   #更新apt
sudo apt-get install vim   #安装vim

3、安装SSH,配置SSH无密码登录

sudo apt-get install openssh-server   #安装SSH
ssh localhost   #安装后,可以使用如下命令登陆本机
exit                           # 退出刚才的 ssh localhost
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa              # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

4、安装JAVA环境
该文章最后有JDK下载地址,从网上下载完JDK安装包后(文件jdk-8u162-linux-x64.tar.gz)我们就来安装JDK。我是将它保存到“/home/linziyu/Downloads/”目录下,因此:

cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
cd ~ #进入hadoop用户的主目录
cd Downloads  #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm  #把JDK文件解压到/usr/lib/jvm目录下
cd ~
vim ~/.bashrc   #设置环境变量

vim进入配置文件后,点击键盘“a”键进入编辑状态并且代码,按“Esc”键退出编辑状态,再输入“:wq”保存修改并退出。若输入“:q”保存但不修改并退出。

在配置文件中的开头添加这几行代码:

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

然后在shell命令行输入:

source ~/.bashrc   #使配置文件生效
jav -version   #检a查Java是否安装成功

(二)安装hadoop

1、安装包下载完成后(hadoop安装包下载地址在该文章最后),将hadoop安装在 /usr/local/ 中:

sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop       # 修改文件权限

2、检查hadoop是否可用:

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

3、Hadoop伪分布式配置:
伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。
core-site.xml的文件配置修改:

<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>

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>

修改完配置文件后,然后shell命令行输入:

cd /usr/local/hadoop
./bin/hdfs namenode -format   #配置完成后,执行 NameNode 的格式化

接着开启 NameNode 和 DataNode 守护进程:

cd /usr/local/hadoop
./sbin/start-dfs.sh  #start-dfs.sh是个完整的可执行文件,中间没有空格

成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件,如图安装成功:

二、利用eclipse软件编写hadoop实例

(一)eclipse的安装

利用Java API进行交互,需要利用软件Eclipse编写Java程序。在Ubuntu左侧边栏打开软件中心在应用商店搜索并下载eclipse:

在软件中心搜索栏输入“ec”,并且安装:

安装需要管理员权限,Ubuntu系统需要用户认证,弹出“认证”窗口,请输入当前用户的登录密码:

安装完成后打开eclipse,第一次安装会显示出需要填写workspace(工作空间)的窗口,用来保存程序所在的位置,这里不用改动:

(二)eclipse创建项目

启动后,会显示这样的界面:

选择“File->New->Java Project”菜单,开始创建一个Java工程:

进行下一步:

需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了可以访问HDFS的Java API。这些JAR包都位于Linux系统的Hadoop安装目录下,我就是在“/usr/local/hadoop/share/hadoop”安装在目录下。点击界面中的“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮会弹出如图所示:

在该界面中,上面的一排目录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”、“mapreduce”和“lib”),当点击某个目录按钮时,就会在下面列出该目录的内容。
为了编写一个能够与HDFS交互的Java应用程序,一般需要向Java工程中添加以下JAR包:
(1)”/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;
(2)/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/hdfs”目录下的haoop-hdfs-2.7.1.jar和haoop-hdfs-nfs-2.7.1.jar;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。
比如,如果要把“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar添加到当前的Java工程中,可以在界面中点击目录按钮,进入到common目录,然后,界面会显示出common目录下的所有内容:

请在界面中用鼠标点击选中hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar,然后点击界面右下角的“确定”按钮,就可以把这两个JAR包增加到当前Java工程中:

从这个界面中可以看出,hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar已经被添加到当前Java工程中。然后,按照类似的操作方法,可以再次点击“Add External JARs…”按钮,把剩余的其他JAR包都添加进来。需要注意的是,当需要选中某个目录下的所有JAR包时,可以使用“Ctrl+A”组合键进行全选操作。全部添加完毕以后,就可以点击界面右下角的“Finish”按钮,完成Java工程HDFSExample的创建。

(三)对英文文章到进行统计分析

接下来我们就可以开始创建新项目了,首先在网上下载一篇不少于10000英文单词的英文文章,如图:

接着启动hadoop,如图:

将10000英文单词上传到HDFS成功,如图:

找到刚才创建好的工程名称“HDFSExample”,然后在该工程名称上点击鼠标右键,在弹出的菜单中选择“New->Class”菜单,如图:

点击后就会弹出新的窗口,只需要在Name后面输入新建的Java类文件的名称,这里我输入了“HDFSFileIfExist”,如图:

然后编写代码JAVA代码:

package org.apache.hadoop.example;
 
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<IntWritable> i$ = values.iterator(); i$.hasNext(); sum += val.get()) 
                val = 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);
            
 
        
    

编写完后,运行代码,如图:


点击运行后,若是成功,下方会出现一行行的红色字体,注意并不是代码出错了哦,如图:

运行成功后在左边的MapReduce目录找到part-r-00000查看output英文单词统计结果,测试成功,如图:

将output结果下载回本地,首先在左边目录找到并右键part-r-00000,并且选择Download…,就会的弹出如图的窗口选择文件下载的目的地:

下载到Linux系统桌面后的图标,是文本文档,如图:

再通过FTP软件连接虚拟机和本地电脑,将结果下载到本地电脑,如图:

三、结语和安装包

至此利用MapReduce分析并统计英文文章单词的实例就完成啦!可能不够完善,望谅解啦!如果有错误可以指出哦~
下面是hadoop安装包下载地址和JDK下载地址:

hadoop安装包::https://pan.baidu.com/s/1mUR3M2U_lbdBzyV_p85eSA 提取码:99bg
JDK安装包:https://pan.baidu.com/share/init?surl=mUR3M2U_lbdBzyV_p85eSA提取码:99bg

以上是关于的英文单词进行统计的主要内容,如果未能解决你的问题,请参考以下文章

的英文单词进行统计

的英文单词进行统计

词频统计设计

英语文档之关键词统计

如何用python统计单词的频率

对英文文档中的单词与词组进行频率统计