• 1. CPU/GPU并行计算集群设计方案2016.8.17
  • 2. Hadoop简介 Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Apache的一个用java语言实现开源软件框架,Hadoop集群是一种专门为存储和分析海量非结构化数据而设计的特定类型的集群。本质上,它是一种计算集群,即将数据分析的工作分配到多个集群节点上,从而并行处理数据。 Hadoop框架中最核心设计就是:HDFS和MapReduce. HDFS提供了海量数据的存储,MapReduce提供了对数据的计算. Hadoop的工作原理在于将数据拆分成片,并将每个“分片”分配到特定的集群节点上进行分析。数据不必均匀分布,因为每个数据分片都是在独立的集群节点上进行单独处理的。
  • 3. Hadoop核心: HDFS:HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),而整个Hadoop的体系结构主要是通过HDFS来实现分布式存储的底层支持的,并且它会通过MapReduce来实现分布式并行任务处理的程序支持。
  • 4. HDFS的体系结构: HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。HDFS允许用户以文件的形式存储数据。从内部来看,文件被分成若干个数据块,而且这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建、删除和复制工作。图1-3所示为HDFS的体系结构。HDFS的关键元素: Block:将一个文件进行分块,通常是64M。 NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。 DataNode:分布在廉价的计算机上,用于存储Block块文件。
  • 5. MapReduce: 通俗说MapReduce是一套从海量·源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。 下面以一个计算海量数据最大值为例:一个银行有上亿储户,银行希望找到存储最高的金额是多少. MapReduce会这样做:首先数字是分布存储在不同块中的,以某几个块为一个Map,计算出Map中最大的值,然后将每个Map中的最大值做Reduce操作,Reduce再取最大值给用户。
  • 6. MapReduce的局限性: Hadoop还存在很多已知限制,尤其是MapReduce。对MapReduce编程明显是困难的。对大多数分析,你都必须用很多步骤将Map和Reduce任务串接起来。这造成类SQL的计算或机器学习需要专门的系统来进行。更糟的是,MapReduce要求每个步骤间的数据要序列化到磁盘,这意味着MapReduce作业的I/O成本很高,导致交互分析和迭代算法(iterative algorithms)开销很大;而事实是,几乎所有的最优化和机器学习都是迭代的。 为了解决这些问题,Hadoop一直在向一种更为通用的资源管理框架转变,即YARN(Yet Another Resource Negotiator, 又一个资源协调者)。YARN实现了下一代的MapReduce,但同时也允许应用利用分布式资源而不必采用MapReduce进行计算。通过将集群管理一般化,研究转到分布式计算的一般化上,来扩展了MapReduce的初衷。
  • 7. Spark是基于内存计算的,是云计算领域继Hadoop之后下一代最热门并行计算框架开源项目,它的核心是弹性分布式数据集(RDD)。 现有的大部分的集群计算系统都是数据流模型的,从稳定的物理存储中加载记录,然后传入由一组确定性操作组成的DAG(有向无环图)进行执行,最后写回到稳定存储中。这样的数据流模型的计算系统不适用于迭代式算法和交互式数据挖掘(这类计算的特点是反复操作同一组数据,或者反复执行相同的操作)。RDD就是在这样的场景下产生的。它适用于需要多次重用工作集的并行操作,所以适用于迭代式算法,交互式数据挖掘这样的应用场景;同时它还拥有数据流模型的计算系统的优势,就是容错能力,可伸缩性和位置感知调度。 Spark简介
  • 8. Hadoop和Spark的异同解决问题的层面不一样: 首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。 Spark数据处理速度秒杀MapReduce: Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。 Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。此外Spark提供多种数据集操作类型(如filter、join、groupByKey等),而Hadoop只提供了Map和Reduce两种; 两者可合并: 目前看来,在各个场合下spark都优于hadoop(Map/Reduce)。Hadoop与MR是的初衷是为了使用廉价的、异构的机器来做分布式存储与计算,但spark对硬件的要求稍高,对内存/CPU是有较高要求的。 实际上,Spark与MapReduce是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,比如分布式文件系统(HDFS),而Spark 为需要它的那些数据集提供了实时内存处理。 Spark没有自己的分布式文件系统,但Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算.
  • 9. Hadoop集群的使用范围: 尽管Hadoop集群有众多的优点和好处,但它却并非是对于所有企业都适用的数据分析解决方案。比如某企业的数据量相对较少,即使亟需数据分析也可能不会受益于Hadoop集群。   使用Hadoop集群的另外一个缺点在于集群解决方案是建立在数据“可分”以及可在独立节点上进行并行处理的基础之上的。如果要做的分析不适应于并行处理环境,那么Hadoop集群就不是完成这项任务的合适工具。 hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识,对于实时性要求高的情形,Hadoop不太适合。
  • 10. Storm集群简介 Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Storm的部署管理非常简单,而且,在同类的流式计算工具,Storm的性能也是非常出众的。
  • 11. 一个Storm集群的基本组件 在Storm的集群里面有两种节点: 控制节点(master node)和工作节点(worker node)。控制节点上面运行一个后台程序:Nimbus, 它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分布代码,分配工作给机器, 并且监控状态。 每一个工作节点上面运行一个叫做Supervisor的节点(类似 TaskTracker)。Supervisor会监听分配给它那台机器的工作,根据需要 启动/关闭工作进程。每一个工作进程执行一个Topology(类似 Job)的一个子集;一个运行的Topology由运行在很多机器上的很多工作进程 Worker(类似 Child)组成。
  • 12. Storm和Spark的异同 Spark基于这样的理念,当数据庞大时,把计算过程传递给数据要比把数据传递给计算过程要更富效率。每个节点存储(或缓存)它的数据集,然后任务被提交给节点。 所以这是把过程传递给数据。这和Hadoop map/reduce非常相似,除了积极使用内存来避免I/O操作,以使得迭代算法(前一步计算输出是下一步计算的输入)性能更高。 而Storm的架构和Spark截然相反。Storm是一个分布式流计算引擎。每个节点实现一个基本的计算过程,而数据项在互相连接的网络节点中流进流出。和Spark相反,这个是把数据传递给过程。(一个是批量处理,基于任务调度的;另外一个是实时处理,基于流。 ) Spark流模块先汇聚批量数据然后进行数据块分发(视作不可变数据进行处理),而Storm是只要接收到数据就实时处理并分发(数据是源源不断产生的 )。 不确定哪种方式在数据吞吐量上要具优势,不过Storm计算时间延迟要小。 Spark工作于现有的数据全集(如Hadoop数据)已经被导入Spark集群,Spark基于in-memory管理可以进行快讯扫描,并最小化迭代算法的全局I/O操作。
  • 13. 流计算和批处理系统流程 整个数据处理流程来说大致可以分三个阶段: 1. 数据采集与准备 2. 数据计算(涉及计算中的中间存储), 题主中的“那些方面决定”应该主要是指这个阶段处理方式。 3. 数据结果展现(反馈) 1)数据采集阶段,目前典型的处理策略:数据的产生系统一般出自页面打点和解析DB的log,流计算将数据采集到消息队列中(比如kafaka,metaQ,timetunle)等。批处理系统一般将数据采集进分布式文件系统(比如HDFS),当然也有使用消息队列的。我们暂且把消息队列和文件系统称为预处理存储。二者在延时和吞吐上没太大区别,接下来从这个预处理存储进入到数据计算阶段有很大的区别,流计算一般在实时的读取消息队列进入流计算系统(storm)的数据进行运算,批处理一系统一般会攒一大批后批量导入到计算系统(hadoop),这里就有了延时的区别。 2)数据计算阶段,流计算系统(storm)的延时低主要有一下几个方面(针对题主的问题) A: storm 进程是常驻的,有数据就可以进行实时的处理 mapreduce 数据攒一批后由作业管理系统启动任务,Jobtracker计算任务分配,tasktacker启动相关的运算进程 B: storm每个计算单元之间数据之间通过网络(zeromq)直接传输。 mapreduce map任务运算的结果要写入到HDFS,在于reduce任务通过网络拖过去运算。相对来说多了磁盘读写,比较慢 C: 对于复杂运算storm的运算模型直接支持DAG(有向无环图) mapreduce 需要肯多个MR过程组成,有些map操作没有意义的
  • 14. 3)数据结果展现 流计算一般运算结果直接反馈到最终结果集中(展示页面,数据库,搜索引擎的索引)。而mapreduce一般需要整个运算结束后将结果批量导入到结果集中。 实际流计算和批处理系统没有本质的区别,像storm的trident也有批概念,而mapreduce可以将每次运算的数据集缩小(比如几分钟启动一次),facebook的puma就是基于hadoop做的流计算系统。 Spark也能支持秒级的流式计算,但毫秒级的,还得用storm.
  • 15. (本页无文本内容)
  • 16. 谢谢观看