一、安装Hadoop
1. 创建Hadoop用户
创建用户命令如下:
sudo useradd -m hadoop -s /bin/bash
接着为 hadoop 用户设置密码
sudo passwd hadoop
然后为 hadoop 用户增加管理员权限:
sudo adduser hadoop sudo
切换用户为hadoop登录
su hadoop
2.更新apt和安装Vim编辑器
首先更新 apt:
sudo apt-get update
接着安装 Vim 编辑器:
sudo apt-get install vim
3.安装SSH和配置SSH无密码登录
Ubuntu 操作系统下默认已安装了 SSH 客户端,因此这里我们只需安装 SSH 服务端:
sudo apt-get install openssh-server
安装后,可使用以下命令登录本机:
ssh localhost
输入 yes 与用户密码,就可以登录到本机,详细输出如下:
接着我们退出 SSH 登录,
exit
配置无密码登录:
cd ~/.ssh/
ssh-keygen -t rsa
注意这里第二步要你输入文件名时不用输入,直接一路 Enter 选择默认值就好了!
cat ./id_rsa.pub >> ./authorized_keys
此时再用 ssh localhost 命令无需密码即可登录了。
4.安装Java环境
(1)安装JDK
对于 Hadoop3.1.3 及以上版本而言,需要使用 JDK1.8 或者更新的版本,这里我使用的 JDK 版本为1.8.0_301
在 /usr/lib 目录下创建 jvm 文件夹来保存 JDK 文件:
cd /usr/lib
sudo mkdir jvm
解压缩之前的 JDK 文件到上述目录中:
cd ~/Downloads
sudo tar -zxvf ./jdk-8u301-linux-x64.tar.gz -C /usr/lib/jvm
(2)配置JDK环境
使用 gedit 编辑器编辑环境变量:
sudo gedit ~/.bashrc
在文件末尾处添加以下几行内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_301
export JRE_HOME=
J
A
V
A
H
O
M
E
/
j
r
e
e
x
p
o
r
t
C
L
A
S
S
P
A
T
H
=
.
:
{JAVA_HOME}/jre export CLASSPATH=.:
JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib:
J
R
E
H
O
M
E
/
l
i
b
e
x
p
o
r
t
P
A
T
H
=
{JRE_HOME}/lib export PATH=
JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH
保存并退出,接着使我们刚加入的环境变量生效:
source ~/.bashrc
(3)检验安装
输入以下命令:
java -version
5.安装单机Hadoop
(1)下载安装Hadoop
下载地址:Apache Hadoop,这里官网下载较快
我安装的 Hadoop 版本为3.2.3,下载好后,执行以下命令安装:
sudo tar -zxf ~/Downloads/hadoop-3.2.3.tar.gz -C /usr/local
修改目录名称:
cd /usr/local
sudo mv ./hadoop-3.2.2/ ./Hadoop
赋予可执行权限:
sudo chown -R hadoop ./hadoop
进入 hadoop 文件夹,查看安装的 Hadoop 版本信息:
cd ./hadoop
./bin/hadoop version
(2)运行示例
首先在 Hadoop 安装目录下新建 input 子目录:
cd /usr/local/hadoop
sudo mkdir input
复制 “/usr/local/hadoop/etc/hadoop” 中的配置文件到 input 目录下:
sudo cp ./etc/hadoop/*.xml ./input
执行以下代码运行 Grep 示例:
./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar grep ./input ./output ‘dfs[a-z.]+’
执行完后,输入以下命令查看输出结果:
cat ./output/*
6.安装伪分布式Hadoop
修改配置文件 core-site.xml:vi ./etc/hadoop/core-site.xml
为xml中的configuration 标签添加如下内容:
同样的,修改配置文件 hdfs-site.xml:
vi ./etc/hadoop/hdfs-site.xml
为xml中的configuration 标签添加如下内容:
配置完成后,即可进行NameNode 的格式化:
然后开启 NameNode 和 DataNode 守护进程
./sbin/start-dfs.sh
启动完成后,可以通过命令jps来判断是否成功启动
二、计算词频最高的前K个词的词频
上传词频文件data.txt将其存放在input文件夹中
hdfs dfs -put /home/hadoop/cipin.txt input
实验程序源码如下:
package sy;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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 shiyan3 {
public static class WsMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {
String[] split = value.toString().split(" ");
for (String word : split) {
context.write(new Text(word), new IntWritable(1));
}
}
}
public static class WsReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
Map<String,Integer> map=new HashMap<String, Integer>();
public void reduce(Text key, Iterable<IntWritable> iter,Context conext) throws IOException, InterruptedException {
int count=0;
for (IntWritable wordCount : iter) {
count+=wordCount.get();
}
String name=key.toString();
map.put(name, count);
}
@Override
public void cleanup(Context context)throws IOException, InterruptedException {
//这里将map.entrySet()转换成list
List<Map.Entry<String,Integer>> list=new LinkedList<Map.Entry<String,Integer>>(map.entrySet());
//通过比较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {
//降序排序
@Override
public int compare(Entry<String, Integer> arg0,Entry<String, Integer> arg1) {
return (int) (arg1.getValue() - arg0.getValue());
}
});
for(int i=0;i<5;i++){
context.write(new Text(list.get(i).getKey()), new IntWritable(list.get(i).getValue()));
}
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("输入参数个数为:"+otherArgs.length+",Usage: wordcount <in> <out>");
System.exit(2);//终止当前正在运行的java虚拟机
}
Job job = Job.getInstance(conf, "CleanUpJob");
job.setJarByClass(shiyan3.class);
job.setMapperClass(WsMapper.class);
job.setReducerClass(WsReducer.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);
}
}
其中的循环变量i可变,即为统计数K,这里设定为5
运行实验程序
hadoop jar shiyan3.jar /input/data.txt /output文章来源:https://www.toymoban.com/news/detail-841340.html
显示运行结果
hdfs dfs -cat /output/part-r-00000
文章来源地址https://www.toymoban.com/news/detail-841340.html
到了这里,关于云计算安全实验-MapReduce安装与简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!