云计算与大数据技术应用知识及案列
-
简述什么是云计算?
答:云计算是一种动态扩展的计算模式,通过网络将虚拟化的资源作为服务提供;云计算是一种无处不在的、便捷的通过互联网访问一个可定制的IT资源(IT资源包括网络、服务器、存储、应用软件和服务)共享池,并是一种按使用量付费的模式,它能够通过最少量的管理或与服务供应商的互动实现计算资源的迅速供给和释放;云计算是基于互联网服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。
-
云计算有什么特点?
答:①具有大规模并行计算能力;②资源虚拟化(Virtualization)和弹性调度;③数据量巨大并且增速迅猛;④高可靠性;⑤按需分配,按量计费。 -
请分别回答什么是IaaS、PaaS、SaaS?
答:IaaS:基础设施即服务,Infrastructure as a Service;PaaS:平台即服务,Platform as a Service;SaaS:软件即服务,Software as a Service。 -
云计算的基础设施有哪些,各自完成什么功能?
答:①分布式文件系统,完成数据的存储;②MapReduce编程模式,提供分布式并行编程环境进行数据处理;③大规模分布式数据库BigTable,提供分布式大规模数据库管理系统。 -
解释说明什么是非结构化和半结构化数据?
答:非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、图像和音频/视频信息等。半结构化数据是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据之间的数据,XML、HTML文档属于半结构化数据,它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。 -
大数据价值链的三大构成是什么?
答:数据本身、技能与思维。 -
大数据的4V特征是什么?
答:①多样性(Variety);②规模性大(Volume);③快速性(Velocity);④价值密度低(Value)。 -
简述云计算与大数据的关系?
答:云计算与大数据是一对相辅相成的概念,它们描述了面向计算时代信息技术的两个方面,云计算侧重于描述资源和应用的网络化交付方法,大数据侧重于描述面向数据时代由于数据量巨大所带来的技术挑战。
云计算的核心是业务模式,本质是数据处理技术。数据是资产,云为数据资产提供了存储、访问的场所和计算,即云计算更偏重海量存储和计算,以及提供的云服务,运行云应用。云计算是基础设施架构,大数据是灵魂资产。 -
什么是虚拟化?
答:虚拟化是一个广义的术语,对不同的行业或不同的人有着不同的意义。在计算机科学领域中,虚拟化意味着对计算机资源的抽象。简单来说,虚拟化是模拟真正的(或者称物理的)计算机资源,模拟CPU、内存、存储、网络等用户可见的物理的硬件资源。 -
为什么要使用虚拟化?
答:使用虚拟化的原因主要有以下四点:
(1)使用虚拟化可以共享资源,而相互不受影响。
(2)使用虚拟化可以将很多零散的资源集中到一处,而使用的用户则感觉像是一个整体。
(3)使用虚拟化可以动态维护资源的分配,动态扩展或减少某个用户所使用的资源。
(4)使用虚拟化易于管理资源,易于发布版本,易于部署版本,易于测试版本等。 -
常见的虚拟化技术有哪些?
答:常见的虚拟化技术有:CPU虚拟化,内存虚拟化,全虚拟化,半虚拟化,硬件辅助虚拟化,存储虚拟化等虚拟化技术。 -
数据中心的发展经历了 、 、 、 四个阶段。
答:巨型机时代、微型计算机/PC时代、互联网时代、云计算与大数据时代。 -
数据中心的选址主要考虑 、 、 、 等因素。
答:地质条件、气候环境、电力供给、网络带宽。 -
数据中心的主要组成部分有 、 、 、 。
答:基础设施、硬件设施、基础软件、管理支撑软件。
4.PUE的定义为 。
答:PUE(Power Usage Effectiveness)由美国绿色网格联盟(The Green Grid)于2007年提出,是业界公认的测量数据中心能耗的主要指标之一,其定义如下: -
DCIE的定义为 。
答:DCIE(Data Center Infrastructure Efficiency)是数据中心能耗评估的另一公认指标,是由美国绿色网格联盟于2007年提出,用于表示数据中心IT设备用电占总用电量的比例,其定义如下: -
解释说明什么是并行计算?简要概括并行计算的发展如何?
答:在计算机术语中,并行性指的是把一个复杂问题分解成多个能同时处理子问题的能力。并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。
20世纪70年代,第一台并行计算机于1972年产生(ILLIAC IV,伊利诺依大学),由64个处理器组成,可扩展性好,但可编程性差;20世纪80年代,并行计算机进入百家争鸣状态,以多指令多数据流MIMD(Multiple Instruction stream Multiple Data stream)并行计算机为主;20世纪90年代,并行计算体系结构框架趋于统一,基本以分布式共享存储(Distributed Shared Memory,DSM)、大规模并行处理结构(Massively Parallel Processing,MPP)、工作站机群(Cluster of Workstations,COW)为代表;21世纪初,并行计算得到了前所未有的大踏步发展,以COW为原型的由大规模商用普通PC机构成的机群为主;今天,越来越多的并行计算机系统采用商品化的微处理器加上商品化的互连网络构造,这种分布存储的并行计算机系统称为集群(NOW),并行计算进入了一个新的时代,并行计算的应用达到了前所未有的广度和深度。 -
简要说明集群的概念和集群系统的分类。
答:集群是一组独立的计算机(结点)的集合体,结点间通过高性能的网络相连接,各结点除了作为一个单一的计算资源供用户使用外,还可以协同工作,并表示为一个单一的、集中的计算资源,供并行计算使用。集群是一种造价低廉、易于构建并且具有较好可扩展性的体系结构。
集群系统按功能和结构可以分为如下四类:(1)高可用性集群系统(2)负载均衡集群系统(3)高性能集群系统(4)虚拟化集群系统。 -
并行计算的分类有哪些?
答:并行计算技术在高速发展的今天,出现了各种不同的技术方法,同时也出现了不同的分类方法,包括按指令和数据处理方式的Flynn分类、按存储访问结构的分类、按应用计算特征的分类。 -
简要说明并行计算的四类设计模型?
答:并行计算的设计模型主要有四类:隐式并行(Implicit Parallel)、数据并行(Data Parallel)、共享变量(Shared Variable)、消息传递(Message Passing)。
(1)隐式并行是程序员用熟悉的串行语言编程,编译器或运行支持系统自动转化为并行代码。其特点是语义简单、可移植性好、单线程、易于调试和验证正确性,但效率很低。
(2)数据并行是SIMD的自然模型,是局部计算和数据选路操作。其特点是单线程、并行操作于聚合数据结构(数组)、松散同步、单一地址空间、隐式交互作用和显式数据分布。
(3)共享变量是PVP、SMP、DSM的自然模型。其特点是多线程(SPMD、MPMD)、异步、单一地址空间、显式同步、隐式数据分布、隐式通信。
(4)消息传递是MPP、COW的自然模型。其特点是多线程、异步、多地址空间、显式同步、显式通信、显式数据映射和负载分配。 -
并行程序设计方式主要有哪几种并分别说明。
答:实现并行编程常见方法有以下三种。但三者可混合使用,如对以SMP为节点的Cluster来说,可以在节点间进行消息传递,在节点内进行共享变量编程。
(1)线程模型:OpenMP、POSIX。
(2)消息传递模型:PVM(Parallel Virtual Machine Computing)、MPI(Message Passing Interface)。
(3)数据并行模型:HPF。 -
描述云存储系统的结构模型。
答:云存储系统的结构模型主要包括:存储层,基础管理层,应用接口层,访问层。
(1)存储层是云存储最基础的部分,云存储中的存储设备往往数量庞大且多分布在不同地域,彼此之间通过广域网、互联网或者FC光纤通道网络连接在一起。云存储系统对外提供多种不同的存储服务,各种服务的数据统一存放在云存储系统中,形成一个海量数据池。云存储的数据存储层将不同类型的存储设备互连起来,实现海量数据的统一管理,同时实现对存储设备的集中管理、状态监控以及容量的动态扩展,实质上是一种面向服务的分布式存储系统。存储设备之上是一个统一存储设备管理系统,可以实现存储设备的逻辑虚拟化管理、多链路冗余管理,以及硬件设备的状态监控和故障维护。
(2)基础管理层是云存储最核心的部分,也是云存储中最难以实现的部分。基础管理层通过、分布式文件系统和网格计算等,实现云存储中多个存储设备之间的协同工作,使多个存储设备可以对外提供同一种,并提供更大、更强、更好的数据访问性能。
(3)应用接口层是云存储最灵活多变的部分。不同的云存储运营单位可以根据实际业务类型,开发不同的应用服务接口,提供不同的应用服务。云存储平台面向用户的部分,包括数据存储服务、公共资源使用、数据备份功能等接口服务。
(4)用户访问层主要功能包括访问控制、身份识别与验证、安全隔离等。云存储用户应用程序,可以全新开发和移植现有的应用程序方式实现。云存储服务商均为独立实体,会有个性化的云存储服务提供方式,因此,云存储服务系统的访问方式和访问手段,不同的服务系统会有所差异。 -
请简述云存储的实现前提。
答:主要分为以下六点:宽带网络的发展,Web2.0技术的出现,应用存储的发展,集群技术、网格技术和分布式文件系统,CDN内容分发、技术、数据压缩技术、技术、,存储虚拟化技术、存储网络化管理技术。
(1)宽带网络的发展:真正的云将会是一个多区域分布、遍布全国、甚至于遍布全球的庞大公用系统,使用者需要通过ADSL、DDN等宽带接入设备来连接云存储。只有宽带网络得到充足的发展,使用者才有可能获得足够大的数据传输,实现大量容量数据的传输,真正享受到云存储服务,否则只能是空谈。
(2)Web2.0技术的出现:Web2.0技术的核心是分享。只有通过技术,云存储的使用者才有可能通过PC、手机、移动多媒体等多种设备,实现数据、、图片和视频、音频等内容的和资料共享。
(3)应用存储的发展:云存储不仅仅是存储,更多的是应用。应用存储是一种在存储设备中集成了应用软件功能的存储设备,它不仅具有功能,还具有应用软件功能,可以看作是服务器和存储设备的集合体。应用存储技术的发展可以大量减少云存储中服务器的数量,从而降低系统建设成本,减少系统中由服务器造成单点故障和性能瓶颈,减少数据传输环节,提供系统性能和效率,保证整个系统的高效稳定运行。
(4)集群技术、网格技术和分布式文件系统:云是一个多存储设备、多应用、多服务协同工作的集合体,任何一个单点的存储系统都不是云存储。既然是由多个存储设备构成的,不同存储设备之间就需要通过、和网格计算等技术,实现多个存储设备之间的协同工作,多个存储设备可以对外提供同一种服务,提供更大更强更好的数据访问性能。如果没有这些技术的存在,云存储就不可能真正实现,所谓的云存储只能是一个一个的独立系统,不能形成云状结构。
(5)CDN内容分发、技术、数据压缩技术、技术、。
CDN内容分发系统、数据加密技术保证云存储中的数据不会被未授权的用户所访问,同时,通过各种数据备份和技术保证云存储中的数据不会丢失,保证云存储自身的安全和稳定。如果云存储中的得不到保证,想来也没有人敢用云存储,否则,保存的数据不是很快丢失了,就是全国人民都知道了。
P2P(,对等)又被称为“点对点”。“对等”技术是一种网络新技术,依赖网络中参与者的和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P还是英文Point to Point(点对点)的简称。它是下载术语,意思是在你自己下载的同时,自己的电脑还要继续做主机上传,这种下载方式,人越多速度越快但缺点是对硬盘损伤比较大(在写的同时还要读),还有对内存占用较多,影响整机速度。
数据压缩技术是指在不丢失有用信息的前提下,缩减数据量以减少,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。数据压缩包括和。在和中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。如,如果将“compression”编码为“comp”那么这篇文章可以用较少的表示。一种流行的压缩实例是许多计算机都在使用的ZIP,它不仅仅提供了压缩的功能,而且还作为归档工具(Archiver)使用,能够将许多文件存储到同一个文件中。
技术是一种数据缩减技术,通常用于基于磁盘的备份系统,旨在减少中使用的存储容量。它的工作方式是在某个时间周期内查找不同文件中不同位置的重复可变大小。重复的数据块用指示符取代。高度的数据集(如备份数据)从数据重复删除技术的获益极大;用户可以实现10比1至50比1的缩减比。而且,重复数据删除技术可以允许用户的不同站点之间进行高效,经济的备份数据复制。
数据加密技术是一门历史悠久的技术,指通过和加密将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。数据加密目前仍是对信息进行保护的一种最可靠的办法。它利用对信息进行加密,实现,从而起到保护信息的安全的作用。
(6)存储虚拟化技术、存储网络化管理技术
云存储中的存储设备数量庞大且分布多在不同地域,如何实现不同厂商、不同型号甚至于不同类型(如FC()存储和IP存储)的多台设备之间的逻辑、存储虚拟化管理和多链路管理将会是一个巨大的难题,这个问题得不到解决,存储设备就会是整个云的性能瓶颈,结构上也无法形成一个整体,而且还会带来后期容量和性能扩展难等问题。
云存储中的存储设备数量庞大、分布地域广造成的另外一个问题就是存储设备运营管理问题。虽然这些问题对云存储的使用者来讲根本不需要关心,但对于云存储的运营单位来讲,却必须要通过切实可行和有效的手段来解决集中管理难、状态监控难、故障维护难、人力成本高等问题。因此,云存储必须要具有一个高效的类似与一样的集中管理平台,可实现云存储系统中设有存储设备、服务器和的集中管理和状态监控。 -
云存储服务系统的应用有哪些分类,并列举一些应用,对其进行简单陈述。
答:云存储服务系统的应用主要分为个人级云存储的应用和企业级云存储的应用。
个人级云存储的应用主要有:
(1)网络存储磁盘
如百度网盘、360网盘等,一些小型的云盘,可以在线存储大量的数据,服务商会给每一个用户一定量大小的存储空间,如果用户需要更大的存储空间,更强的编辑功能,则需要支付一定的费用购买服务商提供的收费服务。相应的用户会享受服务商提供的更加强大的功能。我们大多数人都应该用过腾讯等各大网站推出的“网络磁盘”的这项业务。它可以让用户使用Web的方式将自己的文件上传或者下载,从而把自己的重要数据进行存储和备份,这是各服务商可以提供的一种服务。服务商提供两种高级的访问网络存盘的方式,一种是Web页面访问,一种是客户端软件访问。用户向服务商支付费用的多少决定了可以享用的网络磁盘的容量空间的大小。
(2)在线编辑器
经过这几年的快速发展,编辑文档已经不需要在用户的PC端安装文本编辑软件,只要打开网页,就可以通过googledocs对文件进行编辑和修改,并将文档上传到云端。这样就可以不用分地点,只要有网络就可以重新登录googledocs,打开保存在云端的文件进行再次的编辑修改。通过云端的服务管理功能,也能将文档共享、传送。如腾讯旗下的TIM就有一个在线存储编辑文档的功能,这样的功能对于移动办公有了很大的帮助,以及一些其他的在线编辑器,如谷歌的Docs,只要登录相应的账号,就能查看到账户内的文档信息,并且还能分享与发送的相应功能。
(3)在线网络游戏
现在的网络游戏更新换代快,大量的用户需要进行对战游戏,因此游戏开发商需要在全国各地见了很多的服务器,如华东地区,华中地区等,云计算和云存储的应用,可以代替现有的多服务器架构,使所有玩家都能集中在一个游戏服务器组的管理之下。从2004年之后,网络游戏传播速度逐年加快,尤其是被年轻人所追捧,游戏的类型和主题也是越来越多元化,但是要满足数量庞大的玩家同时在线,带宽和单台的服务器的性能的好坏成为了限制的主要原因。我们就可以让所有的玩家在利用云计算的优点建立起来的“超级”服务器群上一起进行游戏。云计算技术的兴起,让所有的玩家可以集中在一个服务器群当中,替代了原来的多服务器结构,从而可以在游戏服务器当中大幅度的提升游戏性能,提供了更多更强的功能。
企业级云存储的应用主要有:
(1)企业空间租赁服务:信息化时代的不断蓬勃发展产生了海量的数据,而这些数据的存储与分析变成了企业的新难,数据的存储需要一定的容量级的存储设备,设备的管理与数据安全的保障又会让企业消耗大量的人力物力财力,目前还有一些小型企业并不能支撑这么一大笔的花费,而云存储的出现顺应了这个信息化时代的发展,企业只需要根据自己公司所产生的数据量,向服务商购买相应容积的存储数量,数据的存储,安全性等问题就交由云计算服务商处理,这样企业才能更加专注于自己企业的发展,而且如果后期想要更换服务商也会比较方便,不需要考虑所有硬件的成本,只需要选择一个更加适合本企业发展的服务商,方便快捷。
(2)企业级远程数据备份及容灾:对于任何一个企业。数据的备份是能决定一个企业存活的事情,大量的数据的备份问题俨然也变成了企业必须放在议事日程上的问题,云存储的远程数据备份及容灾便能为企业提供一个保障,通过远程的备份,当企业内部的设备出现问题的时候,数据在远处备份这,不会受到单点故障的影响而丢失数据,帮助企业快速恢复数据,降低企业的经济损失。企业存储信息量的不断增加,对信息安全性的要求却从来没有降低过。不同的中小型企业不仅可以租赁高性能、海量的云存储空间,还可以让服务运营商通过它们为企业提供备份软件把数据备份来远程容灾,当本地发生严重的灾害的时候,就可以通过这个远程的备份系统进行快速数据恢复,这样就避免了数据的丢失。
(3)视频监控系统:最近的这几年,电信和网通这两家运营商在建立一个在全国广泛分布的不同规模的“全球眼”或“宽视界”云存储系统,在这个系统中嵌入了视频监控管理软件,目的是建立类似语音和数据服务的网络。系统提供者为已经安装了的摄像头和编码器等前端设备提供一个可以连接到云存储服务系统的接入网连接,这样就可以为用户提供实时的视频图像的存储,并通过监管平台对这些视频的监控和回放功能来收取一定的费用。但是由于城市之间的网络带宽的限制,“全球眼”或“宽视界”只能在城市的内部,或者是其中的区或者是县的内部来建造。
(4)集群技术、网格技术和分布式文件系统:把多存储设备、多应用、多服务协同工作整合起来的集合体构成了云存储系统,任何单一的存储系统都不能成为云存储系统。想要使不同的多个存储设备之间协同工作起来,就需要使用集群技术、分布式文件系统、和网格计算等技术手段来把这些存储设备整合起来,以实现多个存储的设备对外提供更强更好更快的数据访问功能。如果没有了这些技术的辅助,所谓的云存储只能是单一的独立的存储系统,不能形成“云”,云存储也就算不上是真正的实现。 -
请简述云存储的特性。
答:可靠性,安全性,管理方便,可扩展性,数据访问。
了关于云采用的历史教训。他表示,到2012年,企业的云采用速度相对较慢,这主要是行业厂商认真采用措施,并增加企业价值。他说:“这就是为什么企业从2013年起迅速采用云计算的原因。现在已经有49%的企业采用了公共云。” -
简述OpenStack主要的组成模块有哪些?
答:OpenStack由几个大模块组成:DASHBOARD、COMPUTE、BLOCK STORAGE、NETWORKING、IMAGE SERVICE、OBJECT STORAGE、IDENTIFY SERVICE等。
2.简述网络服务模块Neutron的功能。
答:Neutron在OpenStack环境中管理所有虚拟网络基础设施(Virtual Networking Infrastructure,VNI),即Neutron将网络、子网、端口和路由器等物理网络基础设施(Physical Networking Infrastructure,PNI)抽象化,之后启动的虚拟主机就可以连接到这个虚拟网络上。 -
简述Nova的功能?
答:COMPUTE计算服务项目名为Nova。是OpenStack不可缺少的核心模块,为用户提供计算平台,主要负责与虚拟化平台的接口对接,如KVM,Xen等接口。Nova作为OpenStack的核心模块主要完成计算,它主要负责虚拟服务的管理。OpenStack计算是IaaS(Infrastructure as a Service,基础设施即服务)的一个主要部分,它与其它组件有着非常紧密的联系。 -
简述Swift和Cinder的区别。
答:OpenStack组件Swift和Cinder的区别主要有三点:
Cinder在OpenStack平台中提供块存储服务。设计它的目的就是为了终端用户使用的,即由Nova模块管理的虚拟机实例模块使用。实现块存储服务一般都会用到与LVM相关的技术或者使用自定义的驱动方式来存储。
(2)Swift在OpenStack中还有另一个名字叫做对象存储项目,它是一个云存储软件,通过一个简单的API你就可以实现很多数据的获取与存储。设计它的目的是为了解决扩展并优化整个数据集的持久性、可用性以及并发性。Swift用于存储那些非结构化的数据是非常理想的,用户根本就不需要担心数据会太多引起问题。
(3)简单来说,Cinder像硬盘块,直接挂载到虚拟机上。Swift像软件,它通过接口存储与获取数据。 -
HDFS上默认的一个数据块(Block)大小是多少?
答:64M。 -
画出HDFS的基础架构图并简单概述其原理。
答:基础架构图:
HDFS是一个典型的主从(Master/Slave)架构。Master主节点(NameNode)也叫元数据节点(MetadataNode),可以看作是分布式文件系统中的管理者,存储文件系统的meta-data。包括文件系统的命名空间(NameSpace),访问控制信息,块当前所在的位置,集群配置信息。从节点也叫数据节点(DataNode),提供真实文件数据的物理支持。Hadoop集群中包含大量的DataNode,DataNode响应客户机的读写请求,还响应MetadataNode对文件块的创建、删除、移动、复制等命令。 -
简要概述MapReduce编程模型。
答:MapReduce编程模型主要由两个抽象类构成,即Mapper和Reducer抽象类,Mapper用以对切分过的原始数据进行处理,Reducer则对Mapper的结果进行汇总,得到最后的输出。在数据格式上,Mapper接受<key, value>格式的数据流,并产生一系列同样是<key, value>形式的输出,这些输出经过相应处理,形成<key, {value list}>的形式的中间结果;之后,由Mapper产生的中间结果再传给Reducer作为输入,把相同key值的{value list}做相应处理,最终生成<key, value>形式的结果数据,再写入HDFS中。 -
列式数据库HBase有哪些特征?
答:HBase是一个类似BigTable的分布式数据库,大部分特性和BigTable一样,是一个稀疏的、长期存储的、多维度的、排序的映射表。 -
搭建Hadoop开发环境,并实现。
答:搭建开发环境:
(1)修改主机名。
(2)修改IP地址,并绑定主机名与IP。
(3)关闭防火墙并关闭防火墙开机启动。
(4)安装jdk并将java添加到环境变量中。
(5)安装hadoop,并分别修改hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml五个配置文件,并将hadoop添加到环境变量。
(6)初始化HDFS(格式化文件系统)。
(7)启动hadoop。
(8)实现(此处以测试程序WordCount为例)。
①先在hadoop用户当前目录下新建文件夹WordCount,在其中建立两个测试文件file1.txt,file2.txt。自行在两个文件中填写内容。
file1.txt文件内容为:
This is the first hadoop test program!
file2.txt文件内容为:
This program is not very difficult, but this program is a common hadoop program!
②在Hadoop文件系统上新建文件夹“input”,并查看其中的内容:
hadoop fs –mkdir /input
hadoop fs –ls /
③将WordCount文件夹中file1.txt、file2.txt文件上传到刚刚创建的“input”文件夹:
hadoop fs –put /home/hadoop/WordCount/*.txt /input
④运行Hadoop的示例程序wordcount,运行命令如下:
hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount intput output
查看输出结果的文件位置和WordCount的结果:
hadoop fs -ls /output
使用如下指令查看WordCount的结果:
hadoop fs –cat /output/part-r-00000
显示信息如下:
This 2
a 1
common 1
difficult,but 1
first 1
hadoop 2
is 3
not 1
program 2
program! 2
test 1
the 1
this 1
very 1
- 请陈述RDD的五大特征。
答:Partition(分区)、Compute函数、Dependencies(依赖)、Partitioner(分区函数)、PreferedLocations(优先位置)。
2.简述Spark的运行模式。
答:Spark的运行模式有很多种,当部署在单机上时,既可以用本地模式运行,也可以用伪分布模式运行;当部署在分布式集群上时,根据集群的实际情况,也有众多的运行模式可供选择。底层的资源调度既可以使用外部资源调度框架,也可以使用Spark内建的Standalone模式。目前常用的外部资源调度框架有Yarn模式和Mesos模式。 - Spark的生态系统包括哪些。
答:Spark的生态系统主要包括以Spark Core为基础的四个核心子框架:处理结构化数据的Spark SQL、对实时数据流进行处理的Spark Streaming、用于图计算的GraphX、机器学习算法库MLlib。 - Storm采用的三进程架构包括什么?
答:Nimbus、Supervisor、Zookeeper
2.Storm中用户每实现一个任务,需要构造哪两类的拓扑组件?
答:Spout和Bolt。
3.简述搭建Storm的开发环境。
答:步骤如下:
(1)安装准备,解压所需工具的压缩包storm.tar.gz;
(2)安装依赖文件,配置JDK;
(3)安装Zookeeper;
(4)安装ZeroMQ;
(5)安装Storm;
(6)启动Storm。 - 什么是CloudSim?
答:CloudSim是澳大利亚墨尔本大学云计算与分布式系统实验室开发的一种通用、可扩展的云计算仿真框架,也是一个云计算仿真工具集,提供了用于描述数据中心、虚拟机、应用、用户、计算资源和管理策略等核心类。 - CloudSim使用的模型场景有哪些?
答:CloudSim可以对云数据中心的很多方面做场景模拟,比如网络、电力、虚拟机的运行情况等等。最主要分为以下两大类,云数据中心能耗模型以及云数据中心的经济模型。 - 简述CloudSim仿真的主要步骤。
答:(1)初始化CloudSim程序包;
(2)创建数据中心;
(3)创建数据中心(用户)代理;
(4)创建虚拟机和云事务,并将其传递给数据中心代理;
(5)创建云任务、开始仿真;
(6)结束仿真、统计结果。
4.使用CloudSim完成以下数据中心的仿真。仿真两个数据中心,每个数据中心分别有10台物理机(5台双核,5台4核)。两个数据中心总共有100台虚拟机,每台虚拟机的运算能力(100-500)不相同。这两个数据中心总共需要处理1000个外部负载(负载能力10000-100000)任务。
答:
package org.cloudbus.cloudsim.examples;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import org.cloudbus.cloudsim.Cloudlet;
import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
import org.cloudbus.cloudsim.Datacenter;
import org.cloudbus.cloudsim.DatacenterBroker;
import org.cloudbus.cloudsim.DatacenterCharacteristics;
import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.UtilizationModel;
import org.cloudbus.cloudsim.UtilizationModelFull;
import org.cloudbus.cloudsim.Vm;
import org.cloudbus.cloudsim.VmAllocationPolicySimple;
import org.cloudbus.cloudsim.VmSchedulerTimeShared;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
/**
* An example showing how to create
* scalable simulations.
*/
public class CloudSimExercise {
/** The cloudlet list. */
private static List<Cloudlet> cloudletList;
/** The vmlist. */
private static List<Vm> vmlist;
private static List<Vm> createVM(int userId, int mips[]) {
//Creates a container to store VMs. This list is passed to the broker later
LinkedList<Vm> list = new LinkedList<Vm>();
//VM Parameters
long size = 10000; //image size (MB)
int ram = 512; //vm memory (MB)
//int mips = 1000;
long bw = 1000;
int pesNumber = 1; //number of cpus
String vmm = "Xen"; //VMM name
//create VMs
Vm[] vm = new Vm[mips.length];
for(int i=0;i<mips.length;i++){
vm[i] = new Vm(i, userId, mips[i], pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());
//for creating a VM with a space shared scheduling policy for cloudlets:
//vm[i] = Vm(i, userId, mips, pesNumber, ram, bw, size, priority, vmm, new CloudletSchedulerSpaceShared());
list.add(vm[i]);
}
return list;
}
private static List<Cloudlet> createCloudlet(int userId, long cloudlets[]){
// Creates a container to store Cloudlets
LinkedList<Cloudlet> list = new LinkedList<Cloudlet>();
//cloudlet parameters
//long length = 1000;
long fileSize = 300;
long outputSize = 300;
int pesNumber = 1;
UtilizationModel utilizationModel = new UtilizationModelFull();
Cloudlet[] cloudlet = new Cloudlet[cloudlets.length];
for(int i=0;i<cloudlets.length;i++){
cloudlet[i] = new Cloudlet(i, cloudlets[i], pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
// setting the owner of these Cloudlets
cloudlet[i].setUserId(userId);
list.add(cloudlet[i]);
}
return list;
}
// STATIC METHODS ///
/**
* Creates main() to run this example
*/
public static void main(String[] args) {
Log.printLine("Starting CloudSimExercise...");
try {
// First step: Initialize the CloudSim package. It should be called
// before creating any entities.
int num_user = 1; // number of grid users
Calendar calendar = Calendar.getInstance();
boolean trace_flag = false; // mean trace events
// Initialize the CloudSim library
CloudSim.init(num_user, calendar, trace_flag);
// Second step: Create Datacenters
//Datacenters are the resource providers in CloudSim. We need at list one of them to run a CloudSim simulation
@SuppressWarnings("unused")
Datacenter datacenter0 = createDatacenter("Datacenter_0");
@SuppressWarnings("unused")
Datacenter datacenter1 = createDatacenter("Datacenter_1");
//Third step: Create Broker
DatacenterBroker broker = createBroker();
int brokerId = broker.getId();
//Fourth step: Create VMs and Cloudlets and send them to broker
Random rand = new Random();
int[] mips = new int[100];
for (int i = 0; i < mips.length; i++) {
mips[i] = rand.nextInt(401) + 100;
}
vmlist = createVM(brokerId,mips); //creating 20 vms
long[] len = new long[1000];
for (int i = 0; i < len.length; i++) {
len[i] = rand.nextInt(90000) + 10000;
}
cloudletList = createCloudlet(brokerId,len); // creating 40 cloudlets
broker.submitVmList(vmlist);
broker.submitCloudletList(cloudletList);
// Fifth step: Starts the simulation
CloudSim.startSimulation();
// Final step: Print results when simulation is over
List<Cloudlet> newList = broker.getCloudletReceivedList();
CloudSim.stopSimulation();
printCloudletList(newList);
Log.printLine("CloudSimExercise finished!");
}
catch (Exception e)
{
e.printStackTrace();
Log.printLine("The simulation has been terminated due to an unexpected error");
}
}
private static Datacenter createDatacenter(String name){
// Here are the steps needed to create a PowerDatacenter:
// 1. We need to create a list to store one or more
// Machines
List<Host> hostList = new ArrayList<Host>();
// 2. A Machine contains one or more PEs or CPUs/Cores. Therefore, should
// create a list to store these PEs before creating
// a Machine.
List<Pe> peList1 = new ArrayList<Pe>();
int mips = 1000;
// 3. Create PEs and add these into the list.
//for a quad-core machine, a list of 4 PEs is required:
peList1.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store Pe id and MIPS Rating
peList1.add(new Pe(1, new PeProvisionerSimple(mips)));
peList1.add(new Pe(2, new PeProvisionerSimple(mips)));
peList1.add(new Pe(3, new PeProvisionerSimple(mips)));
//Another list, for a dual-core machine
List<Pe> peList2 = new ArrayList<Pe>();
peList2.add(new Pe(0, new PeProvisionerSimple(mips)));
peList2.add(new Pe(1, new PeProvisionerSimple(mips)));
//4. Create Hosts with its id and list of PEs and add them to the list of machines
int hostId=0;
int ram = 16384; //host memory (MB)
long storage = 1000000; //host storage
int bw = 10000;
for ( int i = 0; i < 5; i++) {
hostList.add(
new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList1,
new VmSchedulerTimeShared(peList1)
)
);
hostId++;
}
for ( int i = 0; i < 5; i++) {
hostList.add(
new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList2,
new VmSchedulerTimeShared(peList2)
)
);
}
String arch = "x86"; // system architecture
String os = "Linux"; // operating system
String vmm = "Xen";
double time_zone = 10.0; // time zone this resource located
double cost = 3.0; // the cost of using processing in this resource
double costPerMem = 0.05; // the cost of using memory in this resource
double costPerStorage = 0.1; // the cost of using storage in this resource
double costPerBw = 0.1; // the cost of using bw in this resource
LinkedList<Storage> storageList = new LinkedList<Storage>(); //we are not adding SAN devices by now
DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw);
// 6. Finally, we need to create a PowerDatacenter object.
Datacenter datacenter = null;
try {
datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
} catch (Exception e) {
e.printStackTrace();
}
return datacenter;
}
//We strongly encourage users to develop their own broker policies, to submit vms and cloudlets according
//to the specific rules of the simulated scenario
private static DatacenterBroker createBroker(){
DatacenterBroker broker = null;
try {
broker = new DatacenterBroker("Broker");
} catch (Exception e) {
e.printStackTrace();
return null;
}
return broker;
}
/**
* Prints the Cloudlet objects
* @param list list of Cloudlets
*/
private static void printCloudletList(List<Cloudlet> list) {
int size = list.size();
Cloudlet cloudlet;
String indent = " ";
Log.printLine();
Log.printLine("========== OUTPUT ==========");
Log.printLine("Cloudlet ID" + indent + "STATUS" + indent +
"Data center ID" + indent + "VM ID" + indent + indent + "Time" + indent + "Start Time" + indent + "Finish Time");
DecimalFormat dft = new DecimalFormat("###.##");
for (int i = 0; i < size; i++) {
cloudlet = list.get(i);
Log.print(indent + cloudlet.getCloudletId() + indent + indent);
if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS){
Log.print("SUCCESS");
Log.printLine( indent + indent + cloudlet.getResourceId() + indent + indent + indent + cloudlet.getVmId() +
indent + indent + indent + dft.format(cloudlet.getActualCPUTime()) +
indent + indent + dft.format(cloudlet.getExecStartTime())+ indent + indent + indent + dft.format(cloudlet.getFinishTime()));
}
}
}
}