虚拟化与云计算课程实验报告Hadoop平台搭建.docx

上传人:b****6 文档编号:7457064 上传时间:2023-01-24 格式:DOCX 页数:24 大小:4.02MB
下载 相关 举报
虚拟化与云计算课程实验报告Hadoop平台搭建.docx_第1页
第1页 / 共24页
虚拟化与云计算课程实验报告Hadoop平台搭建.docx_第2页
第2页 / 共24页
虚拟化与云计算课程实验报告Hadoop平台搭建.docx_第3页
第3页 / 共24页
虚拟化与云计算课程实验报告Hadoop平台搭建.docx_第4页
第4页 / 共24页
虚拟化与云计算课程实验报告Hadoop平台搭建.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

虚拟化与云计算课程实验报告Hadoop平台搭建.docx

《虚拟化与云计算课程实验报告Hadoop平台搭建.docx》由会员分享,可在线阅读,更多相关《虚拟化与云计算课程实验报告Hadoop平台搭建.docx(24页珍藏版)》请在冰豆网上搜索。

虚拟化与云计算课程实验报告Hadoop平台搭建.docx

虚拟化与云计算课程实验报告Hadoop平台搭建

 

虚拟化与云计算

一、实验目标1

二、实验容1

三、实验步骤1

四、实验遇到的问题及其解决方法1

五、实验结论1

 

一、实验目的

1.实验题目:

配置和使用SAN存储

掌握在Linux上配置iSCSItarget服务的方法。

2.实验题目:

Hadoop&MapReduce

安装、部署、使用Hadoop-HDFS

配置运行MapReduce程序,使用MapReduce编程

二、实验容

1.实验题目:

配置和使用SAN存储

配置在Linux上iSCSI实现两台机器间的共享存储。

2.实验题目:

Hadoop&MapReduce

1.掌握在集群上(使用虚拟机模拟)安装部署Hadoop-HDFS的方法。

2.掌握在HDFS运行MapReduce任务的方法。

3.理解MapReduce编程模型的原理,初步使用MapReduce模型编程。

三、实验步骤及实验结果

1.实验题目:

配置和使用SAN存储

在实验1中我作为主机提供共享存储空间,实验地点是在机房,但是由于我当时没有截图所以回寝室在自己的电脑上重做,以下为主机步骤:

1.1确定以root身份执行以下步骤

sudosu–

1.2安装iSCSITarget软件

1.3修改/etc/default/iscsitarget

ISCSITARGET_ENABLE=true

1.4创建共享存储

  共享存储可以是logicalvolumes,imagefiles,harddrives,harddrivepartitionsorRAIDdevices

  例如使用imagefile的方法,创建一个10G大小的LUN:

ddif=/dev/zeroof=/storage/lun1.imgbs=1024kcount=10240

1.5修改/etc/iet/ietd.conf

添加:

Targetiqn.2001-04..example:

storage.lun1

IncomingUser[username][password]

OutgoingUser

Lun0Path=/storage/lun1.img,Type=fileio

AliasLUN1

#MaxConnections6

  

1.6修改/etc/iet/initiators.allow

  如果只允许特定IP的initiator访问LUN,则如下设置

iqn.2001-04..example:

storage.lun1192.168.0.100

  如果任意initiator均可以访问,则:

ALLALL

1.6启动/重启动iSCSItarget

/etc/init.d/iscsitargetstart

/etc/init.d/iscsitargetrestart

 

2.实验题目:

Hadoop&MapReduce

1.安装JDK——在实验中安装为OpenJDK6Runtime

2.安装openssh-server,命令为:

sudoapt-getinstallopenssh-server,并检查sshserver是否已经启动:

ps-e|grepssh,如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/sshstart,如果看到sshd那说明ssh-server已经启动了。

3.免密码ssh设置,确认能否不输入口令就用ssh登录localhost:

sshlocalhost

如果不输入口令就无法用ssh登陆localhost,执行下面的命令:

$ssh-keygen-trsa-f~/.ssh/id_rsa

cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

再次执行sshlocalhost,完成后请登入确认不用输入密码

 

4.安装Hadoop

解压Hadoop安装包到安装目录,在本实验中我新建了一个用户hadoop并把hadoop解压到home/hadoop文件夹下,在伪分布模式下使用的版本为0.20.203,在分布模式下因为要与Eclipse兼容所以最终使用版本为0.20.2,下面部分截图为版本为0.20.203。

并编辑conf/hadoop-env.sh,将JAVA_HOME设置为Java安装根路径

运行运行bin目录下的hadoop,如显示hadoop脚本的使用文档,说明安装已经完成。

如下图所示:

5.安装部署单机伪分布式模式Hadoop-HDFS

