一、虚拟化

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

二、云计算与虚拟化的关系

虚拟化是云计算的重要支撑技术。云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。通过虚拟化,可以将应用程序和数据在不同层次以不同的方式展现给客户,为云计算的使用者和开发者提供便利。云计算的虚拟化过程为组织带来了灵活性,从而改善IT运维和减少成本支出。

云计算是通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。对于云计算来说,虚拟化是必不可少的。

云计算将计算当做是公共资源,而非具体的产品和技术。早在20世纪70年代,大型计算机就一直在同时运行多个操作系统实例,每个实例也彼此独立。不过直到当今,软硬件方面的进步才使得虚拟化技术有可能出现在基于行业标准的大众化x86服务器上。

在云计算环境下,软件技术、架构将发生显著变化。首先,所开发的软件必须与云相适应,能够与虚拟化为核心的云平台有机结合,适应运算能力、存储能力的动态变化;二是要能够满足大量用户的使用,包括数据存储结构、处理能力;三是要互联网化,基于互联网提供软件的应用;四是安全性要求更高,可以抗攻击,并能保护私有信息;五是可工作于移动终端、手机、网络计算机等各种环境。

此外,在云计算环境下,由于软件开发工作的变化,也会对软件测试带来影响和变化。云计算将各种IT资源以服务的方式通过互联网交付给用户。不过,虚拟化本身并不能给用户提供自服务层。

有专家认为,云计算模式可以让终端自行供给自己的服务器和应用程序,甚至是虚拟化资源,而对于企业来说,大量的计算资源消耗也使得系统管理员倾向于提供虚拟机。

总的来说,虚拟化和云计算并不是相互捆绑的技术,而是可以优势互补为用户提供更优质的服务。在云计算的部署方案中,虚拟化技术可以使其IT资源应用更加灵活。而在虚拟化的应用过程中,云计算也提供了按需所取的资源和服务。在一些特定场景中,云计算和虚拟化无法剥离,只有相互搭配才能更好地解决客户需求。

三、大数据技术 

大数据技术是以数据为本质的新一代革命性的信息技术,在数据挖潜过程中,能够带动理念、模式、技术及应用实践的创新。本书系统性地介绍了大数据的概念、发展历程、市场价值、大数据相关技术,以及大数据对中国信息化建设、智慧城市、广告、媒体等领域的核心支撑作用,并对对数据科学理论做了初步探索。

  • 大数据基础阶段

大数据基础阶段需掌握的技术有:Linux、Docker、KVM、MySQL基础、Oracle基础、MongoDB、redis以及hadoopmapreduce hdfs yarn等。

  • 大数据存储阶段

大数据存储阶段需掌握的技术有:hbase、hive、sqoop等。

  • 大数据架构设计阶段

大数据架构设计阶段需掌握的技术有:Flume分布式、Zookeeper、Kafka等。

  • 大数据实时计算阶段

大数据实时计算阶段需掌握的技术有:Mahout、Spark、storm。

  • 大数据数据采集阶段

大数据数据采集阶段需掌握的技术有:Python、Scala。

  • 大数据商业实战阶段

大数据商业实战阶段需掌握的技术有:实操企业大数据处理业务场景,分析需求、解决方案实施,综合技术实战应用。

四、云计算平台OpenStack

OpenStack实际上是一个大的调度框架,作为一种中间层存在,对不同服务器的虚拟化进行管理、调度和对接。这个框架能够为从单节点的中小企业到在全球都有数据中心的大公司提供IT基础设施。

OpenStack由美国国家航空航天局和Rackspace合作研发,以Apache许可授权,并且是一个自由软件和开放源代码项目,任何人都可以通过Openstack自行建立和提供云端运算服务。

从架构上看,OpenStack不是单纯一个软件,而是由以下五个相对独立的组件构成:虚拟机计算或实例启动控制设备Nova;虚拟机镜像检索及管理系统Glance,支持内置冗余及容错的对象存储机制Swift;负责用户身份服务与资源管理的Keystone;以及基于Django的仪表板接口与图形化管理前端Horizon.

