大家好,又见面了,我是你们的朋友全栈君。
课程设计任务书
一、作业目的
物联网的核心是应用,应用的核心是云计算。通过构建一个云计算平台,并利用这个平台设计云计算实验,将结果与普通的电脑计算比较两者的差别,感受云计算的优越性能,从而对物联网有更深刻的体验与认识。
二、作业内容及要求
能够按照课程设计任务书按照相应的要求完成整个云计算平台的搭建,要完成这个任务,就要对云计算平台的架构和原理有一定的认识,对物联网的应用层有深入的学习,通过查阅书籍文献与网络资料去掌握相关知识,完成云平台的构建与实验的设计。
三、作业成果形式及提交要求
做出实验成果,并向验收老师展示其功能和实现原理,回答老师提出的相关问题;提交实验程序和报告。提交要求是实物验收必须得到老师的肯定,报告必须能清晰说明实验过程与原理,严谨有说服力。
四、参考文献
[1] Hadoop权威指南,清华大学出版社,2010-5-1
[2] NIST Cloud Computing Program,http://www.nist.gov/itl/cloud/
[3] Hadoop大数据处理,人民邮电出版社,2013-09-01
[4] 虚拟化与云计算,电子工业出版社,2009-10-1
[5] 走近云计算,人民邮电出版社,2009年
[6] Hadoop实战,人民邮电出版社,2011年10月
[7] Hadoop云计算实战,清华大学出版社,2012-10
目录
课程设计任务书
目录
摘要
1 绪论
1.1 云计算概述
1.1.1 云计算的五大核心特点
1.1.2 云计算的三种服务模式
1.2 Hadoop系统概述
1.3 云计算平台搭建方法
1.4 本次课设所用平台与搭建方法
2.云计算平台原理
2.1 Hadoop系统原理
2.2 ubuntu系统
3.云计算平台搭建过程
3.1 ubuntu系统的安装
3.2 Hadoop系统部署
4.分布式云计算实验
4.1基于MapReduce的分布式云计算实验
4.2 普通PC机上的对比实验
4.3分布式云计算实验结果与总结
5.课程设计总结
6.附录
摘要
物联网的核心是应用,应用的核心是云计算。从一开始学习物联网这门课开始就不断的听到云计算的介绍,并且随着学习的深入,越来越感受到云计算在物联网中的重要作用,没错,物联网的核心是应用,应用的核心是云计算。世界已经悄然进入到大数据时代,大数据的处理依靠传统手段已经捉襟见肘,随着云计算的出现,大数据的潜力才充分发掘出来,物联网也正是接着云计算的东风才能够发展到今天这种深刻改变人们生活方式的地步。
云计算是物联网的应用层,做云计算关键要学会怎么去运用物联网,为此需要查阅与云计算有关的书籍,网上牛人的笔记和国外网站的资料,亲手设计与实现分布式程序进行实验,从而直观的感受到云计算的强大与物联网的无处不在。
云计算的重要性不言而喻,物联网的发展离不开云计算,所以研究云计算的搭建与运用是具有极大的意义。
关键词:物联网 云计算 云计算平台搭建 分布式计算
1,绪论
1.1 云计算概述
在参考文献2里,NIST对云计算定义如下:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用和服务等)并提高其可用性的模式,这些资源来自一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。这种模式具有5个关键功能,还包括3种服务模式和4种部署方式。
1.1.1云计算的五大核心特点:
按需自助服务(On Demand Self-Service):供应商的资源保持高可用和高就绪的状态,用户可以按需方便地自助地获得资源。
泛在的网络访问(Broad Network Access):可以通过各种网络渠道,以统一标准的机制(如浏览器,相同的API等)获取服务,但是客户端可以是多种多样的瘦客户端或富客户端(例如移动电话、笔记本电脑、PDA等)。
动态的资源池(Resource Pooling):供应商的计算资源可以被整合为一个动态资源池,以多租户模式服务所有客户,不同的物理和虚拟资源可根据客户需求动态分配。服务商需实现资源的位置无关性,客户一般不需要知道所使用的资源的确切地理位置,但在需要的时候客户可以指定资源位置(如哪个国家,哪个数据中心等)的要求。
快速弹性(Rapid Elasticity):可以迅速、弹性地提供服务,能快速扩展,也可以快速释放实现快速缩小。对客户来说,可以租用的资源看起来似乎是无限的,可在任何时间购买任何数量的资源。
可计量的服务(Measured Service):服务的收费可以是基于计量的一次一付,或基于广告的收费模式。系统以针对不同服务需求(例如,CPU时间、存储空间、带宽、甚至按用户账号的使用率高低)来计量资源的使用情况和定价,以提高资源的管控能力和促进优化利用。整个系统资源可以通过监控和报表的方式对服务提供者和使用者透明化。
1.1.2云计算的三种服务模式
云计算的三个服务模式(Delivery Models)是:SaaS、PaaS和IaaS。
SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过瘦客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储,等等。
PaaS:提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java、Python、.Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置。
IaaS: 提供给消费者的服务是对所有设施的利用,包括处理、存储、网络和其他基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如,防火墙、负载均衡器等)的控制。
目前世界大多数互联网公司都开始布局云计算,Google,华为,BAT,亚马逊也都已经将云计算成熟运用与自己的生态系统,并产生巨大的效益。国内外关于云计算的研究都在火热的进行中。无论是收费的云计算服务还是开源云计算研究都趋于白热化,可见云计算在未来各个领域非同一般的潜力。
1.2 Hadoop系统概述
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和Map Reduce。HDFS为海量的数据提供了存储,则Map Reduce为海量的数据提供了计算。
图1-1 HDFS文件系统结构
图1-2 Map Reduce工作流程
Hadoop技术已经无处不在。不管是好是坏,Hadoop已经成为大数据的代名词。短短几年间,Hadoop从一种边缘技术成为事实上的标准,不仅现在Hadoop是企业大数据的标准,而且在未来,它的地位似乎一时难以动摇。
1.3 云计算平台搭建方法
目前开源的云计算平台的搭建都要依托Linux系统,因此我们有2种办法搭建云计算平台:安装Linux系统和在其他操作系统下安装Linux虚拟机后搭建云平台。目前主流的虚拟机有:
Virtual Box
Vmware
有了Linux系统环境后就能搭建云计算平台了,几大开源云平台系统有:
Hadoop系统
Open Stack
云计算平台的搭建=Linux系统+开源云平台+SSH框架。
1.4 本次课设所用平台与搭建方法
一开始本设计采用的是虚拟机+Hadoop系统+SSH框架搭建自己的云计算平台,发现在虚拟机下的Linux系统无法下载一些系统关键应用导致云平台无法搭建,前后实验多次后直接给在纯Linux系统部署云计算平台从而成功搭建好云平台,本次课程设计所采用的搭建办法是:
Ubuntu14.04系统+Hadoop系统+SSH框架。
2,云计算平台原理
2.1 Hadoop系统原理
Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,其最核心的设计包括:Map Reduce和HDFS。基于 Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。
简单的说:Map Reduce框架的核心步骤主要分两部分:Map和Reduce。当你向Map Reduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce对数据做进一步处理之后,输出最终结果。
Map Reduce是Hadoop的核心技术之一,为分布式计算的程序设计提供了良好的编程接口,并且屏蔽了底层通信原理,使得程序员只需关心业务逻辑本事,就可轻易的编写出基于集群的分布式并行程序。从它名字上来看,大致可以看出个两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个子任务并行的执行,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果并输出。
适合用 Map Reduce来处理的数据集(或任务)有一个基本要求:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
想要彻底了解Hadoop系统的原理是十分困难的,由于篇幅有限,知识水平也不高,我只能描写其大概面貌,本次课程设计的核心是学习搭建与运用云计算平台,没有足够的时间与精力去完全了解Hadoop的原理,在这里我们不妨就理解为:
Hadoop系统=HDFS分布式文件系统+Map Reduce运算机制。
这样就能很好的明白它们的大致关系,有助于对后面实验的理解。
图2-1 Hadoop系统架构
2.2 Ubuntu系统
本次课程设计所使用的Linux系统是ubuntu14。
Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“Ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。
LTS 是 Ubuntu 的长期支持版,因此 Ubuntu 14.04 支持周期长达 3-5 年。因此 Ubuntu 14.04 是追求稳定的用户和企业的最佳选择。所以本次课程设计选择ubuntu14.04LTS版本完全能够应付云平台搭建与相关实验的任务。
图2-2 ubuntu14.04LTS系统
3,云计算平台搭建过程
3.1 Ubuntu系统的安装
去Ubuntu官网下载好对应版本的系统镜像,并用虚拟光驱软件加载镜像,选择安装Ubuntu系统,一路点击继续后大约10来分钟就可以安装好Ubuntu系统了。
3.2 Hadopp系统部署
修改机器名:
打开/etc/hostname文件,将/etc/hostname文件中的Ubuntu改为你想取的机器名。这里我取“s15“。重启系统后才会生效。
安装ssh服务:
在terminal窗口中输入:Sudoa apt-get install open ssh-server
建立ssh无密码登录本机
在terminal窗口中输入:
ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
得到如下图说明操作正确:
图3-1 建立ssh无密码登录本机
登录local host:
在terminal窗口中输入:bin/start-all.sh
安装Hadoop :
下载Hadoop 安装包并解压,打开Hadoop/conf/Hadoop.sh文件,配置conf/Hadoop.sh:找到#export JAVA_HOME=…一行,去掉#,然后加上本机JDK的路径。
打开conf/core-site.XML文件,加入如下代码:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
打开conf/map red-site.XML文件,编辑如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
打开conf/masters文件和conf/slaves文件,添加secondary的主机名,作为单机版环境,这里只需填写local host就Ok了。
到这里Hadoop系统就部署完毕了。调用bin/start-all.sh 命令即可以启动Hadoop,用JSP命令查看系统状态,出现如下信息说明系统部署成功:
图3-2 用jsp命令查看系统状态
4,分布式云计算实验
云平台已经搭建完毕,那么这只是第一步,关键还得学会怎么用它,为了能够体现云计算与普通PC机计算能力的差异我特意为本次课设设计了一个专门用于对比的实验程序。
云计算的能力在于飞速处理大数据,为了模拟大数据,在一个TXT文本中循环写入了七百多万单词,为了便于写入这么多单词,在TXT文本中填充了7094304个“for”来模拟大数据。
接下来分别设计一个用于分布式计算的Map Reduce程序和在普通PC机上运行的JAVA程序,该程序的功能是统计一个文本中的单词数量,并输出整个程序运行耗费时间。对比两个程序在两个环境中的运算耗费时间即可比较出二者的差异。
4.1 基于Map Reduce的分布式云计算实验
用于分布式计算的程序核心设计如下:
- public static void main(String[] Argus) throws Conception {
- Date d = new Date();
- long begintime = d.getTime();
- JobConf conf = new JobConf(WordCount.class);
- conf.setJobName(“wordcount”);
- conf.setNumMapTasks(3);
- conf.setNumReduceTasks(2);
- conf.outspokenness(Text.class);
- conf.outclass(Inequitable.class);
- conf.setMapperClass(Map.class);
- conf.setCombinerClass(Reduce.class);
- conf.setReducerClass(Reduce.class);
- conf.setInputFormat(TextInputFormat.class);
- conf.setOutputFormat(TextOutputFormat.class); JobClient.runJob(conf);
- Date d2 = new Date();
- long endtime = d2.getTime();
- System.out.println(“用时:”);
- System.out.print(endtime-begintime);
- System.out.println(” 毫秒”); }
其中 Date d1,d2用于捕获程序运行开始和结束的时间其时间差即为程序运算所耗费的时间;conf.setNumMapTasks(3)设置分布式运算时所以的map数量为3个,conf.setNumReduceTasks(2);设置运算中所以的reduce数量为2个,其他的设置为配置Map Reduce的其他必要参数,在这里对本实验无影响就不解析了。
想要利用云平台来为我们做计算服务还要把写好的Map Reduce程序进行编译,打包成库文件,然后将模拟大数据的TXT文档提交到HDFS空间,执行以下命令就能启动云计算了:
bin/Hadoop as -put input/ input 把文件提交到HDFS空间
bin/hadoop jar WordCount.jar WordCount input output 启动云计算
得到的结果如下:
图4-1 云计算实验结果
可以看到输出结果为单词”for”7094304个,耗时49882毫秒。
4.2 普通PC机上的对比实验
在普通PC机上运行的对比实验程序十分简单,就是对一个文本进行读取,然后逐行识别出单词进行统计,其实现过程与Map Reduce程序中统计单词部分所实现的功能一样,详情参见附录。
该程序在非分布式云计算环境中的实验结果如下:
图4-2 普通PC机实验结果
可以看到输出结果为单词”for”也是7094304个,耗时259973毫秒。
4.3 分布式云计算实验结果与总结
从两个对比实验中我们非常清楚的看到同样都是统计7094304个单词的运算普通PC机程序耗费了259973毫秒,而分布式云计算只用了49882毫秒,分布式云计算比普通的计算快了足足5倍有余,并且由于计算速度受服务器好坏的影响,这个数据也只是在我的破电脑上的结果,如果在更强大的服务器上运行那就会有更大的差距。
本设计做的这个对比实验虽然简陋,但是麻雀虽小,五脏齐全,同样能够很好的对比出两种运算的优劣。除此之外,在相关的文献查看过程中发现云计算在数据越大优越性越能体现出来。事实上真正搭建好的集群式云计算平台对于上GB的大数据都是秒内完成的,这就是云计算的强大!
经过这次实验可以看出,云计算有足够的能力处理物联网中庞大的数据,在万物互联中产生的无数的数据就可以用云计算技术加以综合分析从而来更好的服务于物联网。
5, 课程设计总结
本次课程设计总的来说进行的还是很顺利的,一开始在本设计中采用主流的虚拟机加开源云平台的方法进行云平台搭建,但是在反复试了多种办法后都失败了,之后选择直接安装Ubuntu系统来搭建云平台,后来回想起来这果然是个聪明的决定,因为在纯Linux系统下部署云平台的所有操作都进行的十分顺利没有出现任何意外。
部署云平台进行的十分顺利从而有了更多的时间来学习和设计对比实验。本以为这个对比实验不就是写一个普通的统计单词的JAVA程序嘛,后来才知道提交到云计算平台的程序结构是有一定语法结构的,并且需要在程序代码中手动设置Map Reduce的各项参数,如果不学一学Map Reduce程序的相关知识根本没法写出一个简单的Map Reduce程序,于是借阅了《Hadoop大数据处理》和《Hadoop权威指南》等书籍,学习了几天后才出步了解Map Reduce程序的基本结构和语法,设计的对比实验程序也就顺利出炉了。
普通的PC机计算能力统计了七百多万个单词整整耗费了约4分钟的时间,当用云计算来做这个运算时真正的被它的处理速度震撼到了,它竟然只用了不到50秒!第一次真正直观体验到到云计算的强大就在这一刻开始了!
后来又做了更多的实验,发现数据越大,两种处理方法的对比也就越明显,怪不得现在主流的互联网公司都要部署云计算,没有这么强大的计算能力,世界与日俱增的大数据怎么处理的过来呢!
6,附录
Map Reduce程序:
- import java.util.*;
- import java.io.IOException;
- import java.util.Iterator;
- 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.mapred.FileInputFormat;
- import org.apache.hadoop.mapred.FileOutputFormat;
- import org.apache.hadoop.mapred.JobClient;
- import org.apache.hadoop.mapred.JobConf;
- import org.apache.hadoop.mapred.MapReduceBase;
- import org.apache.hadoop.mapred.Mapper;
- import org.apache.hadoop.mapred.OutputCollector;
- import org.apache.hadoop.mapred.Reducer;
- import org.apache.hadoop.mapred.Reporter;
- import org.apache.hadoop.mapred.TextInputFormat;
- import org.apache.hadoop.mapred.TextOutputFormat;
- import java.text.SimpleDateFormat;
- public class WordCount {
- public static class Map extends MapReduceBase implements //map
- Mapper<LongWritable, Text, Text, IntWritable> {
- private final static IntWritable one = new IntWritable(1);
- private final Text word = new Text();
- @Override
- public void map(LongWritable key, Text value,
- OutputCollector<Text, IntWritable> output, Reporter reporter)
- throws IOException {
- String line = value.toString();
- StringTokenizer tokenizer = new StringTokenizer(line); //读取文本内容
- while (tokenizer.hasMoreTokens()) { //对每个MAP开始各自计数
- word.set(tokenizer.nextToken());
- output.collect(word, one);
- }
- }
- }
- public static class Reduce extends MapReduceBase implements //Reduce
- Reducer<Text, IntWritable, Text, IntWritable> {
- @Override
- public void reduce(Text key, Iterator<IntWritable> values,
- OutputCollector<Text, IntWritable> output, Reporter reporter)
- throws IOException {
- int sum = 0;
- while (values.hasNext()) {
- sum += values.next().get(); //将所有MAP记得数相加
- }
- output.collect(key, new IntWritable(sum)); //汇总
- }
- }
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- Date d = new Date();
- long begintime = d.getTime();
- JobConf conf = new JobConf(WordCount.class);
- conf.setJobName(“wordcount”);
- //设定MAP数
- conf.setNumMapTasks(3);
- //设定REDUCE数
- conf.setNumReduceTasks(2);
- // 设定输出的key和value类型
- conf.setOutputKeyClass(Text.class);
- conf.setOutputValueClass(IntWritable.class);
- // 设定各个作业的类
- conf.setMapperClass(Map.class);
- conf.setCombinerClass(Reduce.class);
- conf.setReducerClass(Reduce.class);
- // 设定输入输出的格式
- conf.setInputFormat(TextInputFormat.class);
- conf.setOutputFormat(TextOutputFormat.class);
- FileInputFormat.setInputPaths(conf, new Path(args[0]));
- FileOutputFormat.setOutputPath(conf, new Path(args[1]));
- JobClient.runJob(conf);
- Date d2 = new Date();
- long endtime = d2.getTime();
- System.out.println(“用时:”);
- System.out.print(endtime-begintime);
- System.out.println(” 毫秒”);
用于对比的统计单词程序:import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.Scanner;
- import java.util.*;
- import java.text.SimpleDateFormat;
- public class Readtxt {
- public static void main(String[] args) {
- Date d = new Date();
- long begintime = d.getTime();
- int count = 0;
- try {
- Scanner in = new Scanner(new File(“testtxt.txt”));
- while (in.hasNext()) {
- String str = in.next();
- splitt(str);
- count++;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- System.out.println(“这个文本内单词的个数是:”+count);
- Date d2 = new Date();
- long endtime = d2.getTime();
- System.out.println(“用时:”);
- System.out.print(endtime-begintime);
- System.out.println(” 毫秒”);
- }
- public static void splitt(String str){
- String strr = str.trim();
- String[] abc = strr.split(“[\\p{Space}]+”);
- for(int i=0;i<abc.length;i++)
- {
- System.out.println(abc[i]);
- }
- }
- }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125821.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...