欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:2625367       资源大小:5.56MB        全文页数:28页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    虚拟化与云计算实验报告目录一、实验目标1二、实验内容1三、实验步骤1四、实验遇到的问题及其解决方法1五、实验结论1一、实验目的1. 实验题目:配置和使用SAN存储掌握在Linux上配置iSCSI target服务的方法。2. 实验题目:Hadoop&MapReduce安装、部署、使用Hadoop-HDFS配置运行MapReduce程序,使用MapReduce编程二、实验内容1. 实验题目:配置和使用SAN存储配置在Linux上iSCSI实现两台机器间的共享存储。2. 实验题目:Hadoop&MapReduce1. 掌握在集群上(使用虚拟机模拟)安装部署Hadoop-HDFS的方法。2. 掌握在HDFS运行MapReduce任务的方法。3. 理解MapReduce编程模型的原理,初步使用MapReduce模型编程。三、实验步骤及实验结果1. 实验题目:配置和使用SAN存储在实验1中我作为主机提供共享存储空间,实验地点是在机房,但是由于我当时没有截图所以回寝室在自己的电脑上重做,以下为主机步骤:1.1确定以root身份执行以下步骤sudo su 1.2安装iSCSI Target软件1.3修改/etc/default/iscsitargetISCSITARGET_ENABLEtrue1.4创建共享存储共享存储可以是logical volumes, image files, hard drives , hard drive partitions or RAID devices例如使用image file的方法,创建一个10G大小的LUN:dd if=/dev/zero of=/storage/lun1.img bs=1024k count=102401.5 修改/etc/iet/ietd.conf添加: Target iqn.2001-04.com.example:storage.lun1IncomingUser username password OutgoingUser Lun 0 Path=/storage/lun1.img,Type=fileio Alias LUN1 #MaxConnections 61.6修改/etc/iet/initiators.allow如果只允许特定IP的initiator访问LUN,则如下设置iqn.2001-04.com.example:storage.lun1 192.168.0.100如果任意initiator均可以访问,则:ALL ALL1.6启动/重启动iSCSI target/etc/init.d/iscsitarget start/etc/init.d/iscsitarget restart2. 实验题目:Hadoop&MapReduce1. 安装JDK在实验中安装为OpenJDK 6 Runtime2. 安装openssh-server,命令为:sudo apt-get install openssh-server,并检查ssh server是否已经启动:ps -e | grep ssh,如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。3. 免密码ssh设置,确认能否不输入口令就用ssh登录localhost:ssh localhost如果不输入口令就无法用ssh登陆localhost,执行下面的命令:$ ssh-keygen -t rsa -f /.ssh/id_rsacat /.ssh/id_rsa.pub >> /.ssh/authorized_keys再次执行ssh localhost,完成后请登入确认不用输入密码 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-HDFSHadoop可以在单节点上以伪分布式模式运行。编辑/conf/core-site.xml<configuration> <property> <name>fs.default.name</name> <value>hdfs:/localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop/hadoop-$user.name</value> </property></configuration>编辑 /opt/hadoop/conf/hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>编辑 /opt/hadoop/conf/mapred-site.xml<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property></configuration>格式化HDFSbin/hadoop namenode format启动Hadoop,启动后可使用命令jps查看已启动进程,观察是否namenode、datanode已启动,关闭所有服务,使用命令stop-all.sh,bin/ start-all.sh6. 浏览NameNode和JobTracker的网络接口,地址默认为:NameNode - http:/localhost:50070/JobTracker - http:/localhost:50030/7. 下面尝试在单机伪分布模式下运行wordcount样例程序将输入文件拷贝到分布式文件系统bin/hadoop fs -put home/lee/桌面testfile input运行Hadoop自带的wordcount例子bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output将输出文件从分布式文件系统拷贝到本地文件系统查看bin/hadoop fs -get output /home/lee/文档cat /home/lee/文档/output/*8. 安装部署多机Hadoop-HDFS这个部署多机的实验在实验室没有做完,最后实在宿舍完成的,节点为两个,使用系统为wubi安装的Ubuntu,所以不需要桥接方式(因为有固定IP),以下步骤为我做为Master时的实验截图:本机名为node1,另外一台机器为node2,两台机器均建立一个名为hadoop的管理员用户用于统一部署安装hadoop。编辑文件/etc/hosts127.0.1.1 ubuntu替换为127.0.1.1 node1编辑 /etc/hostname文件 删除该文件的所有内容,添加node1运行命令 hostname node1a) 指定IP地址编辑文件/etc/network/interfacesauto eth0iface eth0 inet staticaddress 115.24.250.196netmask 255.255.255.0重启网络服务sudo /etc/init.d/networking restart查看IP地址 ifconfigb) 修改/etc/hosts文件node1中:115.24.250.196 node1 115.24.250.43 node2 node2中:115.24.250.196 node1 115.24.250.43 node2 c) 配置从node1无需输入密码ssh登录node1、node2,命令如下:首先在node1、node2下建立home/hadoop/.ssh文件夹在node1(master)上:$ssh-keygen -t rsa $cat .ssh/id_rsa.pub >> .ssh/authorized_keys这两行命令生成密钥并将公钥导出到authorized_keys中,然后将此文件拷贝到node2(slaves)中的相同文件夹下,因为通过网络命令拷贝比较困难所以我在这里用U盘拷贝的,之后就可以成功无密码登录node2d) 编辑/conf/core-site.xml/此处为了方便查找我更改了hadoop.tmp.dir的文件目录,改为/home/hadoop/tmp<configuration> <property> <name>fs.default.name</name> <value>hdfs:/node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> </property></configuration>e) 编辑 /opt/hadoop/conf/hdfs-site.xml,其中/这里我们将dfs.data.dir改为/home/hadoop/data/将dfs.name.dir的默认文件夹改为/home/hadoop/name<configuration><property><name>dfs.name.dir</name><value>/home/hadoop/name </value></property><property><name>dfs.data.dir</name><value>/home/hadoop/data</value></property> <property> <name>dfs.replication</name> <value>2</value> </property></configuration>f) 编辑 /opt/hadoop/conf/mapred-site.xml<configuration> <property> <name>mapred.job.tracker</name> <value>node1:9001</value> </property></configuration>g) 配置jobtrackermasters文件配置如下:node1slaves文件配置如下:node2在主节点编辑hadoop的配置之后,将其拷贝到node2 的对应目录(U盘)h) 格式化HDFSbin/hadoop namenode -formati) 启动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 - http:/node1:50070/JobTracker - http:/node1:50030/9. 安装eclipse和hadoop plugin for eclipse这里经过反复测试发下到现在为止只使用了eclipse 3.3和hadoop 0.20.2-plugin插件可以配置成功,最新版本均不能配置成功。具体做法是下载eclipse解压之后将hadoop安装路径下的contrib的下的jar插件复制到eclipse文件夹下的plugins文件夹下即可在eclipse下成功安装插件。10. 新建MapReduce工程,并在eclipse中下方的Map/Reduce Locations 下新建刚刚添加好的node1并配置如下:11. 最后将写好的测试文件testfile上传到DFS Locations分布式文件系统中,并设置好文件的输入输出参数(如下图,输入输出文件/文件夹均在DFS中)。这里我根据要求将老师给的WordCount.java做了一定的修改,具体来说就是将第一个Job输出的文本文件作为输入,再次读入并交换<keys,values>为<values,keys>(用以是以词频为关键字并以单词为values,这样就能遍历统一词频的所以单词并以字符串的形式拼接起来,但是跟最后的要求还差一点就是因为时间的关系我没有实现一个比较函数的类并设置所以最后的排序是默认的从小到大,而不是从大到小)下面截图如下:修改过的代码如下:import java.io.IOException;import java.util.StringTokenizer;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.conf.*;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.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;public class WordCount public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens() word.set(tokenizer.nextToken();context.write(word, one);public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> public void reduce(Text key, Iterable<IntWritable> values, Context context)throws IOException, InterruptedException int sum = 0;for (IntWritable val : values) sum += val.get();context.write(key, new IntWritable(sum);public static class sortMap extends Mapper<LongWritable, Text, Text, Text> private Text wordcount = new Text();private Text word = new Text();public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens() word.set(tokenizer.nextToken();wordcount.set(tokenizer.nextToken();context.write(wordcount, word);public static class sortReduce extends Reducer<Text, Text, Text, Text> public void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException String wordline = ""for (Text val : values) wordline += val + ","context.write(key, new Text(wordline);public static void main(String args) throws Exception Configuration conf = new Configuration();Job job = new Job(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, new Path(args0);FileOutputFormat.setOutputPath(job, new Path(args1);job.waitForCompletion(true);Job sortJob = new Job(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, new Path(args1 + "/part-r-00000");FileOutputFormat.setOutputPath(sortJob, new Path(args1 + "/result");sortJob.waitForCompletion(true);四、实验遇到的问题及其解决方法iSCSI target实验比较简单,所遇到的问题不多,主要是当时对于vim的操作上有一些不熟练所以耽误了一些时间;其次就是刚开始时NAT而不是桥接模式致使client连接不上我的机器浪费了一些时间,总体来说实验比较简单;此次实验中的问题主要集中在Hadoop/MapReduce这个实验上,程序的编写上不是特别困难,参照着网上的讲解和Hadoop API可以自己摸索个大概并修改老师给的程序;主要是在配置ssh无密码连接以及之后的Hadoop服务启动及重启之后再次开启服务上出现了一些问题,下面挑选列举如下:1. 在分布模式下试图无密码登录node2的时候失败,之后按照网上教程尝试尝试用ssh中的scp命令传输文件失败;解决方法:出现问题的主要原因是因为当时对scp命令以及相关的参数不太了解,所以当时着急解决问题所以利用的是“土方法”U盘拷贝至slaves机并覆盖原有文件。之后实验完成之后又尝试了用scp在两台机器上拷贝过文件并成功。2. 首次无密码ssh连接成功,并在网页里显示正常(有活节点),但是在使用Eclipse 3.7和Hadoop-plugin .020.203尝试登录DFS分布式文件系统时显示无法连接;解决方法:经查此为版本问题,可能是由于Eclipse的版本太新而Hadoop版本没跟上所致;最后使用网上有人运行成功的eclipse 3.3 和 Hadoop-0.20.2可以运行成功,正确添加node1节点;3. 头一天登录成功,第二天尝试再此登录的时候虽然显示各节点服务启动正常,但是在Eclipse中显示无法进入DFS文件系统,查看logs中的Namenode记录发现报错“could only be replicated to 0 nodes, instead of 1”;解决办法:经尝试此为节点启动顺序的问题,分别按顺序在node1和node2上开启namenode(node1)、datanode(node2)、jobtracker(node1)、tasktracker(node2),注意我在此处只能分别开启,如果使用start-all.sh全部自动开启的话就会出现上述问题中的启动所有节点正常但是无活节点可用的情况。4. 有时stop-all.sh之后再此format之后再次启动会发现Namenode(或Datanode)无法启动成功;解决办法:此种错误出现的原因有:(1)查看logs发现报错为“XX does not exist”,说明我们在配置core-site.xml等文件中设置的文件夹路径不对或文件夹不存在;(2)logs文件中提示“NameNode is not formatted”,即Namenode节点未成功格式化;(3)“Hadoop在格式化一个新的分布式文件系统时,每个存储的名字空间都对应了建立时间的那个版本(可以查看/home/hadoop /name/current目录下的VERSION文件,上面记录了版本信息)”,因为重启节点后数据更新导致了Namenode和Datanode版本不一致;针对以上三种情况的解决方案为:(1)根据logs报错信息重新mkdir;(2)重新hadoop namenode format;(3)如上所述此为上一次的文件未清理导致文件不匹配的出现的错误导致节点服务关闭,这时我们要分别删除配置文件中设置的hadoop.tmp.dir、dfs.name.dir、dfs.data.dir的文件夹下的目录清空并再此format即可;当然这不是最好的办法因为这样做会让上次上传的文件删除消失;更好的解决办法还在尝试;五、实验结论总体来说这次实验其实还是比较有趣的,有别于以前大多数时候做的纯编程,这次实验主要是实践环境上的配置,使用的技术也比较新;当然做的过程中比较苦恼,因为不太习惯Linux下的命令行模式以及log查询记录文档模式还有英文的一些API文档和提示信息,网上的信息也比较杂乱,致使差错、纠错比较耗费时间和精力;同时对于MapReduce编程模式的理解也花费了一定时间,不过也加深了我对分布式计算的理解;初步感觉MapReduce模式的有一些局限性,似乎只能处理能分解成<keys,values>这样的计算任务,但是觉得不是所有的传统在本地上的计算服务都能分解成这样的模式,可能比较适合于搜索等应用,范围具有一定局限性;当然也可能是我的理解还不够,今后会继续这方面的学习。此次试验中参考的网站有:1. Hadoop快速入门:http:/hadoop.apache.org/common/docs/r0.21.0/cn/quickstart.html#Fully-Distributed+Operation2. ubuntu 中ssh无密码配置 ,hadoop节点之间无密码登录http:/blog.csdn.net/laoyi19861011/article/details/62547433. 使用 Linux 和 Hadoop 进行分布式计算http:/www.uml.org.cn/yunjisuan/201007024.asp4. Hadoop学习全程记录在Eclipse中运行第一个MapReduce程序http:/phz50.iteye.com/blog/9323735. 分析hadoop的WordCount例子(转) http:/blog.163.com/jiayouweijiewj126/blog/static/171232177201010252376472/6. Hadoop WordCount改进实现正确识别单词以及词频降序排序http:/blog.csdn.net/xw13106209/article/details/61227197. Hadoop使用常见问题以及解决方法http:/blog.csdn.net/foamflower/article/details/59803948. Hadoop 0.20.2 集群配置http:/blog.csdn.net/lmc_wy/article/details/60355439. redHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试http:/galpha.iteye.com/blog/104435510. ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Incompatible namespaceIDs .datanode namespaceID. http:/www.cnblogs.com/Dreama/articles/2097200.html11. 报错could only be replicated to 0 nodes, instead of 1 http:/blog.csdn.net/foamflower/article/details/598040612. 新手求教:could only be replicated to 0 nodes, instead of 1 http:/www.hadoopor.com/archiver/tid-1447.html

    注意事项

    本文(虚拟化与云计算课程实验报告Hadoop平台搭建.doc)为本站会员(一***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开