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