OpenStack推出旨在打造易于部署、功能丰富且易于扩展的云计算平台,其首要任务是简化云的部署过程并为其带来良好的可扩展性。从组件构成来看OpenStack有许多子项目,用于对云计算平台中的各种资源(如计算能力、存储、网络)提供敏捷管理,并提供对相应虚拟化技术的支持。

5.Hadoop平台与OpenStack的区别

  • openstack仿照的Amazon的云,hadoop仿照的是Google的云。openstack注重的是虚拟化/虚拟机及其配套的服务,hadoop注重的是海量的数据分析和处理。
  • OpenStack 主要目的是做一整套的云计算基础构架。包括 云计算(Compute), 网络(Network),对象存贮(Object Store),镜像文件存储 (Image),身份认证(Authentication),BlockStorage 以及 前端UI 。OpenStack的每个模块都对外提供API,可以独立供云用户调用,在OpenStack内部,每个模块之间的相互调用也是用这些API.而 Hadoop 是一个分布式数据库。举个例子:OpenStack 中 Object Store 模块可以选择用Hadoop来支持。如果把 Openstack 比作WIndows的话,Hadoop 相当于Sql Server。
  • openstack是管理虚拟机的,比如xen,kvm等。它所谓的云就是一堆的虚拟机。hadoop是负责分布式计算和分布式存储。就是把一个执行任务分开,放到不同的节点(物理机)去跑,最后汇总。
  • OpenStack是IaaS(基础设施即服务)‎虚拟机管理软件,让任何人都可以自行建立和提供云端运算服务。而hadoop是一个分布式文件系统+分布式计算平台的开源方案,侧重于hdfs云存储与mapreduce云数据分析等方面
  • OpenStack主要做资源的虚拟化,Hadoop主要用来做超大数据处理,还可以做数据挖掘
  • Openstack是把大机器虚拟成很多小机器从而达到大的分成小的来用,大大提高资源使用率。Hadoop是把小机器合起来用,用于解决单台大机器无法解决的计算和存储等问题。

   六、Hadoop实现HDFS和MapReduce

为了处理大数据,google提出了大数据技术,MapReduce,BigTable和GFS。

这个技术给大数据处理带来了巨大的变革。

  • 降低了大数据处理的成本,用PC机就可以处理大数据,而不需要采用大型机和高端设备进行存储。
  • 将硬件故障视为常态的基础上,采用了软件容错的方法,保证软件的可靠性。
  • 简化并行分布式计算,不需要控制节点的同步和数据的交换,降低了大数据处理的门槛。

 虽然google的技术非常好,但是google并没有将技术开源。不过值得庆幸的是,模仿google大数据的开源实现,Hadoop的出现了。

  •  Hadoop是什么
  1. Hadoop主要完成两件事,分布式存储和分布式计算。
  2. Hadoop主要由两个核心部分组成: 

        (1)HDFS:分布式文件系统,用来存储海量数据。

        (2)MapReduce:并行处理框架,实现任务分解和调度。

 

  • Hadoop能做什么

Hadoop能完成大数据的存储,处理,分析,统计等业务,在数据挖掘等方面应用广泛。

 

  • Hadoop的优势
  1. 高扩展性。简单的增加硬件就可以达到效果的提高。
  2. 低成本,用PC机就能做到。
  3. Hadoop具有成熟的生态圈,比如Hive,Hbase,zookeeper等,让Hadoop用起来更方便。

 说了这么多,我们还没了解Hadoop的机制。

我们首先就需要了解Hadoop的两个核心组成:HDFS和MapReduce。

  •  HDFS是什么呢?

前面说过,HDFS是一个分布式文件系统,用来存储和读取数据的。

