第1章 分布式计算概述
一、 选择题
1,CD 2,ABC 3,ABCD 4,ACD
二、 简答题
1, 参考1.1.1和1.1.2节
2, 参考1.1.2节
3, 分布式计算的核心技术是进程间通信,参考1.3.2节
4, 单播和组播
5, 超时和多线程
三、 实验题
1. 进程A在进程B发送receive前发起send操作
精选文库
进程A进程B发出非阻塞send操作,进程A继续运行进程B在进程A发起send前发出receive操作
进程A进程B发出非阻塞send操作,进程A继续运行— 发出阻塞receive操作,进程B被阻塞发出阻塞receive操作,进程B被阻塞收到进程A发送的数据,进程B被唤醒2
2. 进程A在进程B发送receive前发起send操作
进程A进程B发出阻塞send操作,进程A被阻塞进程B在进程A发起send前发出receive操作
— 发出阻塞receive操作,进程B被阻塞精选文库
3
精选文库
进程A进程B发出阻塞receive操作,进程B被阻塞发出阻塞send操作,进程A被阻塞收到进程A发送的数据,进程B被唤醒收到进程B返回的数据,进程A被唤醒3. 1).在提供阻塞send操作和阻塞receive操作的通信系统中
P1P2P3t=1t=2m1t=3receiveoperationsendt=4operationt=5m1t=6t=7t=8m2t=9t=10m2t=11
—
4
在提供非阻塞send操作和阻塞receive操作的通信系统中
P1P2P3t=1t=2m1t=3receiveoperationsendt=4operationt=5m1t=6t=7t=8m2t=9t=10m2t=11
2).P1,P2,P3进程间通信的顺序状态图
m1m1m2m2
第2章 分布式计算范型概述
1. 消息传递,客户-服务器,P2P,分布式对象,网络服务,移动代理等
—
精选文库
5
精选文库
2. 分布式应用最广泛最流行的范型是客户-服务器范型,参考2.2节
3. 分布式应用最基本的范型是消息传递模型,参考2.1节
4. 参考2.3节,P2P应用有很多,例如Napster,迅雷,PPS网络电视等
5. 参考2.4节
6. 参考2.7节
7. 略
8. 消息传递模式是最基本的分布式计算范型,适用于大多数应用;客户-服务器范型是最流行的分布式计算范型,应用最为广泛;P2P范型又称为对等结构范型,使得网络以最有效率的方式运行,适用于各参与者地位平等的网络;分布式对象范型,是抽象化的远程调用,适用于复杂的分布式计算应用等。
9. 略
10. 中间件又称为代理,中间件为参与对象提供内容抽象,隐藏对象引用,起到中介作用。
11. 略
第3章 Socket编程与客户服务器应用开发
— 6
精选文库
一、 填空题
1. 数据包socket,流式socket
2. 无连接方式,面向连接方式
3. 数据层,业务层,应用层
4. 迭代服务器和并发服务器
5. 有状态服务器和无状态服务器
二、 简答题
1. API:Application Programming Interface,应用程序编程接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
Socket API:套接字应用程序编程接口,适用于进程间通信的套接字应用程序编程接口
Winsock:Windows下网络编程的规范-Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。
2. 无连接方式将以任意顺序到达,而有连接方式则以发送顺序按序到达
— 7
精选文库
3. setToTimeout设置为0则表示永无超时,
4. /*
*this example illustrates the basic method for receiving a datagram packet
*/
try{
DatagramSocket mySocket = new DatagramSocket(port);
System.out.println(\"Waiting for receiving the data!\");
// instantiates a datagram socket for receiving the data
byte[ ] buffer = new byte[100]; DatagramPacket datagram = new DatagramPacket(buffer, MAX_LEN);
mySocket.setSoTimeout(5000);
}catch(SocketTimeoutException e){
System.out.println(“server response time out”);
— 8
精选文库
e.printStackTrace();
}
5. 略
第4章 RMI范型与应用
1. 消息传递范型是最基本的分布式计算范型,要求参与双方是紧耦合的,交互过程中,进程之间必须直接通信,如果进程之间的通信消息丢失(由于通信链路、系统或某个进程的失败),协作将失败;消息传递范型是面向数据的范型,适用于网络服务和简单网络应用,但是不适合包含大量混合请求和应答的复杂应用。
而分布式对象范型是在消息传递模型之上提供抽象的一种范型。与面向数据范型相比,分布式对象范型是面向行为的,它用分布式对象表示网络资源,注重于从网络资源请求服务,请求进程调用分布式对象的某个方法或操作,将数据作为方法参数传递。随后该方法在远程主机上执行,并将结果作为返回值回送给请求进程。
2. 这里说的本地过程调用,主要是指本地进程间通信,是运行在同一块内存区域之内的进程间的互相通信,通常由系统IPC接口(如消息队列,信号量,共享存储等)来实现,也可以通过本地套接字方式实现。而远程过程调用,则是在本地过程调用的基础上实现远程进程之间的通信,一般由网络套接字来编程实现,远程过程调用会被物理网络的通信状况有所限制,也增加了安全问题,但是不再受本地内存空间以及系统资源的限制。
3. 参考5.2.3节
— 9
精选文库
4. 传统的远程方法调用是指只能从客户端向服务端发起调用,增加了回调机制以后,客户可以在服务端注册自己,客户端可以向服务器提供可以被调用的方法,我们形象的称之为回调,这样服务端就可以主动向客户端发起远程方法调用。
5. 当服务器开放stub动态下载时,客户端不再需要预先配置stub文件,而是通过网络动态下载服务器上提供的stub文件,但是这会为服务器带来安全隐患,因此通过提供安全管理器来实现共享目录的访问权限,在实现stub下载的同时也增加了服务器的安全性。
6. stub下载是指可以通过网络从服务器指定的目录动态下载stub文件,而无需预先在客户端配置stub文件。
7. 代理是一种中间件,通过引入代理,解耦原来的对象关联,增强扩展性。
8. 略
第5章 WEB原理与应用开发
一、 选择题
1.B 2.D 3.D 4.D 5.A 6.BD 7.B
8.D 解析:<%@ include file=\"relativeURL\"%>这是jsp的指令元素
9.C 10.B 11.A 12.C 13.C 14.A 14.B 15.C 16.C 17.D
18.C
—
解析: 10 精选文库 22. B A 23. A 24. E 25.D 26. E 27. B 28. E 29. D 30. 31. A 32. BC 33.B 34.D 二、填空题 1.Tomcat 2.8080 3.servlet 4. <%-- 这是注释的内容 --%> 7.request 8. setContentType(String s) 9. response\\addCookie(c) 11.http://localhost:8080 10.静态页面\\动态页面 12.web.xml 13. <%@page %>/<%@include file=””%>/<% @ taglib prefix=”” uri=”” %> 14.session 15. gbk 16.一对多/多对一 三、名词解释及解答 1. 静态网页是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。 2. 所谓动态网页是指网页文件里包含了程序代码,通过后台数据库与Web服务器的信息交互,由后台数据库提供实时数据更新和数据查询服务。 — 11 精选文库 3. 数据和资源共享这两种方式结合在一起即成为今天广泛使用的网络数据库(WEB数据库),它是以后台(远程)数据库为基础,加上一定的前台(本地计算机)程序,通过浏览器完成数据存储、查询等操作的系统。 4. 前者是指令元素、后者是行为元素。jsp:include动作和include指令之间的根本性的不同在于它们被调用的时间。jsp:include动作在请求期间被激活,而include指令在页面转换期间被激活。 4.request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。 5.JSP的response隐藏对象在转换为Servlet之后,对应于HttpServletResponse型态对象,HttpServletResponse对象是有关于对客户端请求之响应,它可以来设定一些要响应的讯息,例如标题信息、响应状态码等. 7. ① 跨平台 既然JSP是基于Java语言的,那么它就可以使用Java API,所以它也是跨平台的,可以应用在不同的系统中,如Windows、Linux、Mac和Solaris等正是因为跨平台的特性,使得采用JSP技术开发的项目可以不加修改地应用到任何不同的平台上,这也应验了Java语言的\"一次编写,到处运行\"的特点。 ② 业务代码分离 — 12 精选文库 采用JSP技术开发的项目,通常使用HTML语言来设计和格式化静态页面的内容,而使用JSP标签和Java代码片段来实现动态部分。 ③ 组件重用 JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面甚至整个项目中都可以重复使用这个JavaBean。JavaBean也可以应用到其他Java应用程序中,包括桌面应用程序。 ④ 继承Java Servlet功能 Servlet是JSP出现之前的主要Java Web处理技术。它接受用户请求,在Servlet类中编写所有Java和HTML代码,然后通过输出流把结果页面返回给浏览器。 ⑤ 预编译 预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大提升了客户端的访问速度。 8.需要Java运行环境和JSP服务器;JDK即Java Development Kit ,是Java运行所必须的环境包。 JSP服务器有Tomcat/Weblogic/websphere/JBOSS等等。 9. 它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。 — 13 精选文库 10.B/S结构(Browser/Server,浏览器/服务器模式),它将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。 11.动态网页语言有JSP、ASP和PHP等等。 JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。 ASP是Active Server Page的缩写,意为“动态服务器页面”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。 PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用。 12.JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。 13.Session 是 用于保持状态的基于 Web服务器的方法。Session 允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象。 — 14 精选文库 14.Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 15.当用户通过浏览器访问一个Web站点时,首先向服务器发送一个连接请求,请求内容包括服务器的地址和请求页面的路径。服务器根据用户请求的路径以及页面路径组合起来查找到相应的页面,然后返回客户端。客户端在向服务器端提交数据时有多种数据提交机制,最常用的是GET方法和POST方法。 16. servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣 运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 第6章 P2P原理与实践 1、 P2P的基本概念是什么? 答:P2P,即Peer-to-Peer的缩写,在英语中“Peer”表示“对等者”和“伙伴”的意思,因此我们常称它为“点对点”或者“端对端”,而学术界常称它为“对等计算”。P2P是一种以非集中化方式使用分布式资源来完成一些关键任务的系统和应用。 2、 P2P技术有哪些特点? — 15 精选文库 答:非中心化、可扩展性高、健壮性强、高性价比、负载均衡等。 3、 说明P2P网络有哪几种拓扑结构,并举出它们的典型应用系统。 答:中心化拓扑,应用:Napster;全分布式非结构化拓扑,应用:Gnutella;全分布式结构化拓扑,应用:Chord;半分布式拓扑,应用:KaZaA。 4、 尝试开发一个基于P2P模式的简单的文件传输系统。 暂未完成 5、 对于P2P的未来,你有哪些感想? 略 第7章 Web Services 1.什么是Web Services? 答:Web Services是基于网络、自包含、分布式的模块化组件;它执行特定的任务,遵守具体的技术规范,这些技术规范使得Web Services能与其他兼容组件进行互操作;一般由企业发布能完成特定业务需求的在线服务,而其他企业或应用软件可以通过Internet寻求到自己所需的服务,并调用此服务,以完成特定的需求。 2.Web Services有哪些特点? — 16 精选文库 答:Web Services具有良好的封装性、松耦合性、高度可集成性和易于构建的特点 3.在哪些应用场合中适合使用Web Services方案? 答:Web Services的适用场合有:跨防火墙的通信、应用程序集成、B2B的集成和软件及数据的重用。 4.简述Web Services的体系架构和工作原理。 答:Web Services的体系架构可以参见本章图8.1。在典型情况下,Web服务由服务提供者、服务使用者和注册中心三者构成。服务提供者托管可通过网络访问特定的软件模块,定义Web Services的服务描述并将服务发布到服务注册中心统一目录中;服务请求者使用查找操作从注册中心中检索特定的服务,然后使用服务描述与服务提供者进行绑定并调用相应的服务,以进行交互。 5.XML有哪些特点? 答:可扩展性、自描述性、简洁性、数据的描述与显示相分离、易于数据的交换和共享、易于充分利用数据、可用于创造新的语言。 6.XML与Web Services是有怎样的关系? 答:在Web Services中SOAP、WSDL、UDDI等技术都是基于XML建立起来的,它是Web Services的基石。正是因为XML具有跨平台、跨语言等特性,才使得Web Services也具备这些特性,成为应用集成的好帮手。 — 17 精选文库 7.试着使用XML语言描述一个生活中你熟悉的事物,并画出该文档的树形图,同时写出相应的XML Schema文档。 解析: 这里我们来描述下某家鞋店的鞋子信息,一双鞋的信息可以包括品名、价格、尺码、类别、颜色、材质和产地等。鞋子列表信息如下: — 18 其文档树形图如下: — 精选文库 19 相应的XML Schema文档如下: xmlns=\"http://www.w3.org/20003/05/XMLSchema\"/> — 精选文库 20 精选文库 8.什么是SOAP,它由哪几个部分组成? 答:简单对象访问协议(SOAP)是一种基于XML的、轻量级的、跨平台的分布式系统间信息交换协议。SOAP主要由四个部分组成,SOAP Envelope用于定义一个描述消息 — 21 精选文库 中的内容、发送者、接收者、处理者及如何处理的整体表示框架;SOAP编码规则定义了一套编码机制用于交换应用程序定义的数据类型的实例;SOAP RPC表示远程过程调用和应答的协定;SOAP绑定定义了一种使用底层传输协议来完成在节点间交换SOAP消息的约定。 9.尝试用SOAP XML Schema编写一个列车时刻信息的服务。该SOAP服务接收三个参数:日期、始发地和终点,返回满足参数条件的所有列车信息(如:列车编号、始发地、终点、始发时间、到达时间、票价和余票等)。 解析: SOAP请求消息如下: soap:encodingStyle=\"http://www/w3/org/2003/05/soap-encoding\"> — 22 SOAP响应消息如下: soap:encodingStyle=\"http://www/w3/org/2003/05/soap-encoding\"> — 精选文库 23 — 精选文库 24 精选文库 10、SOAP Web Services有哪几种应用模型? 答:请求/响应模式、fire-and-forget模式、高级消息模式、增量解析和处理模式、缓存模式。 11、简述WSDL和UDDI。 答:WSDL(Web Services Description Language,Web服务描述语言)是一种基于XML的、专门用于描述Web Services的语言。通过WSDL可以对服务的功能信息、功能参数的消息类型、协议绑定信息和特定服务的地址信息进行描述。 UDDI(Universal Description、Discovery and Integeration,统一描述、发现和集成)是一套基于Web的分布式的Web Services信息注册中心的实现标准规范,也包含一组访问协议的实现标准,使得企业能将自身的Web Services注册上去,并让其他企业能够发现并使用这些服务,使服务更容易被获取。为了实现Web服务跨平台、跨语言和松耦合的特性,UDDI也是以XML为基础的。UDDI提供了一个全球的、跨平台、开发的框架,企业可以更具需要发布服务产品或业务流程到注册中心中,以便更多的结识更多、更好的合作伙伴,从而拓展企业的业务范围。 12、试着使用MyEclipse实现第9题中列车时刻信息查询服务,要求使用JAX-WS开发SOAP型Web Services。注意,从客户端传入始发地、终点和始发时间三个参数,服务返回满足要求的所有列车时刻信息。 解析: — 25 精选文库 (1)创建实体类Train,含有属性trainNum(列车编号)、startPlace(始发地)、startTime(始发时间)、destination(终点)、reachTime(到达时间)、price(票价)、remainder(余票)。Train.java的代码如下: public class Train { private String trainNum; //列车 编号 private String startPlace; //始发地 private String startTime; //始发时间 private String destination; //终点 private String reachTime; //到达时间 private float price; //票价 private int remainder; //余票 public Train(){ trainNum=\"\"; startPlace=\"\"; — 26 startTime=\"\"; destination=\"\"; reachTime=\"\"; price=0; remainder=0; } public Train(String trainNum, String startPlace, String startTime, String destination, String reachTime, float price, int remainder) { super(); this.trainNum = trainNum; this.startPlace = startPlace; this.startTime = startTime; — 精选文库 27 this.destination = destination; this.reachTime = reachTime; this.price = price; this.remainder = remainder; } public String getTrainNum() { return trainNum; } public void setTrainNum(String trainNum) { this.trainNum = trainNum; } public String getStartPlace() { return startPlace; — 精选文库 28 } public void setStartPlace(String startPlace) { this.startPlace = startPlace; } public String getStartTime() { return startTime; } public void setStartTime(String startTime) { this.startTime = startTime; } public String getDestination() { return destination; } — 精选文库 29 public void setDestination(String destination) { this.destination = destination; } public String getReachTime() { return reachTime; } public void setReachTime(String reachTime) { this.reachTime = reachTime; } public float getPrice() { return price; } public void setPrice(float price) { — 精选文库 30 精选文库 this.price = price; } public int getRemainder() { return remainder; } public void setRemainder(int remainder) { this.remainder = remainder; } } (2)创建服务类CheckTrainWS,为方便起见,我们用List @WebService public class CheckTrainWS { — 31 private List //初始化列车时刻表 public CheckTrainWS(){ Train t = new Train(\"D3052\上海虹桥\ \"武昌\ trainList.add(t); Train t1 = new Train(\"D56\上海虹桥\ \"杭州\ trainList.add(t1); Train t2 = new Train(\"G423\北京西\ \"广州\ trainList.add(t2); Train t3 = new Train(\"G4982\上海虹桥\ — 精选文库 32 \"杭州\ trainList.add(t3); } //查询服务 @WebMethod public List List Train temp = new Train(); for(int i=0; i if(temp.getStartPlace().equals(startPlace)&& temp.getDestination().equals(destination)&& — 精选文库 33 精选文库 temp.getStartTime().startsWith(time)){ resultList.add(temp); } } return resultList; } } (3)完成服务端的建立后,可以创建客户端CheckTrainPollingClient。注意,客户端需要传入三个参数(startPlace、destination和time),且这里采用异步方式。CheckTrainPollingClient.java的代码如下: public class CheckTrainPollingClient { public static void main(String[] args) { CheckTrainWSService service = new CheckTrainWSService(); CheckTrainWSDelegate port = service.getCheckTrainWSPort(); — 34 //调用服务,并出入需求参数 Response port.checkTrainAsync(\"上海虹桥\杭州\ while(!checkTrainAsync.isDone()){ System.out.println(\"is not done\"); } List try{ CheckTrainResponse checkTrainResponse = checkTrainAsync.get(); //获取列车时刻信息返回列表 rtnList = checkTrainResponse.getReturn(); //遍历并打印列表 — 精选文库 35 精选文库 if(rtnList.size()!=0){ System.out.println(\"共有\\\"\"+rtnList.size()+\"\\\"趟列车:\"); System.out.println(\"列车编号\\始发地\\始发时间\\\ 终点\\到站时间\\票价\\余票\"); for(Train i:rtnList){ System.out.println(i.getTrainNum()+\"\\\"+ i.getStartPlace()+\"\\\"+i.getStartTime()+ \"\\"+i.getDestination()+\"\\"+i.getReachTime()+ \"\\"+i.getPrice()+\"\\\"+i.getRemainder()); } }else{ System.out.println(\"Sorry,没有满足您需求的列车!\"); } — 36 精选文库 }catch(Exception ex){ ex.printStackTrace(); } } } (4)假如,客户端传入的参数为:\"上海虹桥\\"杭州\\"2013/07/18\",则返回信息如下图所示: 13、简述什么REST,它有哪些特点? 答:REST(Representational State Transfer,表述性状态转移)是一种全新的对Web应用和开发方式的理念,它将Web中所有事物都抽象为资源,并使用URI唯一标识,以降低开发的复杂性、提高系统的可伸缩性。 REST的特点包括:显示、充分地利用HTTP协议;所有应用程序操作都是无状态;将网络上的所有事物都抽象为资源,采用公开目录结构式的URI唯一标识这些资源;对资源的各种操作不会改变资源的标识(URI);采用通用的连接器接口对资源进行访问;使用XML — 37 精选文库 或JASON传输数据格式、跨平台性好。 14、简述REST的工作原理。 答:REST的理念是将应用中所有的事物都抽象为资源,并用URI来标识每个资源,其中一个资源可以由多个URI来定位,但一个URI只能标识一个资源。REST将HTTP中的GET、POST、PUT和DELETE与资源常用操作读取、添加、更新和删除相对应,充分利用了HTTP协议,使开发的服务具有更低的耦合性。 15、试着使用MyEclipse将第9题中的列车信息查询服务,改写为REST WebServices。 解析: (1)将列车时刻查询服务改为REST型的关键是怎样把查询操作抽象为资源,并用URI表示。对普通客户而言,“查询”列车时刻信息一般只有“读取”操作,不允许修改和添加等操作。因此,我们选用HTTP GET与读取操作映射。同时,制定三种URI来定义三 种 查 询 操 作 , 第 一 种 为 http://loacalhost:8080/CheckTrainREST/services/trains/{startPlace},表示查询从startPlace 站始发的所有列车的时刻信息;第二种为 http://loacalhost:8080/CheckTrainREST/services/trains/{startPlace}/{destination}表示从startPlace始发,开往destination的所有列车的时刻信息;第三种为http://loacalhost:8080/CheckTrainREST/services/trains/{startPlace}/{destination}/{time},表示在time指定的日期中,表示从startPlace始发,开往destination的所有列车的时刻信息。 — 38 精选文库 (2)建立REST服务资源类TrainsResource,为简化操作,也使用List @Produces(\"application/xml\") @Path(\"trains\") @Singleton public class TrainsResource { //列车信息列表 private List public TrainsResource() { Train t = new Train(\"D3052\上海虹桥\ \"武昌\ trainList.add(t); Train t1 = new Train(\"D56\上海虹桥\ — 39 \"杭州\ trainList.add(t1); Train t2 = new Train(\"G423\北京西\ \"广州\ trainList.add(t2); Train t3 = new Train(\"G4982\上海虹桥\ \"杭州\ trainList.add(t3); Train t4 = new Train(\"K369\上海虹桥\ \"合肥\ trainList.add(t4); Train t5 = new Train(\"G948\广州\ \"深圳\ — 精选文库 40 trainList.add(t5); } //返回startPlace站点始发的所有列车信息 @GET @Path(\"{startPlace}\") public List @PathParam(\"startPlace\") String tStartPlace) { List Train temp = new Train(); for(int i=0; i if(temp.getStartPlace().equals(tStartPlace)){ resultList.add(temp); — 精选文库 41 } } return resultList; } //返回startPlace-->destination航线的所有列车信息 @GET @Path(\"{startPlace}/{destination}\") public List @PathParam(\"startPlace\") String tStartPlace, @PathParam(\"destination\") String tDestination) { List Train temp = new Train(); for(int i=0; i 42 temp = trainList.get(i); if(temp.getStartPlace().equals(tStartPlace)&& temp.getDestination().equals(tDestination)){ resultList.add(temp); } } return resultList; } //返回startPlace-->destination航线在指定time日期中所有列车信息 @GET @Path(\"{startPlace}/{destination}/{time}\") public List String tStartPlace, — 精选文库 43 @PathParam(\"destination\") String tDestination, @PathParam(\"time\") String tTime) { List Train temp = new Train(); for(int i=0; i if(temp.getStartPlace().equals(tStartPlace)&& temp.getDestination().equals(tDestination)&& temp.getStartTime().startsWith(tTime)){ resultList.add(temp); } } return resultList; — 精选文库 44 精选文库 } } (3)完成服务建立,并部署和发布后,可以启动Test with REST Web Services Explorer测试服务。先测试某站始发的所有列车信息,如输入“上海虹桥”,则返回上海虹桥站始发的所有列车时刻信息,如下如所示: 接着测试从“上海虹桥”站到“杭州”站的所有列车时刻信息,如下图所示: — 45 精选文库 最后,测试“2013-07-20”从“广州”到“深圳”的所有列车信息,如下图所示: — 46 第8章 云计算原理与技术 略,参考各章节内容 第9章 云计算模拟编程实践 略,参考各章节内容 第10章 云存储技术 1. 参考11.1.1 2. 参考11.1.2 3. 参考11.1.3 4. 参考11.1.4 5. 参考11.2.1 6. 参考11.4 7. 参考11.3 8. 参考11.2.2 — 精选文库 47 精选文库 9. 参考11.5及其他文献 第11章 大数据技术与实践 1. 简述大数据的定义及其它的特征。 答:大数据并没有统一的定义,但是通常它是指所处理的数据规模巨大到无法通过目前主流数据库软件工具,在可以接受的时间内完成抓取、储存、管理和分析,并从中提取出人类可以理解的资讯。 4V特征: 第一个特征Volume是数据体量巨大。 第二个特征Variety:数据类型繁多。非结构和半结构数据正是大数据处理的难点所在。 第三个特征Velocity:处理速度快,时效性强。 最后一个特征是Value:商业价值高,但是价值密度低。单个数据的价值很低,只有大量数据聚合起来处理才能借助历史数据预测未来走势,体现出大数据计算的价值所在。 2. 思考:HDFS体系结构是否存在其局限性或瓶颈。 采用Master-Slave结构,必定会存在单点故障问题与NameNode性能瓶颈问题。其他更详细的请读者补充。 — 48 精选文库 3. HDFS中为什么默认副本数为3? 答:副本数为3的集群中,将一个副本保存到本地机架1的一个节点1上,第二个副本保存到本地机架的一个节点2上,第三个副本由节点2传输复制到远程机架2的节点3上。把三分之二的副本储存在本地机架,把三分之一的副本储存在远程机架。这样做既保证了数据的可靠性,又节省了机架之间的网络带宽。一整个机架崩溃的概率很明显远远低于单个节点的崩溃概率。一个机架崩溃了可以由另一机架保证数据的可用性。 4. HBase是如何实现随机快速存取数据的?为什么要HBASE在创建表时只需要定义列族,列族是如何存储的? 随机写入:HBase底层的存储是采用了一个keyvalue的文件结构,称作hfile来实现的;HBase的随机写入并不是立刻写入HDFS;而是先写入内存 memstore,当memstore达到一定的阀值后才会写入HDFS;而且HBase的后台合并机制,将memstore写入到HDFS的小文件合并成大文件; 随机删除:HBase中删除数据并不是立即删除,而只是在数据上做好标记,然后再下一次合并操作的时候进行清理。 随机读取:HBase在存储数据时在一个hfile中只存储同一列族的数据,并且数据时按Row key排序的,因此在读取数据时只需要根据Row key跳转到指定行就读取数据。HBase特别擅长的是对于同一列族的顺序读取,所以随机小数据量读取虽然可行,但是性能远远不如顺序读取。 5. Cassandra中超级列族与超级列与HBase中的列族和列有什么区别和联系? — 49 精选文库 超级列(super column)是一种特殊的列。两种列都是名/值对,但是普通列的值是字节数组,而超级列的值是一个子列的映射。超级列不能存储其他的超级列的映射,即超级列仅允许使用一层,但是它不限制列的数量。 超级列族概念上和普通列族相似,只不过它是超级列的集合。 6. Cassandra提供了怎样的可供用户选择的一致性级别? 写一致性 如果是向Cassandra写数据,一致性级别指定了必须写多少个副本成功后再返回给客户端应用。写可以使用如下一致性级别,ANY是最低的一致性(但可用性最高),ALL是最高的一致性(但可用性最低),QUORUM是中间的可确保强一致性,可以容忍一定程度的故障。 ANY 至少一个节点响应写操作。如果请求的row key对应的所有的副本节点都停止了,接收到请求的节点会记录HINT消息和请求数据,然后响应写成功。在row key对应的所有副本节点至少有一个启动之前,所有读row key会失败。并且HINT消息只保留一段时间,如果在这段时间内所有副本节点还不可用,则数据会丢失。 ONE 集群中至少有1个副本节点写成功。 TWO 集群中至少有2个副本节点写成功。 THREE 集群中至少有3个副本节点写成功。 — 50 精选文库 QUORUM 集群中至少有quorum个副本节点写成功.quorum=(各数据中心副本因子之和)/2 + 1,假如2个数据中心,1个数据中的副本因子3,1个数据中心的副本因子是2,quorum=(3+2)/2 + 1 = 3 LOCAL_QUORUM 集群中同1个数据中心至少有quorum个副本节点写成功。quorum=(本数据中心副本因子)/2 + 1,假如接受请求的节点所在的数据中心的副本因子是2,则quorum=(2)/2 + 1 = 2 EACH_QUORUM 集群中每个数据中心至少有quorum个副本节点写成功。quorum计算同LOCAL_QUORUM。 ALL 集群中所有副本节点写成功。 读一致性 如果是向Cassandra读数据,一致性级别指定了必须多少个副本响应后再返回给客户端应用结果。 ONE 返回集群最近副本(决定于snitch)的响应。 TWO 返回集群里2个最近副本中的最新数据。 THREE 返回集群里3个最近副本中的最新数据。 QUORUM 返回集群里quorum个副本中的最新数据。quorum=(各数据中心副本因子之和)/2 + 1,假如2个数据中心,1个数据中的副本因子3,1个数据中心的副本因 — 51 精选文库 子是2,quorum=(3+2)/2 + 1 = 3 LOCAL_QUORUM 返回集群里当前数据中心quorum个副本中的最新数据。quorum=(本数据中心副本因子)/2 + 1,假如接受请求的节点所在的数据中心的副本因子是2,则quorum=(2)/2 + 1 = 2 EACH_QUORUM 返回集群中每个数据中心至少有quorum个副本中的最新数据。quorum计算同LOCAL_QUORUM。 ALL 返回集群中所有副本中的最新数据。 7. Redis的数据类型是怎样的?是否像HBase一样是Key-Value形式? Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值。也就是说,你不必仅仅把字符串当作键所指向的值。 下列这些数据类型都可作为值类型。 字符串(string)、列表(list)、集合(set)、有序集合(orted set)、希表(hash)。 String是最基本的一种数据类型,普通的key/value存储都可以归为此类。 List类型其实就是一个每个子元素都是String类型的双向链表。 Set是String类型的无序集合。 — 52 精选文库 Sorted set和set一样也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。 Hash是一个string类型的field和value的映射表.它的添加,删除操作都是O(1)(平均).hash特别适合用于存储对象。 8. Redis提供了哪两种分布式模型? 读写分离模型:传统Master与Slave模式。 数据分片模型:将每个节点看成都是独立的master,然后通过业务实现数据分片。 结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。 9. MongoDB的数据组织形式是怎样的?它的特点与应用场景是怎样的? MongoDB组织数据的方式如下: Key-Value对 > 文档 > 集合 > 数据库 多个Key-Value对组织起来形成类似于JSON格式的文档,多个文档组织成为一个集合,多个集合组织起来,就形成了数据库(database)。单个MongoDB实例可以使用多个数据库,每个数据库都是独立运作的,可以有单独的权限,每个数据库的数据被分开保存在不同的文件里。 — 53 精选文库 适用范围: 适合实时的插入,更新与查询,并具备应用程序实时数据存储所需的复制及高度伸缩性。 适合作为信息基础设施的持久化缓存层。 适合由数十或数百台服务器组成的数据库。因为Mongo已经包含对MapReduce引擎的内置支持。 10. 名词解释:PRAM、BSP、LogP与MapReduce. PRAM:即并行随机存取机,也称之为SIMD-SM(共享存储的单指令流多数据流)模型,是一种应用于并行计算抽象模型。PRAM模型中,假设有一组有限或无限个独立的至少拥有简单算数计算能力和逻辑判断能力的处理机,每个处理机拥有自己的本地存储(即寄存器)。并假定存在一个容量无限大的共享存储器,这个存储器被切分成特定大小的存储单元。在单位时间内,每个处理机都能够随机地访问任意存储单元。 BSP:整体同步并行计算模型(Bulk Synchronous Parallel Computing Model),又名大同步模型或BSP模型。在一个超级步中,各处理器均执行局部操作,并且可以通过选路器接收和发送消息。 LogP:LogP模型是一种分布存储器、点对点通信的多处理器模型。这个模型说明了由互连网络连接起来的计算机集群的性能特点,但没有描述网络的结构。 MapReduce:MapReduce模型是一种并行编程技术。它源自函数式编程理念,并有 — 54 精选文库 Google把它应用到在分布式计算环境上的大规模数据处理中。 11. 当今流行的大数据处理模型MapReduce的数据处理过程及其优劣势。 MapReduce的输入和输出都是是一系列的key/value对。MapReduce运行环境的用户通过实现两个函数(Map和Reduce)来表达自己的算法。Map函数,通过读入一系列的key/value对来输出一系列的以key/value对为形式的中间结果。MapReduce运行环境会收集这些中间结果的key/value对,并根据key的值进行聚合和排序,并将这些key/value对有序地传递给Reduce函数。同样由用户定义的Reduce函数接收这些中间结果的key及与其对应的value列表,合并这些value来生成对应key的更小的一个value集合。通常触发一次Reduce函数会产生一个或零个结果value。 MapReduce的优势: 1、移动计算而不是移动数据,避免了额外的网络负载。 2、任务之间相互独立,让局部故障可以更容易的处理,单个节点的故障的话只需要重启该节点任务即可。 3、理想状态下MapReduce模型是可线性扩展的。 4、MapReduce模型结构简单,终端用户至少只需编写Map和Reduce函数。 6、MapReduce模型的扩展性曲线是平坦的。 12. 实际操作搭建编程环境并编写简单的调用HDFS和HBase API的程序,可参考 — 55 精选文库 HDFS、HBase的API文档。 略 13. 实际操作搭建编程环境并编写简单的MapReduce的程序,可参考Hadoop的API文档。 略 14. 与MapReduce相比,Impala的优势在哪里?为什么有效率方面的优势? Impala的优势: 1、较MapReduce而言,Impala使用HQL作为查询语言, 使用者学习的门槛更低。 2、Impala对于MapReduce而言在处理HQL查询是效率更高,官方数据时十倍以上。 3、Impala采用类似P2P对等网的架构,没有Master与Slave之分,即使若干个Daemon故障也不会影响整个系统可用性,不会像MapReduce架构中的JobTracker以后存在单点故障的风险。 Impala处理HQL查询在效率方面有优势的原因: Impala采用了Linux原生C语言作为基础环境,更多地采用缓存机制,减少ETL的次数,提高了执行效率。直接从本地文件系统读取HDFS中的数据,提高了数据的本地行。 — 56 精选文库 Impala是一个专门为HQL查询处理的查询引擎,相对于MapReduce这种通用的计算模型来说,对于查询有更多的优化。 15. HadoopDB是否是对于Hadoop和Hive的修改?如果是,它大体上修改了哪些地方? 是的。 添加了一下组件: Databse Connector: 作用: 连接节点上的TaskTracker数据库。节点上的数据库相当于于传统Hadoop中的HDFS。 实现方法: 扩展Hadoop 的 InputFormat,使Hadoop可以读写数据库的内容。 Catalog: 作用 1.连接数据库用到的参数的存储,如数据库位置,驱动类和证书; — 57 精选文库 2.保存了一些元数据,如数据簇中的数据集,副本的位置,数据的划分,类似于 Hadoop 的 NameNode。 实现 保存于HDFS上的 XML配置文档, Data Loader 作用 将数据合理划分为数据块,从 HDFS 转移到节点中的本地文件系统 实现 全局哈希函数把数据分配到不同节点。 本地哈希函数将分配到本节点的数据继续划分为不同 chunks SQL to MapReduce to SQL (SMS) Planner 作用 将 HiveQL 转化为特定执行计划,在 HadoopDB 中执行。原则是尽可能的讲操作推向节点上的 RDBMS 上执行,以此提高执行效率。 — 58 精选文库 实现 扩展 Hive: 1.执行查找前,用 catolog 的信息更新 Hive 的 metastore,定向到节点数据库的表 2.执行前,决定划分的键;将部分查询语句推到节点的数据库中执行。 16. HadoopDB其优点是什么? HadoopDB的优点: 结合Hive对SQL强大的支持并直接生成map/reduce任务,不需要再手动编写map/reduce程序。 利用关系数据库查数据则又是利用单节点的性能优势。 利用Hadoop所具有的高容错性、高可用性以及对于高通量计算的性能优越性。 17. 本文提及的大数据未来的研究方向可能并不全面,读者自己有何见解? 略 18. 对本章节中提及的工具及其搭建方法做实践。 略 第12章 电商大数据分析技术 — 59 略,参考各章节内容 — 精选文库 60 因篇幅问题不能全部显示,请点此查看更多更全内容