1. 首页 > 百货 > 母婴用品

Spark入门详解 大数据开发

众所周知,Spark 它是专门为大规模数据处理而设计的快速通用计算引擎,因此Spark它在数据的挖掘等领域便有着非常广泛的应用,而从现阶段来讲的话它也已经形成了一个高速发展并且应用相当广泛的生态系统了。所以,今天这篇文章便要为大家做一个Spark入门基础的简单介绍,满满干货,请不要错过。

一.关于Spark的概述

我们可以了解到,当前,MapReduce编程模型成为了一种比较主流的分布式编程模型,并且它也极大地方便了编程人员在不会分布式并行编程的情况下,能够将自己的程序运行在分布式系统上。

但其实从MapReduce来看它也存在了一些缺陷的,比如说它的高延迟以及不支持DAG模型,Reduce的中间数据落地等。因此为了优化改进MapReduce的项目,比如交互查询引擎Impala、支持内存计算Spark等这些方面。Spark凭借自身先进的设计理念,一跃成为了社区里面的热门项目。而目前来看Spark相对于MapReduce的一些优势有:低延迟、支持DAG和分布式内存计算。

二.Spark应用框架

客户Spark程序(Driver Program)操作Spark集群其实它是通过SparkContext这个对象来进行的,而SparkContext自身作为一个操作和调度的总入口,它在初始化的过程中集群管理器则会进行DAGScheduler作业调度和TaskScheduler任务调度的创建。

而DAGScheduler作业调度模块则又是依靠于Stage的这个调度模块来进行的,DAG全称 Directed Acyclic Graph。简单的来讲的话,它其实就是一个由顶点和有方向性的边构成的图,然后他可以其中从任意的一个顶点去出发,但是呢又没有路径可以将其带回到出发的顶点。并且它为每个Spark Job计算具有依赖关系的多个Stage任务阶段(通常根据Shuffle来划分Stage,比如说groupByKey, reduceByKey等涉及到shuffle的transformation就会产生新的stage),然后到后面的时候它又会将每个Stage划分为具体的一组任务,最后就以TaskSets的形式提交给底层的任务调度模块来进行一个具体执行。

三.Spark的内置项目

Spark Core: 它实现了的是Spark 中的一个基本功能,其中它是包含了任务的调度、内存的管理、错误的恢复、以及与存储系统 交互等模块。其中Spark Core 中它还包含了对弹性分布式数据集(resilient distributed> 三.Spark生态圈介绍

Spark力图整合机器学习(MLib)、图算法(GraphX)、流式计算(Spark Streaming)和数据仓库(Spark SQL)等领域,通过计算引擎Spark,弹性分布式数据集(RDD),架构出一个新的大数据应用平台。

Spark生态圈以HDFS、S3、Techyon为底层存储引擎,以Yarn、Mesos和Standlone作为资源调度引擎;使用Spark,可以实现MapReduce应用;基于Spark,Spark SQL可以实现即席查询,Spark Streaming可以处理实时应用,MLib可以实现机器学习算法,GraphX可以实现图计算,SparkR可以实现复杂数学计算。

四.Spark的优点

①减少磁盘I/O:随着实时大数据应用越来越多,Hadoop作为离线的高吞吐、低响应框架已不能满足这类需求。HadoopMapReduce的map端将中间输出和结果存储在磁盘中,reduce端又需要从磁盘读写中间结果,势必造成磁盘IO成为瓶颈。Spark允许将map端的中间输出和结果存储在内存中,reduce端在拉取中间结果时避免了大量的磁盘I/O。Hadoop Yarn中的ApplicationMaster申请到Container后,具体的任务需要利用NodeManager从HDFS的不同节点下载任务所需的资源(如Jar包),这也增加了磁盘I/O。Spark将应用程序上传的资源文件缓冲到Driver本地文件服务的内存中,当Executor执行任务时直接从Driver的内存中读取,也节省了大量的磁盘I/O。

②增加并行度:由于将中间结果写到磁盘与从磁盘读取中间结果属于不同的环节,Hadoop将它们简单的通过串行执行衔接起来。Spark把不同的环节抽象为Stage,允许多个Stage既可以串行执行,又可以并行执行。

③避免重新计算:当Stage中某个分区的Task执行失败后,会重新对此Stage调度,但在重新调度的时候会过滤已经执行成功的分区任务,所以不会造成重复计算和资源浪费。

④可选的Shuffle排序:HadoopMapReduce在Shuffle之前有着固定的排序操作,而Spark则可以根据不同场景选择在map端排序或者reduce端排序。

⑤灵活的内存管理策略:Spark将内存分为堆上的存储内存、堆外的存储内存、堆上的执行内存、堆外的执行内存4个部分。Spark既提供了执行内存和存储内存之间是固定边界的实现,又提供了执行内存和存储内存之间是“软”边界的实现。Spark默认使用“软”边界的实现,执行内存或存储内存中的任意一方在资源不足时都可以借用另一方的内存,最大限度的提高资源的利用率,减少对资源的浪费。Spark由于对内存使用的偏好,内存资源的多寡和使用率就显得尤为重要,为此Spark的内存管理器提供的Tungsten实现了一种与操作系统的内存Page非常相似的数据结构,用于直接操作操作系统内存,节省了创建的Java对象在堆中占用的内存,使得Spark对内存的使用效率更加接近硬件。Spark会给每个Task分配一个配套的任务内存管理器,对Task粒度的内存进行管理。Task的内存可以被多个内部的消费者消费,任务内存管理器对每个消费者进行Task内存的分配与管理,因此Spark对内存有着更细粒度的管理。

以上本篇内容便是对Spark的一些基础入门的介绍,后续还将对Spark做一些后续的介绍,以便能更加深入的对Spark做一个了解。

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://www.jmbhsh.com/muyingyongpin/36461.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息