使用MapReduce对英文单词文件进行单词出现次数统计
(1)打开终端窗口,输入下面命令创建相关新的用户,使用 /bin/bash 作为 shell。
sudo useradd -m hadoop -s /bin/bash
(2)设置相关密码,按照相关提示输入两次密码。
sudo passwd mima
(3)hadoop 用户增加管理员权限,方便后续命令操作。
sudo adduser hadoop sudo
(4)选择退出登录,选择刚建立的用户登陆。
打开终端窗口,输入下面命令进行apt的更新,以及安装vim。
sudo apt-get update
sudo apt-get install vim
(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
下载相关jdk到本地电脑。在Linux命令行界面中,执行如下命令。
cd /usr/lib
sudo mkdir jvm
cd ~
cd Downloads
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
使用下面命令查看。
cd /usr/lib/jvm
(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安装到/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
输入以下命令检查是否安装成功。
cd /usr/local/hadoop
.bin/hadoop version
(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>
(1)使用以下命令进行格式化。
cd /usr/local/hadoop
./bin/hdfs namenode –format
(2)输入以下命令开启NameNode和DataNode守护进程。
cd /usr/local/hadoop
./sbin/start-dfs.sh
(1)通过jps来判断是否成功启动,成功则如下图所示。
(2)成功启动后,可以访问http://localhost:50070查看NameNode和Datanode信息。
(1)将文件拉入Ubuntu中。
(2)将相关文件113zhengmin.txt上传到HDFS,上传到/home/hadoop文件夹。
(3)启动hadoop,并将113zhengmin.txt从本机上传至HDFS。
(4)在/usr/hadoop创建input文件夹,将113zhengmin.txt上传到HDFS。
(5) 查看hdfs input中的文件,查看是否存在上传的文件。
输入以下命令将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
(1)启动Hadoop,打开eclipse,可以在左侧的Project Explorer栏目中看到DFS Locations。
(2)选择窗口下的首选项。
(3)点击Hadoop Map/Reduce 选项,选择Hadoop的安装目录。
(4)点击窗口,打开透视图,选择 Map/Reduce 选项进行切换。
点击左侧MapReduce Location就能查看HDFS中的文件列表。
(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 [...] " );
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就可以。
(1)运行成功后,如以下图片所示。
(2)回到终端,查看output文件夹是否有运行成功后生成的文件。
(3)查看生成的output/part-r-00000文件,结果如图所示。
(4)使用红框内的命令将output文件夹下载至本地中。
(5)查看output文件夹中查看part-r-00000这个文件,已经成功生成并且有结果。