Hadoop可以在单节点上以伪分布式模式运行。

编辑/conf/core-site.xml

fs.default.name

hdfs:

//localhost:

9000

hadoop.tmp.dir

/tmp/hadoop/hadoop-${user.name}

编辑/opt/hadoop/conf/hdfs-site.xml

dfs.replication

1

编辑/opt/hadoop/conf/mapred-site.xml

mapred.job.tracker

localhost:

9001

格式化HDFS

bin/hadoopnamenode–format

启动Hadoop,启动后可使用命令jps查看已启动进程,观察是否namenode、datanode已启动,关闭所有服务,使用命令stop-all.sh,bin/start-all.sh

6.浏览NameNode和JobTracker的网络接口,地址默认为:

NameNode-localhost:

50070/

JobTracker-localhost:

50030/

7.下面尝试在单机伪分布模式下运行wordcount样例程序

将输入文件拷贝到分布式文件系统

bin/hadoopfs-puthome/lee/桌面testfileinput

运行Hadoop自带的wordcount例子

bin/hadoopjarhadoop-examples-0.20.203.0.jarwordcountinputoutput

将输出文件从分布式文件系统拷贝到本地文件系统查看

bin/hadoopfs-getoutput/home/lee/文档

cat/home/lee/文档/output/*

8.安装部署多机Hadoop-HDFS

这个部署多机的实验在实验室没有做完,最后实在宿舍完成的,节点为两个,使用系统为wubi安装的Ubuntu,所以不需要桥接方式(因为有固定IP),以下步骤为我做为Master时的实验截图:

本机名为node1,另外一台机器为node2,两台机器均建立一个名为hadoop的管理员用户用于统一部署安装hadoop。

编辑文件/etc/hosts

127.0.1.1ubuntu替换为127.0.1.1node1

编辑/etc/hostname文件删除该文件的所有容,添加node1

运行命令hostnamenode1

a)指定IP地址

编辑文件/etc/network/interfaces

autoeth0

ifaceeth0inetstatic

address115.24.250.196

netmask255.255.255.0

重启网络服务sudo/etc/init.d/networkingrestart

查看IP地址ifconfig

b)修改/etc/hosts文件

node1中:

115.24.250.196node1

115.24.250.43node2

node2中:

115.24.250.196node1

115.24.250.43node2

c)配置从node1无需输入密码ssh登录node1、node2,命令如下:

首先在node1、node2下建立home/hadoop/.ssh文件夹

在node1(master)上:

$ssh-keygen-trsa

$cat.ssh/id_rsa.pub>>.ssh/authorized_keys

这两行命令生成密钥并将公钥导出到authorized_keys中,然后将此文件拷贝到node2(slaves)中的相同文件夹下,因为通过网络命令拷贝比较困难所以我在这里用U盘拷贝的,之后就可以成功无密码登录node2

d)编辑/conf/core-site.xml

//此处为了方便查找我更改了hadoop.tmp.dir的文件目录,改为/home/hadoop/tmp

fs.default.name

hdfs:

//node1:

9000

hadoop.tmp.dir

/home/hadoop/tmp

e)编辑/opt/hadoop/conf/hdfs-site.xml,其中

//这里我们将dfs.data.dir改为/home/hadoop/data

//将dfs.name.dir的默认文件夹改为/home/hadoop/name

dfs.name.dir

/home/hadoop/name

dfs.data.dir

/home/hadoop/data

dfs.replication

2

f)编辑/opt/hadoop/conf/mapred-site.xml

mapred.job.tracker

node1:

9001

g)配置jobtracker

masters文件配置如下:

node1

slaves文件配置如下:

node2

在主节点编辑hadoop的配置之后,将其拷贝到node2的对应目录(U盘)

h)格式化HDFS

bin/hadoopnamenode-format

i)启动Hadoop,启动后可使用命令jps查看namenode和datanode上已启动进程,观察是否namenode、datanode已启动,关闭所有服务,使用命令stop-all.sh,再分别按顺序在node1和node2上开启namenode(node1)、datanode(node2)、jobtracker(node1)、tasktracker(node2),注意我在此处只能分别开启,如果使用start-all.sh全部自动开启的话启动所有节点正常但是无活节点可用,可能与启动顺序有关,成功之后截图如下:

j)浏览NameNode和JobTracker的网络接口,地址默认为:

NameNode-node1:

50070/

JobTracker-node1:

50030/

9.安装eclipse和hadooppluginforeclipse

这里经过反复测试发下到现在为止只使用了eclipse3.3和hadoop0.20.2-plugin插件可以配置成功,最新版本均不能配置成功。

具体做法是下载eclipse解压之后将hadoop安装路径下的contrib的下的jar插件复制到eclipse文件夹下的plugins文件夹下即可在eclipse下成功安装插件。

10.新建MapReduce工程,并在eclipse中下方的Map/ReduceLocations下新建刚刚添加好的node1并配置如下:

11.最后将写好的测试文件testfile上传到DFSLocations分布式文件系统中,并设置好文件的输入输出参数(如下图,输入输出文件/文件夹均在DFS中)。

这里我根据要求将老师给的WordCount.java做了一定的修改,具体来说就是将第一个Job输出的文本文件作为输入,再次读入并交换(用以是以词频为关键字并以单词为values,这样就能遍历统一词频的所以单词并以字符串的形式拼接起来,但是跟最后的要求还差一点就是因为时间的关系我没有实现一个比较函数的类并设置所以最后的排序是默认的从小到大,而不是从大到小)下面截图如下:

修改过的代码如下:

importjava.io.IOException;

importjava.util.StringTokenizer;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.LongWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.conf.*;

importorg.apache.hadoop.mapreduce.Job;

importorg.apache.hadoop.mapreduce.Mapper;

importorg.apache.hadoop.mapreduce.Reducer;

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;

importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

publicclassWordCount{

publicstaticclassMapextendsMapper{

privatefinalstaticIntWritableone=newIntWritable

(1);

privateTextword=newText();

publicvoidmap(LongWritablekey,Textvalue,Contextcontext)

throwsIOException,InterruptedException{

Stringline=value.toString();

StringTokenizertokenizer=newStringTokenizer(line);

while(tokenizer.hasMoreTokens()){

word.set(tokenizer.nextToken());

context.write(word,one);

}

}

}

publicstaticclassReduceextendsReducer{

publicvoidreduce(Textkey,Iterablevalues,Contextcontext)

throwsIOException,InterruptedException{

intsum=0;

for(IntWritableval:

values){

sum+=val.get();

}

context.write(key,newIntWritable(sum));

}

}

publicstaticclasssortMapextendsMapper{

privateTextwordcount=newText();

privateTextword=newText();

publicvoidmap(LongWritablekey,Textvalue,Contextcontext)

throwsIOException,InterruptedException{

Stringline=value.toString();

StringTokenizertokenizer=newStringTokenizer(line);

while(tokenizer.hasMoreTokens()){

word.set(tokenizer.nextToken());

wordcount.set(tokenizer.nextToken());

context.write(wordcount,word);

}

}

}

publicstaticclasssortReduceextendsReducer{

publicvoidreduce(Textkey,Iterablevalues,Contextcontext)

throwsIOException,InterruptedException{

Stringwordline="";

for(Textval:

values){

wordline+=val+",";

}

context.write(key,newText(wordline));

}

}

publicstaticvoidmain(String[]args)throwsException{

Configurationconf=newConfiguration();

Jobjob=newJob(conf,"wordcount");

job.setJarByClass(WordCount.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.setMapperClass(Map.class);

job.setReducerClass(Reduce.class);

job.setInputFormatClass(TextInputFormat.class);

job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(job,newPath(args[0]));

FileOutputFormat.setOutputPath(job,newPath(args[1]));

job.waitForCompletion(true);

JobsortJob=newJob(conf,"sortword");

sortJob.setJarByClass(WordCount.class);

sortJob.setOutputKeyClass(Text.class);

sortJob.setOutputValueClass(Text.class);

sortJob.setMapperClass(sortMap.class);

sortJob.setReducerClass(sortReduce.class);

sortJob.setInputFormatClass(TextInputFormat.class);

sortJob.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(sortJob,newPath(args[1]+"/part-r-00000"));

FileOutputFormat.setOutputPath(sortJob,newPath(args[1]+"/result"));

sortJob.waitForCompletion(true);

}

}

四、实验遇到的问题及其解决方法

iSCSItarget实验比较简单,所遇到的问题不多,主要是当时对于vim的操作上有一些不熟练所以耽误了一些时间;其次就是刚开始时NAT而不是桥接模式致使client连接不上我的机器浪费了一些时间,总体来说实验比较简单;

此次实验中的问题主要集中在Hadoop/MapReduce这个实验上,程序的编写上不是特别困难,参照着网上的讲解和HadoopAPI可以自己摸索个大概并修改老师给的程序;主要是在配置ssh无密码连接以及之后的Hadoop服务启动及重启之后再次开启服务上出现了一些问题,下面挑选列举如下:

1.在分布模式下试图无密码登录node2的时候失败,之后按照网上教程尝试尝试用ssh中的scp命令传输文件失败;

解决方法:

出现问题的主要原因是因为当时对scp命令以及相关的参数不太了解,所以当时着急解决问题所

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1