虚拟化与云计算课程实验报告——Hadoop平台搭建.doc
《虚拟化与云计算课程实验报告——Hadoop平台搭建.doc》由会员分享,可在线阅读,更多相关《虚拟化与云计算课程实验报告——Hadoop平台搭建.doc(13页珍藏版)》请在咨信网上搜索。
虚拟化与云计算 实 验 报 告 目录 一、实验目标 1 二、实验内容 1 三、实验步骤 1 四、实验遇到的问题及其解决方法 1 五、实验结论 1 一、实验目的 1. 实验题目:配置和使用SAN存储 掌握在Linux上配置iSCSI target服务的方法。 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身份执行以下步骤 sudo su – 1.2 安装iSCSI Target软件 1.3 修改/etc/default/iscsitarget ISCSITARGET_ENABLE=true 1.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=10240 1.5 修改/etc/iet/ietd.conf 添加: Target iqn。2001—.example:storage.lun1 IncomingUser [username] [password] OutgoingUser Lun 0 Path=/storage/lun1。img,Type=fileio Alias LUN1 #MaxConnections 6 1。6 修改/etc/iet/initiators.allow 如果只允许特定IP的initiator访问LUN,则如下设置 iqn。2001-。example:storage。lun1 192。168。0.100 如果任意initiator均可以访问,则: ALL ALL 1。6 启动/重启动iSCSI target /etc/init.d/iscsitarget start /etc/init.d/iscsitarget restart 2. 实验题目:Hadoop&MapReduce 1. 安装JDK——在实验中安装为OpenJDK 6 Runtime 2. 安装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_rsa cat ~/.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—HDFS Hadoop可以在单节点上以伪分布式模式运行。 编辑/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> 格式化HDFS bin/hadoop namenode –format 启动Hadoop,启动后可使用命令jps查看已启动进程,观察是否namenode、datanode已启动,关闭所有服务,使用命令stop—all。sh,bin/ start-all。sh 6. 浏览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/hosts 127。0。1。1 ubuntu替换为127。0。1.1 node1 编辑 /etc/hostname文件 删除该文件的所有内容,添加node1 运行命令 hostname node1 a) 指定IP地址 编辑文件/etc/network/interfaces auto eth0 iface eth0 inet static address 115。24。250.196 netmask 255.255.255.0 重启网络服务sudo /etc/init.d/networking restart 查看IP地址 ifconfig b) 修改/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盘拷贝的,之后就可以成功无密码登录node2 d) 编辑/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) 配置jobtracker masters文件配置如下: node1 slaves文件配置如下: node2 在主节点编辑hadoop的配置之后,将其拷贝到node2 的对应目录(U盘) h) 格式化HDFS bin/hadoop namenode —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 — 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(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); 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(args[1] + "/part-r-00000”)); FileOutputFormat.setOutputPath(sortJob, new Path(args[1] + "/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+Operation 2. ubuntu 中ssh无密码配置 ,hadoop节点之间无密码登录http://blog。csdn。net/laoyi19861011/article/details/6254743 3. 使用 Linux 和 Hadoop 进行分布式计算 4. Hadoop学习全程记录-—在Eclipse中运行第一个MapReduce程序http://phz50。 5. 分析hadoop的WordCount例子(转) http://blog。 6. Hadoop WordCount改进实现正确识别单词以及词频降序排序http://blog。csdn。net/xw13106209/article/details/6122719 7. Hadoop使用常见问题以及解决方法http:// 8. Hadoop 0.20.2 集群配置 http://blog。 9. redHat linux下安装hadoop 0.20。2, 并在windows下远程连接此hadoop,开发调试 10. ERROR org。apache。hadoop.hdfs.server。datanode。DataNode: Incompatible namespaceIDs .。。datanode namespaceID... http:// 11. 报错could only be replicated to 0 nodes, instead of 1 http://blog。csdn。net/foamflower/article/details/5980406 12. 新手求教:could only be replicated to 0 nodes, instead of 1 http://www.hadoopor。com/archiver/tid—1447。html 11- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 计算 课程 实验 报告 Hadoop 平台 搭建
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文