大学代写论文网专业提供代写毕业论文、代写本科论文服务
您现在的位置:首页 > 计算机论文 > 软件工程论文 >
Docker技术的相关知识背景介绍
发布时间:2019-10-15


  本篇文章目录导航:

  【题目】探讨Docker技术的Hadoop性能优化方法??
  【第一章】Docker技术的Hadoop性能优化研究绪论
  【第二章】Docker技术的相关知识背景介绍
  【3.1-3.2】系统环境搭建和内存配置分析
  【3.3-3.5】基于Docker容器的Hadoop架构平台搭建
  【第五章】YARN性能优化研究
  【第六章】异构系统下数据安全问题
  【第七章】Docker技术中Hadoop性能的优化结论与参考文献

第二章相关知识背景介绍

  2.1Hadoop集群技术介绍

  2.1.1Hadoop平台简介

  ApacheHadoop是一个开源框架[27],支持在商用硬件集群上处理大量的数据集。ApacheHadoop由MapReduce,HDFS,YARN和一些相关的项目组成。

  Hadoop诞生于2002年的Apache公司,它是Apache基金会其中的一个开源项目[16].传统集群架构与分布式集群架构相比具有低耦合性、可扩展性、高稳定性、高灵活性以及更大的数据处理能力的特点。同时,在企业发展中,数据的处理级逐渐变大,从上世纪的GB级逐渐升至为TB级直至PB级。因此,大数据处理的需求规模越来越大,要求越来越高。所以,在海量的数据处理面前,传统的集群架构与Hadoop相比,就显得相形见绌。

  Hadoop体系结构如下图2.1所示:

  ApacheHadoop的诞生是为了提高使用率并解决大数据等重大问题[28].

  Hadoop由DougCutting创建,是ApacheLucene的创建者,在文本搜索库被广泛使用。

  Hadoop是一个开源的网络搜索引擎,也是Lucene项目的重要组成部分。同时ApacheHadoop是一个分布式框架,是研究和实现应用程序的分布式处理的一个很好的解决方案。大数据和高需求驱使Hadoop系统的规模迅速增长[29],并且变得越来越可扩展和异构。当Hadoop系统规模不断扩大时,存储节点和网络状况之间的可用带宽,处理器速度、磁盘容量、生命周期、潜在弱点、安全级别、故障率以及故障模式等异构功能也将不断增长。为了革命,Google发明了一种处理数据的新方法,俗称MapReduce.过了一年后,Google发布了MapReduce框架白皮书,DougCutting和MikeCafarella受白皮书的启发,从而创建了Hadoop,将这些概念应用于支持Nutch搜索引擎项目的开源软件框架。考虑到最初的案例研究,Hadoop的设计使用了更简单的存储基础设施。

  Hadoop能有效地处理大量任务,用户可以将多台商用计算机连接到独立的CPU,作为一个独立的功能分布式系统,而且拥有一组特定的集群机器,并行读取数据集并提供中间数据,从而获得所需的输出。

  Hadoop在一组计算机上运行代码,并执行以下任务:

  (1)数据最初分为文件和目录。文件分为128M和64M一致大小的块。

  (2)然后这些文件分布在各个集群节点上,以便进一步处理数据。

  (3)作业跟踪器在单个节点上启动其调度程序。

  (4)一旦所有的节点完成调度,然后输出返回。

  Hadoop的优点有:(1)支持超大文件(2)检测和快速应对硬件故障(3)流式数据访问(4)简化的一致性模型(5)高容错性(6)商用硬件。当然Hadoop也存在一些不足之处,主要包括:不能做到低延迟,不适合大量的小文件存储,不适合多用户写入文件和修改文件。

  2.1.2HDFS

  作为数据安全策略,数据备份是确保数据安全的重要手段。但是,现有的数据备份解决方案通常使用昂贵的数据备份服务器来存储数据,这极大地增加了备份成本并降低了系统性能。频繁更换计算机硬件使许多计算机设备成为可用的空闲资源。云存储技术的出现为这些空闲资源提供了空间,并为数据备份提供了新的思路。在众多云存储软件中,Hadoop分布式文件系统(HDFS)使用这些空闲资源构建分布式集群,以解决数据存储和安全问题。

  它具有高度容错能力,具有大型数据集并提供轻松访问,是使用设计分布式文件系统Hadoop文件系统开发的主要目的。这些文件按系统顺序存储在多台计算机上。存储这些存储的文件以消除所有可能的数据丢失并帮助应用程序用于并行处理,该文件系统目的是存储大量文件流数据。

  HDFS基于Google文件系统GFS[30],完全用Java编程语言编写。

  Google只提供了一个白皮书,没有任何实施,大约90%的GFS架构已经以HDFS的形式实现。

  HDFS最初是作为ApacheNutch网络搜索引擎项目的存储基础架构而开发的[31].其硬件故障是不可避免的,一个HDFS实例可以由数百或数千个服务器机器组成,每个服务器机器都使用文件系统数据的存储部分。

  HDFS有大量的组件,并且每个组件都有较大的失败概率,这就解释了HDFS的某些组件总是不起作用的。因此故障检测快速和自动恢复是HDFS架构的核心目标[32]

  .在HDFS上运行的应用程序需要流式访问每个单独的数据集[33].它们不适用于在常规文件系统上运行的通用应用程序。HDFS的设计更多的是批处理[34],而不是最终用户的交互式使用。

  数据访问的低延迟不是重点,重点是数据访问的高数据流吞吐量。

  JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。

  Hadoop中的分布式存储由HDFS实现。它主要由NameNode节点和N个DataNode数据节点组成。

  NameNode节点和DataNode节点都可以在廉价的PC上部署和运行,以便创建文件和添加,删除,检查和修改文件内容。然后HDFS在底部剪切文件并将其封装到块大小为64MB的块中。然后,这些64MB块和块副本由NameNode存储在不同的DataNode节点上,这提高了Hadoop的容错能力。因此,NameNode管理和控制所有DataNode节点,记录分成块的文件数,存储块的位置以及DataNode节点的状态信息。

  Hadoop中的并行计算主要由Map/Reduce中单独的Master节点的JobTracker和集群中的大量SlaveTaskTracker完成。作为控制中心,JobTracker可以在任何PC上运行和管理TaskTracker.

  JobTrcker向空闲的TaskTracker发出Map和Reduce任务指令以供执行。

  TaskTracker必须在DataNode节点上运行才能执行任务。

  TaskTracker与JobTracker的关系图如图2.2所示:

  在HDFS上运行的应用程序有大量的数据集。

  HDFS中的一个典型文件[35],大小从千兆字节到兆兆字节。因此,HDFS是以支持大文件的方式构建的[36].它提供了高集合的数据带宽,并可以在一个集群中测量数百个节点,它应该同时访问数以万计的文件。

  HDFS应用程序的访问模式是一次写入多次读取文件,之后创建写入和关闭的文件不需要更改。这个假设有助于简化数据一致性问题,并使本文获得高吞吐量的数据访问[37].

  MapReduce应用程序[38]或Web爬虫应用程序完全适用于此模型[39].未来将实施新的创新思想,以支持未来对文件的附加写入。“移动计算比移动数据便宜”,在应用程序运行的数据附近执行时,应用程序请求的计算效率会更高。这让网络拥塞的最小化并增加了系统的整体吞吐量。假设将计算迁移到更近的数据位置,而不是将数据移动到正在运行的应用程序,则意味着更好。

  HDFS为应用程序提供接口[40],以便在数据所在的位置紧密地移动。

  HDFS文件读取过程如图2.3所示:

  (1)客户端(Client)HDFS向NameNode节点发送远程调用的(RPC)请求。

  (2)系统获取到请求信息,然后根据请求信息去查询Block的列表,若无,则返回相关结果;若有则返回该Block的NataNode的地址信。

  (3)客户端(Client)会根据距离的远近来选择较近的数据节点来直接读取有关的Block的信息。

  (4)当读取完Block的数据信息后,系统关闭当前的数据节点的数据流,断开连接,并为下一个读取流做好准备。

  (5)每当读完一个数据节点的数据后,客户端都要用Checksum验证读取是否正确,若出现错误,则告知。

  HDFS的文件写入过程如图2.4所示:

  (1)客户端(Client)向NameNode节点发送远程调用(RPC)请求。

  (2)NameNode节点在收到RPC请求后,先检查发送请求的请求者是否有操作权限和文件是否存在。若检查结果不符合要求没有通过,则抛异常。

  (3)在文件写入前,NameNode会先将文件分为许多的大小为64MB的Block,并封装成包(Packet)通过数据队列(DataQueue)向数据节点发送写入数据请求。

  (4)客户端有序的往DataNode节点中进行数据写入,当写入最后一个数据后,DataNode会向NameNode发送一个ACKPacket.

  NameNode收到ACKPacket后,会将这些发送包(Packet)一一删除。

  2.1.3MapReduce模型

  MapReduce是一个用于在集群上以并行分布式算法处理和生成大数据集的编程模型和相关的实现。它受到函数式编程中通常使用的map和reduce函数的启发[41],尽管它们在MapReduce框架中的用途与其原始形式不同。

  MapReduce框架的主要贡献并不是实际的Map和Reduce函数,而是可扩展性和容错性。通过优化执行引擎来实现各种应用。因此,MapReduce的单线程实现通常不会比传统的方式实现更快,通常只能在多线程实现中看到它的优势。只有当优化的分布式操作(降低了网络通信成本)和MapReduce框架的容错特性发挥作用时,这种模型的使用才是有益的。优化通信成本对于一个好的MapReduce算法至关重要。

  MapReduce库已经用许多编程语言编写,具有不同级别的优化。

  MapReduce这个名字最初是指Google的专有技术,但后来被普遍化了。到2014年,谷歌已经不再使用MapReduce作为其主要的大数据处理模型,ApacheMahout的开发已经转向更强大,更少的面向磁盘的机制,这些机制融合了Map和Reduce功能。

  Mapreduce主要是Hadoop的一个数据处理组件,是处理大量数据集的编程模型。它包含数据处理的任务,并在整个节点上分配特定的任务。

  它由两个阶段组成:

  Map阶段和Reduce阶段。

  Map将典型的数据集转换成另一组数据,其中各个元素被分成键/值对。

  Reduce任务将来自Map的输出文件视为输入,然后将数据元组集成到一组较小的元组中,总是在Map作业完成后执行它。

  Map/Reduce采用分布式与并行化计算的编程模型。与传统模型在处理大规模数据集相比,Map/Reduce利用分布式和并行化方法把整个数据集分而治之,在数据处理之前,Map/Reduce就已经有规律的在各个节点上分布了数据集。其主要的核心思想是自动将分割好的即将执行的程序分解为Map(映射)和Reduce(化简),其对应的就是Map函数与Reduce函数。

  在Map函数与Reduce函数中,用户需要自己定义函数功能与规则,把输入的<key,value>

  对转换为与之对应的<key,value>

  对,然后输出与之对应的<key,value>

  对。执行流程图如图2.5所示:

  2.1.4YARNHadoop

  YARN是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

  ApplicationMaster管理一个在YARN内运行的应用程序的每个实例。

  ApplicationMaster负责协调来自ResourceManager的资源,并通过NodeManager监视容器的执行和资源使用(CPU、内存等的资源分配)。从YARN角度讲,ApplicationMaster是用户代码,因此存在潜在的安全问题。

  YARN假设ApplicationMaster存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。

  NodeManager管理一个YARN集群中的每个节点。

  NodeManager提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。

  MRv1通过插槽管理Map和Reduce任务的执行,而NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。

  YARN继续使用HDFS层。它的主要NameNode用于元数据服务,而DataNode用于分散在一个集群中的复制存储服务。

  要使用一个YARN集群,首先需要来自包含一个应用程序的客户的请求.

  ResourceManager协商一个容器的必要资源,启动一个ApplicationMaster来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster监视容器直到完成。当应用程序完成时,ApplicationMaster从ResourceManager注销其容器,执行周期就完成了。

  每个应用程序的ApplicationMaster实际上是一个特定于框架的库,并负责从ResourceManager协商资源,并与NodeManager一起工作来执行和监视这些任务。

  YARN是Hadoop2.0中添加的一个新组件,负责提供集群资源管理。重要的资源是内存和CPU,YARN考虑到在集群中的每台机器上的所有可用计算资源。基于可用资源,YARN将处理来自运行在集群中的应用程序的资源请求,然后为每个应用程序提供处理能力应用。

  2.2Docker容器技术

  2.2.1Docker容器技术简介

  Docker是开发和运行应用程序的开放平台。由于其简单高效的操作特性,Docker正在获得广大用户的青睐。容器技术[42]

  预计将成为缩短软件开发周期的基础。容器和虚拟机具有类似的资源隔离和分配优势,但具有不同的体系结构方法,与虚拟机相比,它允许容器更加便携和高效。在不同的容器技术(例如Docker、LxC、runC)中,由于Docker易于部署和可扩展,Docker已成为主要技术之一。

  通过利用Docker的方法来快速地运行、测试和部署代码,用户可以缩短编写代码和在生产环境中运行代码之间的延迟[43].

  Docker是一个开源项目[44],它允许应用程序在一个完整的独立环境中运行,是不需要额外开销的、完全独立运行的操作系统。在一台机器上运行的容器都共享相同的操作系统内核立即开始,并更有效地使用记忆。典型的Docker容器体系结构如图2.6所示。

  2.2.2Docker的组成

  Docker由三大核心元素组成:

  DockerImage(Docker镜像)、DockerRepository(Docker仓库)、DockerContainer(Docker容器)。

  Docker镜像构成了Docker容器的基础,从这些容器开始形成一切。它们与在服务器或台式计算机上运行应用程序的默认操作系统磁盘镜像非常相似。这些镜像(例如Ubuntu基础)允许跨系统的无缝可移植性。为运行应用程序所需的一切构建了坚实,一致和可靠的基础。

  当所有东西都是独立的,消除了系统级更新或修改的风险,容器就会免受外部风险的影响,从而避免了依赖性随着更多的图层(工具、应用程序等)被添加到基础之上,可以通过提交这些更改来形成新的镜像。

  Docker非常受欢迎,因为Docker容器技术具有以下特点:

  (1)快速部署:通常可以成功发布产品。开发人员需要关注很多事情,从操作系统到中间件再到应用程序,这些都很难管理。这个问题在软件行业很常见,需要直接面对。

  Docker简化了这些任务,例如Web应用程序,后台应用程序,数据库应用程序,Hadoop集群等大数据应用程序,消息队列等,它们可以打包成单个映像然后快速部署。

  (2)软件管理:亚马逊的AWS之所以成功,是因为它允许开发人员将应用程序转移到云端并解决硬件管理问题。但是,软件配置和管理相关的问题仍然存在。Docker的出现是帮助软件开发人员用新的软件管理方法解决这个问题的正确方法。

  (3)虚拟化技术的变化:云计算使用标准硬件来降低成本,并使用虚拟化来满足用户的资源需求并确保可用性和隔离。但是,无论是KVM还是Xen,都存在一定的资源浪费,因为用户需要高效的操作环境而不是操作系统,虚拟主机浪费资源而且难以管理,轻量级LXC更灵活,速度更快。

  (4)更高的可移植性:LXC已经存在于Linux2.6内核中,但其设计最初并未考虑用于云计算,缺乏标准化的描述手段和容器的可移植性,并决定构建它。环境难以分配和标准化管理。Docker对此问题采取了实质性的创新方法。

  2.2.3Docker容器与服务器虚拟化的区别

  两种虚拟化技术虚拟机(VM)和Docker技术,这两种技术都有自己的专业和优势。了解它们的功能和限制可以帮助用户改善运行在这些虚拟化环境中的应用程序的性能。最近的流行Docker技术与传统的虚拟机不同。第一,VM管理程序管理不同的资源虚拟机处于分布式模式,每个虚拟机都是分配了它可以使用的资源的最大限制。与虚拟机不同,Docker虚拟化技术执行集中式不同容器之间的资源管理。像处理单元,内存和页面缓存资源在所有容器之间共享。没有完成开始的资源分配并且所有容器竞争共享运行时资源,结果是资源争夺并且在性能干扰变得更加严重时,使用Docker容器而不是使用VM.因此,它更多紧急和有必要有一个有效的时间表算法启动Docker容器以缓解这样的性能干扰和改善资源Docker容器环境中的利用率。第二,每个虚拟机都有自己的虚拟机镜像,由guest虚拟机组成操作系统和库。这种类型的虚拟化会导致更好的安全性和隔离性,但会导致启动时间更多。因此,一个偶然的做法是在所有的虚拟机上运行开始。另一方面,Docker容器操作系统是轻量级,它们可以在需要的时候启动。这给了本文一个很好的机会动态调度并启动Docker容器。

  Docker容器基于容器的虚拟化技术与虚拟化技术的适用范围稍有不同,创建一个与虚拟机相似的独立环境(容器)(VM),但没有虚拟硬件仿真。一个容器在Unix和Linux中是一种非常古老的技术,但现在它被重新引入由于其与虚拟机相比的优势,因此处于商业级别。

  由于容器是在操作系统内核之上的用户空间中创建的,因此可以将容器化视为OS级别的虚拟化。多个容器可以在单个主机上的多个用户空间中创建,但资源比虚拟机少。

  Docker容器是集装箱化的一个实例。

  Docker是一种基于容器的技术,通过使用容器来轻松自动地创建,部署和执行应用程序。它促进了一个与虚拟机类似的独立环境(容器),但没有自己的操作系统,因此所有容器都通过Docker共享相同的操作系统内核。但是,容器由运行应用程序所需的所有二进制文件和库文件组成。如果在Linux上使用Docker容器[45],那么LinuxOS将充当默认的Docker主机,但是当它在非Linux计算机上使用时,则需要单独安装该Docker主机。与虚拟化中的实际虚拟机相比,此Docker主机是一个轻量级虚拟机,所需资源最少。由于Docker默认安装并且需要运行Docker引擎,因此Docker将默认名称赋予此Docker主机。

  Docker的架构模式如图2.7所示:

  DockerSwarm是一个集群管理和协调工具,可以连接和控制多个Docker节点,形成一个虚拟系统。它为Swarm集群提供了几个独特的功能,例如可用性、可靠性、安全性、可维护性和可伸缩性,这是标准的一个附加优势Docker技术,并使集装箱系统成为可靠的系统。

  用Dokcer容器技术进行Hadoop分布式集群的构建工作,与服务器虚拟化技术相比,Docker有着易于部署的优势、存储速率快;与传统直接硬件部署相比,有着硬件环境配置要求低、成本便宜的特点。所以,在Docker容器中部署Hadoop平台是可行的。所以本文选择在Docker容器中搭建Hadoop分布式集群。

  2.2.4Docker的读写性

  与传统虚拟化技术相比,在读写性能上Docker也存在巨大的优势。它以无限接近物理内存的存取速率,领先于其它的虚拟机。本小节将通过实验来验证Docker容器的读取速率。本次实验将对KVM虚拟机与docker进行一次读/写性能的比较。硬件为相同的PC机,PC机的配置为:因特尔酷睿i5760处理器、2个金士顿DDR31333的内存条、日立400G硬盘。具体方案是在相同PC机上部署相同版本的Linux系统,通过多线程测试管理工具Grobutils采用电梯式调度算法、截至时间调度算法、完全公平排队I/O调度算法、预料I/O调度算法这4种I/O调度算法分别对KVM虚拟机和Docker在写、读、传输文件三个方面进行比较。



  由图2.8、图2.9、图2.10所示,无论是文件的写、传输,还是读取,Docker线程的响应速率都要比KVM那样类似的传统虚拟技术要快。所以,如果与传统虚拟化技术相比,用Dokcer虚拟化技术进行Hadoop的构建工作,Docker有着存储速率快、易于部署的优势;与传统直接硬件部署相比,有着硬件环境配置要求低、成本便宜的特点。所以,在Docker容器中部署Hadoop平台是可行的。

  2.3秘密共享技术

  秘密共享是信息安全和数据机密性的重要手段。它在防止重要信息和秘密数据的丢失,破坏,恶意修改或利用方面发挥着关键作用。秘密共享已成为现代密码学领域的一个非常重要的分支。同时,它也是信息安全的重要研究内容。

  Sharmir和Blackley独立提出了秘密共享,描述了在团体中分配秘密的方法,每个秘密分配一个秘密[46].当收集到足够数量的碎片时,整个秘密只能被成功地重建。根据Shamir(??,??)将秘密??分成??个秘密共享的方案,任何人都只能从任何??个或更多个秘密中重构秘密??.

  这个秘密永远不会被重建不到??块。这意味着即使在数据泄露期间,如果入侵者拥有???1个密钥,他们仍然不能重建密钥[47].在数据安全问题中,秘密??可以是文件??或任何类型的数据介质,以保持私密性[48].

  秘密共享是由布莱克利和沙米尔独立发明的密码学研究[49].一般来说,有一名分享者将一个秘密分成??个玩家,每个玩家只有其中一部分秘密,只有当任何一组??或更多的玩家共同工作时,秘密才会重建。任何???1个玩家同时重建秘密时,他们是不可能破解完整的原始秘密。这被称为(??,??)门限秘密共享方案[50].通常情况下,??个玩家的数量至少相同秘密分配的本身数量。然而,所需存储量增加了??倍,空间效率低下,导致了多重秘密的概念分享。在过去的十年里,企业和个人已经将越来越多的数据委托给用于处理和存储的云。在里面同时,云计算的发展也带动了越来越担心数据隐私。标准解决方案对隐私的担忧是加密数据。但是,所需的功能可能无法实现在加密的数据上[51].除此之外,许多秘密共享算法是专利,因此对商业有限制使用这些知识产权。由于这些原因,它是研究云中的安全秘密共享非常感兴趣,或者从科学的角度来看,在秘密分享加密域。

  秘密共享方案已经被扩展并被用于不同的应用领域。对于存储在当前Hadoop系统中的一些非常敏感的数据,秘密共享是提高信息保障的一个有希望的方法,特别是对于大规模的异构Hadoop系统。

对应分类:
版权所有:大学论文网专业权威的论文代写、论文发表的网站,秉承信誉至上、用户为首的服务理念,服务好每一位客户
本站部分论文收集于网络,如有不慎侵犯您的权益,请您及时致电或写信告知,我们将第一时间处理,邮箱:82274534@qq.com