一、事前准备工作
1、创建相关的hadoop账户。
(1)打开终端窗口,输入下面命令创建相关新的用户,使用 /bin/bash 作为 shell。
sudo useradd -m hadoop -s /bin/bash
(2)设置相关密码,按照相关提示输入两次密码。
sudo passwd mima
sudo adduser hadoop sudo
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
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、修改相关的配置文件。
<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>
<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来判断是否成功启动,成功则如下图所示。
五、使用MapReduce执行WordCount对单词进行计数。
1、将待分析的文件上传到HDFS。
(1)将文件拉入Ubuntu中。
(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 举报,一经查实,本站将立刻删除。