Hadoop之MapReduce实验报告

一、实验题目

编写MapReduce程序Dictionary。
二、实验目的

Dictionary遍历dictionary.txt文件,读取数据,并把其中的英文词汇转化为法语或意大利语。
文档格式:每行空格前为英语,空格后为法语或意大利语,中括号中为词性。
三、任务分解

首先,先观察待处理文档,由于windows下与linux中回车符的表示不同(一个为\r\n,一个为\n)。
所以同一个文档在不同系统中是不同的,linux如下图。
在这里插入图片描述

windows如下图:
在这里插入图片描述

所以要在linux中查看待处理文档,这一步很关键。

从文档中可以看出,该文档实际上是一个字典,每一行对应一个词条
即每一行都是一个英文单词对应一个或是多个翻译,通过逗号分隔开。
因此负责提取感兴趣信息的mapper函数就可以写出了:
在这里插入图片描述
在mapreduce中,数据的获取是按行获取的。获取之后转为String格式,再通过逗号来分离,最终将获得的值按照(key,word)的方式打包。
以linux第三行为例,aardvark orycte/rope[Noun]经过处理之后的结果应当为(aardvark,orycte)及(aardvark ,rope[Noun])

reduce部分则是要把这样相同的值整合,并且输出。因此reduce部分的代码为:
package net.pascalalma.hadoop;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;

public class AllTranslationsReducer extends Reducer<Text, Text, Text, Text> {
private Text result = new Text();

@Override
protected void reduce(Text key, Iterable<Text> values, Context context)
		throws IOException, InterruptedException {
	String translations = "";
	for (Text val : values) {
		translations += "|" + val.toString();
	}
	result.set(translations);
	context.write(key, result);
}

}
其中for(Text val:values)的意思为,map中相同key值的不同values,然后将这些value以|为分割连接起来,传给translations值。
最后将值打包。
接着写一下driver部分,整个程序就可以运行了。
在这里插入图片描述
*四、实验步骤

1.在Ubuntu上安装Eclipse、Hadoop和JDK(虚拟机里已经安装了这些环境);
2.打开Eclipse,创建一个新的Java Project;
3.选择“Configure Build Path”,选择Library标签,Add External JARs;
4.选择Apache/Hadoop 1.0.4文件夹,选择下列jar文件:
commons-collections-3.2.1.jar
commons-confi guration-1.6.jar
commons-httpclient-3.0.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
commons-logging-api-1.0.4.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
log4j-1.2.15.jar
Hadoop-core-1.0.4.jar
5.创建“com.trendwise.java”包,并在包中创建“LineCount”类(可使用附件文件);
6.将LineCount项目导出为Jar文件;
7.启动Hadoop,复制loaddata1文件到“/home/wcbdd/Desktop/loaddata1”;
8.访问localhost:50070,利用文件选择器选择选择loaddata1;
9.运行MapReduce程序,“bin/hadoop jar /home/wcbdd/linecount.jar com.trendwise.java.linecount /LOAD /home/wcbdd/workspace/BIGmb”;
10.打开浏览器查看LineCount结果;
11.复制结果到本地文件output.txt;
在这里插入图片描述

6.查看运行结果。
在这里插入图片描述

五、总结
尝试着分析了一下mapper,reducer函数究竟是怎样写成的。
由于对java以及hadoop内的类不够熟悉,虽然搜索了相关资料,但错误难以避免,希望各位看官能指出不足。
我接下来的实验也将采用这种方式,下周的实验要多查官方文档,希望能够写出更加详细的实验报告。

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本次实验旨在学习Hadoop分布式计算框架的部署和使用,以下是实验报告: 一、实验环境 1. 虚拟机软件:VMware Workstation Pro 16 2. 操作系统:Ubuntu Server 18.04 LTS 3. Hadoop版本:Hadoop-2.7.7 4. Java版本:OpenJDK 8 二、实验步骤 1. 安装Java 在Ubuntu系统上安装OpenJDK 8: ``` sudo apt-get update sudo apt-get install openjdk-8-jdk ``` 2. 下载Hadoop 从官网下载Hadoop-2.7.7版本:https://hadoop.apache.org/releases.html 3. 配置Hadoop 解压Hadoop文件,将其放置在指定目录下(此处为/usr/local/hadoop/): ``` sudo tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/ sudo mv /usr/local/hadoop-2.7.7 /usr/local/hadoop ``` 配置Hadoop环境变量: ``` sudo nano ~/.bashrc ``` 在文件末尾添加以下内容: ``` export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 保存并退出,然后使用以下命令使环境变量生效: ``` source ~/.bashrc ``` 4. 配置Hadoop集群 首先,在master节点上创建一个名为“hadoop”的用户,并设置密码: ``` sudo adduser hadoop sudo passwd hadoop ``` 然后在master节点和slave节点上安装ssh服务: ``` sudo apt-get install ssh ``` 生成ssh密钥: ``` ssh-keygen -t rsa ``` 将公钥复制到所有slave节点: ``` ssh-copy-id hadoop@slave1 ssh-copy-id hadoop@slave2 ... ``` 编辑Hadoop的配置文件/etc/hadoop/core-site.xml,添加以下内容: ``` <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> </configuration> ``` 其中“master”是master节点的主机名。 编辑Hadoop的配置文件/etc/hadoop/hdfs-site.xml,添加以下内容: ``` <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/data/nameNode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/data/dataNode</value> </property> </configuration> ``` 其中“dfs.replication”表示数据副本数,这里设置为3;“dfs.namenode.name.dir”表示NameNode的数据存储位置,“dfs.datanode.data.dir”表示DataNode的数据存储位置。 编辑Hadoop的配置文件/etc/hadoop/mapred-site.xml,添加以下内容: ``` <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` 编辑Hadoop的配置文件/etc/hadoop/yarn-site.xml,添加以下内容: ``` <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> ``` 其中“yarn.resourcemanager.hostname”表示ResourceManager的主机名,“yarn.nodemanager.aux-services”表示NodeManager的辅助服务。 5. 启动Hadoop集群 启动Hadoop集群: ``` start-all.sh ``` 使用jps命令查看Hadoop进程: ``` jps ``` 输出如下: ``` 24012 Jps 23632 ResourceManager 23355 NameNode 23824 NodeManager 23519 SecondaryNameNode ``` 6. 验证Hadoop集群 在Hadoop集群中上传文件: ``` hdfs dfs -mkdir /input hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml /input ``` 运行Hadoop自带的wordcount例子: ``` hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output ``` 查看结果: ``` hdfs dfs -cat /output/part-r-00000 ``` 输出如下: ``` "1 "2 "3 "4 "5 "6 "7 "8 "9 "a 2 ``` 至此,Hadoop集群部署实验完成。 三、实验总结 通过本次实验,我学习了Hadoop分布式计算框架的部署和使用方法,了解了Hadoop集群的配置和启动方式,并成功运行了Hadoop自带的wordcount例子,加深了对Hadoop的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值