文件系统都有最小处理单元,而HDFS的处理单元是块。HDFS保存的文件被分成块进行存储,默认的块大小是64MB。

并且在HDFS中有两类节点:

1.NameNode和DataNode。

NameNode:

NameNode是管理节点,存放文件元数据。也就是存放着文件和数据块的映射表,数据块和数据节点的映射表。

也就是说,通过NameNode,我们就可以找到文件存放的地方,找到存放的数据。

DataNode:

DataNode是工作节点,用来存放数据块,也就是文件实际存储的地方。

这么说有点抽象,让我们来看图:

 

云计算虚拟化面试题_Hadoop

客户端向NameNode发起读取元数据的消息,NameNode就会查询它的Block Map,找到对应的数据节点。然后客户端就可以去对应的数据节点中找到数据块,拼接成文件就可以了。这就是读写的流程。

作为分布式应用,为了达到软件的可靠性,如图上所示,每个数据块都有三个副本,并且分布在两个机架上。

这样一来,如果某个数据块坏了,能够从别的数据块中读取,而当如果一个机架都坏了,还可以从另一个机架上读取,从而实现高可靠。

我们从上图还可以看到,因为数据块具有多个副本,NameNode要知道那些节点是存活的吧,他们之间的联系是依靠心跳检测来实现的。这也是很多分布式应用使用的方法了。

我们还可以看到,NameNode也有一个Secondary NameNode,万一NameNode出故障了,Secondary就会成替补,保证了软件的可靠性。

 

HDFS具有什么特点呢?

1.数据冗余,软件容错很高。

2.流失数据访问,也就是HDFS一次写入,多次读写,并且没办法进行修改,只能删除之后重新创建

3.适合存储大文件。如果是小文件,而且是很多小文件,连一个块都装不满,并且还需要很多块,就会极大浪费空间。

 

HDFS的适用性和局限性:

1.数据批量读写,吞吐量高。

2.不适合交互式应用,延迟较高。

3.适合一次写入多次读取,顺序读取。

4.不支持多用户并发读写文件。

 

了解完了HDFS,就轮到MapReduce了。

 

  • MapReduce是什么:

MapReduce是并行处理框架,实现任务分解和调度。

其实原理说通俗一点就是分而治之的思想,将一个大任务分解成多个小任务(map),小任务执行完了之后,合并计算结果(reduce)。

 

云计算虚拟化面试题_虚拟化_02

也就是说,JobTracker拿到job之后,会把job分成很多个maptask和reducetask,交给他们执行。 MapTask、ReduceTask函数的输入、输出都是<key,value>的形式。HDFS存储的输入数据经过解析后,以键值对的形式,输入到MapReduce()函数中进行处理,输出一系列键值对作为中间结果,在Reduce阶段,对拥有同样Key值的中间数据进行合并形成最后结果。

首先我们需要先知道几个小概念:

1.job  2.task  3.jobTracker  4.taskTracker

job:在Hadoop内部,用Job来表示运行的MapReduce程序所需要用到的所有jar文件和类的集合,>这些文件最终都被整合到一个jar文件中,将此jar文件提交给JobTraker,MapReduce程序就会执行。

task:job会分成多个task。分为MapTask和ReduceTask。

jobTracker:管理节点。将job分解为多个map任务和reduce任务。

作用:
1.作业调度
2.分配任务,监控任务执行进度
3.监控TaskTracker状态

taskTracker:任务节点。一般和dataNode为同一个节点,这样计算可以跟着数据走,开销最小化。

作用:

1.执行任务

2.汇报任务状态

在MapReduce中,也有容错机制。

1.重复执行。一个job最多被执行4次。

2.推测执行。因为Map全部算完之后才会执行Reduce,如果其中一个Map很慢,就会多开一个task来完成同样的工作,哪个执行的快用哪个。

 

这样,我们就大致了解了Hadoop其中的原理,主要了解HDFS文件系统的存储过程和MapReduce的作业调度分配过程。