云计算实验报告书文档格式.docx
《云计算实验报告书文档格式.docx》由会员分享,可在线阅读,更多相关《云计算实验报告书文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
publicstaticclassMapextendsMapper<
Object,Text,Text,Text>
{
//实现map函数
publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{
Stringline=value.toString();
//每行文件
Stringrelationtype=newString();
//左右表标识
//输入文件首行,不处理
if(line.contains("
factoryname"
)==true||line.contains("
addressed"
)==true){
return;
}
//输入的一行预处理文本
StringTokenizeritr=newStringTokenizer(line);
Stringmapkey=newString();
Stringmapvalue=newString();
inti=0;
while(itr.hasMoreTokens()){
//先读取一个单词
Stringtoken=itr.nextToken();
//判断该地址ID就把存到"
values[0]"
if(token.charAt(0)>
='
0'
&
token.charAt(0)<
9'
){
mapkey=token;
if(i>
0){
relationtype="
1"
;
}else{
2"
continue;
。
1欢迎下载
//存工厂名
mapvalue+=token+"
"
i++;
//输出左右表
context.write(newText(mapkey),newText(relationtype+"
+"
+mapvalue));
/*reduce解析map输出,将value中数据按照左右表分别保存,
*然后求出笛卡尔积,并输出。
publicstaticclassReduceextendsReducer<
Text,Text,Text,Text>
//实现reduce函数
public
void
reduce(Textkey,
Iterable<
Text>
values,
Context
context)throwsIOException,InterruptedException{
//
输出表头
if(0==time){
context.write(new
Text("
),
new
addressname"
));
time++;
intfactorynum=0;
String[]factory=newString[10];
intaddressnum=0;
String[]address=newString[10];
Iteratorite=values.iterator();
while(ite.hasNext()){
Stringrecord=ite.next().toString();
intlen=record.length();
inti=2;
if(0==len){
}
取得左右表标识
charrelationtype=record.charAt(0);
左表
if('
1'
==relationtype){
factory[factorynum]=record.substring(i);
factorynum++;
右表
2'
address[addressnum]=record.substring(i);
addressnum++;
//求笛卡尔积
if(0!
=factorynum&
0!
=addressnum){
for(intm=0;
m<
factorynum;
m++){
for(intn=0;
n<
addressnum;
n++){
//输出结果
context.write(newText(factory[m]),
newText(address[n]));
2欢迎下载
publicstaticvoidmain(String[]args)throwsException{Configurationconf=newConfiguration();
//conf.set("
mapred.job.tracker"
"
192.168.1.2:
9001"
);
//String[]ioArgs=newString[]{"
MTjoin_in"
MTjoin_out"
};
String[]otherArgs=newGenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length!
=2){
System.err.println("
Usage:
MultipleTableJoin<
in>
<
out>
"
System.exit
(2);
Jobjob=newJob(conf,"
MultipleTableJoin"
job.setJarByClass(MTjoin.class);
//设置Map和Reduce处理类job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
//设置输出类型job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
//设置输入和输出目录
FileInputFormat.addInputPath(job,newPath(otherArgs[0]));
FileOutputFormat.setOutputPath(job,newPath(otherArgs[1]));
System.exit(job.waitForCompletion(true)?
0:
1);
三、主要仪器设备及耗材
Ubuntu、Hadoop、PC
3欢迎下载
4欢迎下载
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1.调试方法描述
以下是部分核心Hadoop的调试过程截图
(1)主节点:
namenode
(2)配置jdk:
5欢迎下载
(3)配置ssh:
(4)配置Hadoop
6欢迎下载
2.实验输入数据记录
输入两个txt文件:
代表工厂表的文件(factory.txt)和代表地址表的文件(adsress.txt)
7欢迎下载
3.实验输出数据记录
运行过程输入的命令如下所示:
删除已经存在的output文件夹(包括子目录):
hadoopfs-rmroutput
在hadoop指定目录内创建新目录:
hadoopfs-mkdirinput
将factory.txt文件夹存储至hadoop:
hadoopfs-putfactoryinput
将address.txt文件夹存储至hadoop:
hadoopfs-putaddressinput
运行已经打包好的MTJoin.java文件:
hadoopjarMTJoin.jarMTJoininputoutput
查看运行结果:
hadoopfs-catoutput/part-r-00000
输入查看结果命令就会按要求输出“工厂名——地址名”表,按工厂名排序输出。
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1.结果描述
输入工厂表对应的文件factory.txt和地址表对应的文件address.txt,则按要求输出了“工厂名——地址名”表。
完成了实验要求。
2.实验现象分析
在配置Hadoop的过程中遇到了很多问题,因为对Hadoop的不熟悉导致多次重启系统,但是最后还是较好的完成了实现,在实验的规程中并没有出现过于严重的问题。
3.影响因素讨论
首先我们必须完成Hadoop的集群配置:
安装Linux系统,推荐Ubuntu14.03,建议直接使用hadoop作为用户安装、配置jdk、更改环境变量、配置ssh、用jps验证集群是否配置成功,使用多台计算机连接主节点和多个次节点完成多台计算机
的并行分布。
这些配置的过程对于该实验是非常重要的,只有搭建好了Hadoop才能完成该实验。
同时设