spark设计理念与基本架构

ljbguanli ljbguanli     2022-09-06     549

关键词:

《深入理解Spark:核心思想与源代码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源代码分析》一书正式出版上市

《深入理解Spark:核心思想与源代码分析》一书第一章的内容请看链接《第1章 环境准备》


本文主要展示本书的第2章内容:


第2章 设计理念与基本架构


“若夫乘天地之正。而御六气之辩,以游无穷者。彼且恶乎待哉?”

——《庄子·逍遥游》

本章导读:

      上一章,介绍了Spark环境的搭建。为方便读者学习Spark做好准备。本章首先从Spark产生的背景開始,介绍Spark的主要特点、基本概念、版本号变迁。然后简要说明Spark的主要模块和编程模型。

最后从Spark的设计理念和基本架构入手,使读者可以对Spark有宏观的认识,为之后的内容做一些准备工作。

Spark是一个通用的并行计算框架,由加州伯克利大学(UCBerkeley)的AMP实验室开发于2009年。并于2010年开源。

2013年成长为Apache旗下为大数据领域最活跃的开源项目之中的一个。Spark也是基于map reduce 算法模式实现的分布式计算框架,拥有Hadoop MapReduce所具有的长处,而且攻克了HadoopMapReduce中的诸多缺陷。



2.1 初识Spark


2.1.1 Hadoop MRv1的局限

      早在Hadoop1.0版本号。当时採用的是MRv1版本号的MapReduce编程模型。MRv1版本号的实现都封装在org.apache.hadoop.mapred包中。MRv1的Map和Reduce是通过接口实现的。MRv1包含三个部分:

  • 执行时环境(JobTracker和TaskTracker)。
  • 编程模型(MapReduce);
  • 数据处理引擎(Map任务和Reduce任务)。

MRv1存在下面不足:

  • 可扩展性差:在执行时,JobTracker既负责资源管理又负责任务调度,当集群繁忙时。JobTracker非常easy成为瓶颈。终于导致它的可扩展性问题。

  • 可用性差:採用了单节点的Master,没有备用Master及选举操作,这导致一旦Master出现问题,整个集群将不可用。
  • 资源利用率低:TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。

    一个Task 获取到一个slot 后才有机会执行。Hadoop 调度器负责将各个TaskTracker 上的空暇slot 分配给Task 使用。一些Task并不能充分利用slot。而其它Task也无法使用这些空暇的资源。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用。有时会由于作业刚刚启动等原因导致MapTask非常多,而Reduce Task任务还没有调度的情况,这时Reduce slot也会被闲置。

  • 不能支持多种MapReduce框架:无法通过可插拔方式将自身的MapReduce框架替换为其它实现,如Spark、Storm等。

MRv1的示意如图2-1。


图2-1        MRv1示意图

      Apache为了解决以上问题,对Hadoop升级改造,MRv2终于诞生了。MRv2中,重用了MRv1中的编程模型和数据处理引擎。可是执行时环境被重构了。

JobTracker被拆分成了通用的资源调度平台(ResourceManager,简称RM)和负责各个计算框架的任务调度模型(ApplicationMaste,简称AM)。MRv2中MapReduce的核心不再是MapReduce框架,而是YARN。在以YARN为核心的MRv2中,MapReduce框架是可插拔的。全然能够替换为其它MapReduce实现,比方Spark、Storm等。MRv2的示意如图2-2所看到的。


图2-2        MRv2示意图

       Hadoop MRv2尽管攻克了MRv1中的一些问题。可是因为对HDFS的频繁操作(包含计算结果持久化、数据备份及shuffle等)导致磁盘I/O成为系统性能的瓶颈,因此仅仅适用于离线数据处理,而不能提供实时数据处理能力。


2.1.2 使用场景

       Hadoop经常使用于解决高吞吐、批量处理的业务场景,比如离线计算结果用于浏览量统计。假设须要实时查看浏览量统计信息。Hadoop显然不符合这种要求。

Spark通过内存计算能力极大地提高了大数据处理速度,满足了以上场景的须要。此外,Spark还支持SQL查询,流式计算,图计算。机器学习等。

通过对Java、Python、Scala、R等语言的支持,极大地方便了用户的使用。

2.1.3 Spark的特点

       Spark看到MRv1的问题,对MapReduce做了大量优化。总结例如以下:

  • 高速处理能力。随着实时大数据应用越来越多,Hadoop作为离线的高吞吐、低响应框架已不能满足这类需求。HadoopMapReduce的Job将中间输出和结果存储在HDFS中,读写HDFS造成磁盘IO成为瓶颈。Spark同意将中间输出和结果存储在内存中。节省了大量的磁盘IO。

    同一时候Spark自身的DAG运行引擎也支持数据在内存中的计算。Spark官网声称性能比Hadoop快100倍,如图2-3所看到的。即便是内存不足须要磁盘IO。其速度也是Hadoop的10倍以上。


图2-3        Hadoop与Spark运行逻辑回归时间比較

  • 易于使用。Spark如今支持Java、Scala、Python和R等语言编写应用程序,大大减少了使用者的门槛。自带了80多个高等级操作符,同意在Scala,Python,R的shell中进行交互式查询。
  • 支持查询。

    Spark支持SQL及Hive SQL对数据查询。

  • 支持流式计算。

    与MapReduce仅仅能处理离线数据相比,Spark还支持实时的流计算。Spark依赖Spark Streaming对数据进行实时的处理。其流式处理能力还要强于Storm。

  • 可用性高。Spark自身实现了Standalone部署模式,此模式下的Master能够有多个,攻克了单点故障问题。此模式全然能够使用其它集群管理器替换。比方YARN、Mesos、EC2等。
  • 丰富的数据源支持。Spark除了能够訪问操作系统自身的文件系统和HDFS。还能够訪问Cassandra, HBase, Hive, Tachyon以及不论什么Hadoop的数据源。这极大地方便了已经使用HDFS、Hbase的用户顺利迁移到Spark。


2.2 基础知识


1.版本号变迁

     经过4年多的发展,Spark眼下的版本号是1.4.1。我们简单看看它的版本号发展过程。

1)      Spark诞生于UCBerkeley的AMP实验室(2009)。

2)      Spark正式对外开源(2010)。

3)      Spark 0.6.0版本号公布(2012-10-15),大范围的性能改进。添加了一些新特性。并对Standalone部署模式进行了简化。

4)      Spark 0.6.2版本号公布(2013-02-07),攻克了一些bug,并增强了系统的可用性。

5)      Spark 0.7.0版本号公布(2013-02-27),添加了很多其它关键特性。比如:PythonAPI、Spark Streaming的alpha版本号等。

6)      Spark 0.7.2版本号公布(2013-06-02),性能改进并攻克了一些bug,新的API使用的样例。

7)      Spark接受进入Apache孵化器(2013-06-21)。

8)      Spark 0.7.3版本号公布(2013-07-16),一些bug的解决,更新Spark Streaming API等。

9)      Spark 0.8.0版本号公布(2013-09-25),一些新功能及可用性改进。

10)    Spark 0.8.1版本号公布(2013-12-19)。支持Scala 2.9,YARN 2.2,Standalone部署模式下调度的高可用性。shuffle的优化等。

11)    Spark 0.9.0版本号公布(2014-02-02),添加了GraphX,机器学习新特性,流式计算新特性,核心引擎优化(外部聚合、加强对YARN的支持)等。

12)    Spark 0.9.1版本号公布(2014-04-09)。添加使用YARN的稳定性。改进Scala和Python API的奇偶性。

13)    Spark 1.0.0版本号公布(2014-05-30),添加了Spark SQL、MLlib、GraphX和Spark Streaming都添加了新特性并进行了优化。

Spark核心引擎还添加了对安全YARN集群的支持。

14)    Spark 1.0.1版本号公布(2014-07-11),添加了Spark SQL的新特性和堆JSON数据的支持等。

15)    Spark 1.0.2版本号公布(2014-08-05)。Spark核心API及Streaming。Python,MLlib的bug修复。

16)    Spark 1.1.0版本号公布(2014-09-11)。

17)    Spark 1.1.1版本号公布(2014-11-26),Spark核心API及Streaming,Python。SQL。GraphX和MLlib的bug修复。

18)    Spark 1.2.0版本号公布(2014-12-18)。

19)    Spark 1.2.1版本号公布(2015-02-09)。Spark核心API及Streaming,Python。SQL。GraphX和MLlib的bug修复。

20)    Spark 1.3.0版本号公布(2015-03-13)。

21)    Spark 1.4.0版本号公布(2015-06-11)。

22)    Spark 1.4.1版本号公布(2015-07-15),DataFrame API及Streaming,Python。SQL和MLlib的bug修复。


2.基本概念

      要想对Spark有总体性的了解,推荐读者阅读Matei Zaharia的Spark论文。

此处笔者先介绍Spark中的一些概念:

  • RDD(resillient distributed dataset):弹性分布式数据集。
  • Task:详细运行任务。Task分为ShuffleMapTask和ResultTask两种。ShuffleMapTask和ResultTask分别类似于Hadoop中的Map,Reduce。
  • Job:用户提交的作业。

    一个Job可能由一到多个Task组成。

  • Stage:Job分成的阶段。一个Job可能被划分为一到多个Stage。

  • Partition:数据分区。

    即一个RDD的数据能够划分为多少个分区。

  • NarrowDependency:窄依赖。

    即子RDD依赖于父RDD中固定的Partition。NarrowDependency分为OneToOneDependency和RangeDependency两种。

  • ShuffleDependency:shuffle依赖,也称为宽依赖。

    即子RDD对父RDD中的全部Partition都有依赖。

  • DAG(Directed Acycle graph):有向无环图。用于反映各RDD之间的依赖关系。

3.与Java的比較

      Spark为什么要选择Java作为开发语言?笔者不得而知。假设能对二者进行比較,或许能看出一些端倪。

表2-1列出了对Scala与Java的比較。

表2-1        Scala与Java的比較

 

Scala

Java

语言类型

面向函数为主,兼有面向对象

面向对象(Java8也添加了lambda函数编程)

简洁性

很简洁

不简洁

类型判断

丰富的类型判断,比如深度和链式的类型判断、 duck type 、隐式类型转换等,但也因此添加了编译时长

少量的类型判断

可读性

一般,丰富的语法糖导致的各种奇幻使用方法,比如方法签名

学习成本

较高

一般

语言特性

很丰富的语法糖和更现代的语言特性,比如 Option 、模式匹配、使用空格的方法调用

丰富

并发编程

使用Actor的消息模型

使用堵塞、锁、堵塞队列等

 

通过以上比較似乎仍然无法推断Spark选择开发语言的原因。因为函数式编程更接近计算机思维,因此便于通过算法从大数据中建模,这应该更符合Spark作为大数据框架的理念吧!


2.3 基本设计思想


2.3.1 Spark模块设计

      整个Spark主要由下面模块组成:

  • Spark Core:Spark的核心功能实现,包含:SparkContext的初始化(DriverApplication通过SparkContext提交)、部署模式、存储体系、任务提交与运行、计算引擎等。
  • Spark SQL:提供SQL处理能力,便于熟悉关系型数据库操作的project师进行交互查询。此外。还为熟悉Hadoop的用户提供Hive SQL处理能力。
  • Spark Streaming:提供流式计算处理能力,眼下支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等数据源。此外,还提供窗体操作。
  • GraphX:提供图计算处理能力,支持分布式, Pregel提供的API能够解决图计算中的常见问题。
  • MLlib:提供机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的API接口大大减少了用户的学习成本。

Spark SQL、Spark Streaming、GraphX、MLlib的能力都是建立在核心引擎之上,如图2-4。


图2-4        Spark各模块依赖关系

1.  Spark核心功能

Spark Core提供Spark最基础与最核心的功能。主要包含:

  • SparkContext:通常而言。DriverApplication的运行与输出都是通过SparkContext来完毕的,在正式提交Application之前,首先须要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、測量系统、文件服务、Web服务等内容,应用程序开发人员仅仅须要使用SparkContext提供的API完毕功能开发。

    SparkContext内置的DAGScheduler负责创建Job。将DAG中的RDD划分到不同的Stage。提交Stage等功能。内置的TaskScheduler负责资源的申请、任务的提交及请求集群对任务的调度等工作。

  • 存储体系:Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘。这极大地降低了磁盘I/O,提升了任务运行的效率,使得Spark适用于实时计算、流式计算等场景。

    此外。Spark还提供了以内存为中心的高容错的分布式文件系统Tachyon供用户进行选择。Tachyon可以为Spark提供可靠的内存级的文件共享服务。

  • 计算引擎:计算引擎由SparkContext中的DAGScheduler、RDD以及详细节点上的Executor负责运行的Map和Reduce任务组成。

    DAGScheduler和RDD尽管位于SparkContext内部,可是在任务正式提交与运行之前将Job中的RDD组织成有向无关图(简称DAG)、并对Stage进行划分决定了任务运行阶段任务的数量、迭代计算、shuffle等过程。

  • 部署模式:因为单节点不足以提供足够的存储及计算能力,所以作为大数据处理的Spark在SparkContext的TaskScheduler组件中提供了对Standalone部署模式的实现和Yarn、Mesos等分布式资源管理系统的支持。通过使用Standalone、Yarn、Mesos等部署模式为Task分配计算资源,提高任务的并发运行效率。

    除了可用于实际生产环境的Standalone、Yarn、Mesos等部署模式外,Spark还提供了Local模式和local-cluster模式便于开发和调试。

2.  Spark扩展功能

         为了扩大应用范围。Spark陆续添加了一些扩展功能,主要包含:

  • Spark SQL:因为SQL具有普及率高、学习成本低等特点,为了扩大Spark的应用面。因此添加了对SQL及Hive的支持。

    Spark SQL的过程能够总结为:首先使用SQL语句解析器(SqlParser)将SQL转换为语法树(Tree),而且使用规则运行器(RuleExecutor)将一系列规则(Rule)应用到语法树,终于生成物理运行计划并运行的过程。当中,规则包含语法分析器(Analyzer)和优化器(Optimizer)。Hive的运行过程与SQ类似。

  • Spark Streaming:Spark Streaming与Apache Storm类似。也用于流式计算。SparkStreaming支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等多种数据输入源。

    输入流接收器(Receiver)负责接入数据。是接入数据流的接口规范。Dstream是Spark Streaming中全部数据流的抽象,Dstream能够被组织为DStreamGraph。

    Dstream本质上由一系列连续的RDD组成。

  • GraphX:Spark提供的分布式图计算框架。GraphX主要遵循总体同步并行计算模式(BulkSynchronous Parallell。简称BSP)下的Pregel模型实现。GraphX提供了对图的抽象Graph,Graph由顶点(Vertex)、边(Edge)及继承了Edge的EdgeTriplet(加入了srcAttr和dstAttr用来保存源顶点和目的顶点的属性)三种结构组成。GraphX眼下已经封装了最短路径、网页排名、连接组件、三角关系统计等算法的实现。用户能够选择使用。
  • MLlib:Spark提供的机器学习框架。机器学习是一门涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多领域的交叉学科。MLlib眼下已经提供了基础统计、分类、回归、决策树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减、特征提取与转型、频繁模式挖掘、预言模型标记语言、管道等多种数理统计、概率论、数据挖掘方面的数学算法。

2.3.2 Spark模型设计

1. Spark编程模型

Spark 应用程序从编写到提交、运行、输出的整个过程如图2-5所看到的,图中描写叙述的过程例如以下:

1) 用户使用SparkContext提供的API(经常使用的有textFile、sequenceFile、runJob、stop等)编写Driver application程序。

此外SQLContext、HiveContext及StreamingContext对SparkContext进行封装,并提供了SQL、Hive及流式计算相关的API。

2) 使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcastManager将任务的Hadoop配置进行广播。

然后由DAGScheduler将任务转换为RDD并组织成DAG,DAG还将被划分为不同的Stage。最后由TaskScheduler借助ActorSystem将任务提交给集群管理器(Cluster Manager)。

3) 集群管理器(ClusterManager)给任务分配资源,即将详细任务分配到Worker上,Worker创建Executor来处理任务的执行。Standalone、YARN、Mesos、EC2等都能够作为Spark的集群管理器。


图2-5        代码运行过程


2.计算模型

      RDD能够看做是对各种数据计算模型的统一抽象,Spark的计算过程主要是RDD的迭代计算过程,如图2-6。RDD的迭代计算过程很类似于管道。分区数量取决于partition数量的设定,每一个分区的数据仅仅会在一个Task中计算。

全部分区能够在多个机器节点的Executor上并行运行。


图2-6        RDD计算模型


2.4 Spark基本架构

       从集群部署的角度来看,Spark集群由下面部分组成:

  • Cluster Manager:Spark的集群管理器,主要负责资源的分配与管理。集群管理器分配的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给应用程序,可是并不负责对Executor的资源分配。

    眼下,Standalone、YARN、Mesos、EC2等都能够作为Spark的集群管理器。

  • Worker:Spark的工作节点。对Spark应用程序来说,由集群管理器分配得到资源的Worker节点主要负责下面工作:创建Executor。将资源和任务进一步分配给Executor,同步资源信息给Cluster Manager。

  • Executor:运行计算任务的一线进程。

    主要负责任务的运行以及与Worker、Driver App的信息同步。

  • Driver App:client驱动程序,也能够理解为client应用程序,用于将任务程序转换为RDD和DAG,并与Cluster Manager进行通信与调度。

这些组成部分之间的总体关系如图2-7所看到的。


图2-7        Spark基本架构图

 

2.5 小结

      每项技术的诞生都会由某种社会需求所驱动。Spark正是在实时计算的大量需求下诞生的。Spark借助其优秀的处理能力,可用性高,丰富的数据源支持等特点,在当前大数据领域变得火热,參与的开发人员也越来越多。

Spark经过几年的迭代发展,现在已经提供了丰富的功能。笔者相信,Spark在未来必将产生更耀眼的火花。



[1]图2-1和图2-2都来源自http://blog.chinaunix.net/uid-28311809-id-4383551.html


后记:自己牺牲了7个月的周末和下班空暇时间。通过研究Spark源代码和原理,总结整理的《深入理解Spark:核心思想与源代码分析》一书现在已经正式出版上市。眼下亚马逊、京东、当当、天猫等站点均有销售,欢迎感兴趣的同学购买。

我開始研究源代码时的Spark版本号是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本号迭代也非常快,现在最新已经是1.6.0。

眼下市面上另外2本源代码研究的Spark书籍的版本号各自是0.9.0版本号和1.2.0版本号。看来这些书的作者都与我一样。遇到了这样的问题。因为研究和出版都须要时间,所以不能及时跟上Spark的脚步,还请大家见谅。

可是Spark核心部分的变化相对还是非常少的,假设对版本号不是过于追求,依旧能够选择本书。

 

京东(现有满150减50活动)):http://item.jd.com/11846120.html 

当当:http://product.dangdang.com/23838168.html 

天猫:https://detail.tmall.com/item.htm?

spm=a220m.1000858.1000725.97.Jm1mNT&id=526150622300&areaId=131000&cat_id=2&rn=e5af4acfd6698f6d3e6a2e4fb543bb83&user_id=2086236400&is_b=1

亚马逊:http://www.amazon.cn/gp/product/B01A5G5LHK/sr=8-1/qid=1452505597/ref=olp_product_details?

ie=UTF8&me=&qid=1452505597&sr=8-1

spark基本概念与运行架构

ApacheSpark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写。 RDD:弹性分布式数据集(ResilientDistributedDataset)是分布式内存的一个抽象概念,提供了一个高度受限的共享内存模型。一个RDD包含多个分区(Part... 查看详情

spark考试

...就是单纯的课程介绍一,第1章-大数据技术概述大数据的基本概念、关键技术和代表性软件二,第2章-Scala语言基础介绍Scala语言基础语法三,第3章-Spark的设计与运行原理Spark简介、运行架构、RDD的设计与运行原理、部署模式四,... 查看详情

一文带你快速了解spark架构设计与原理思想

...~我是Alex。之前已经陆续输出了​​Hadoop三大核心组件的架构思想和原理​​​和​​Hive架构设计和原理​​,每篇都受到了读者小伙伴们的一致好评~感谢大家的支持。按照发展趋势,本篇将为大家介绍关于Spark的架构设计和原... 查看详情

一文带你了解spark架构设计与原理思想(代码片段)

...家好~我是Alex。之前已经陆续输出了Hadoop三大核心组件的架构思想和原理和Hive架构设计和原理,每篇都受到了读者小伙伴们的一致好评~感谢大家的支持。大家可能已经猜到了,按照发展趋势,本篇将为大家介绍关于Sp... 查看详情

一文带你了解spark架构设计与原理思想(代码片段)

...家好~我是Alex。之前已经陆续输出了Hadoop三大核心组件的架构思想和原理和Hive架构设计和原理,每篇都受到了读者小伙伴们的一致好评~感谢大家的支持。大家可能已经猜到了,按照发展趋势,本篇将为大家介绍关于Sp... 查看详情

一文带你了解spark架构设计与原理思想(代码片段)

...家好~我是Alex。之前已经陆续输出了Hadoop三大核心组件的架构思想和原理和Hive架构设计和原理,每篇都受到了读者小伙伴们的一致好评~感谢大家的支持。大家可能已经猜到了,按照发展趋势,本篇将为大家介绍关于Sp... 查看详情

一文带你了解spark架构设计与原理思想(代码片段)

...家好~我是Alex。之前已经陆续输出了Hadoop三大核心组件的架构思想和原理和Hive架构设计和原理,每篇都受到了读者小伙伴们的一致好评~感谢大家的支持。大家可能已经猜到了,按照发展趋势,本篇将为大家介绍关于Sp... 查看详情

02spark架构与运行流程

1、Spark已打造出结构一体化、功能多样化的大数据生态系统,请简述Spark生态系统Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成一套完整生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时... 查看详情

spark:基本架构及原理

转自:http://www.cnblogs.com/tgzhu/p/5818374.htmlApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapRe... 查看详情

spark:基本架构及原理

     ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spa... 查看详情

spark基本架构及原理

 ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:Spar... 查看详情

spark学习:基本架构及原理

 ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:Spar... 查看详情

《深入理解spark:核心思想与源码分析》——sparkcontext的初始化(中)

...与源码分析》一书第二章的内容请看链接《第2章 SPARK设计理念与基本架构》由于本书的第3章内容较多,所以打算分别开辟三篇随笔分别展现。《深入理解Spar 查看详情

图文详解spark总体架构[禅与计算机程序设计艺术](代码片段)

前言本文对Spark总体架构进行描述,本文读者需要一定的Spark的基础知识,至少了解Spark的RDD和DAG。Spark架构图术语说明:DriverDriver的主要功能,总结如下:运行应用程序的main函数创建spark的上下文划分RDD并生成有向... 查看详情

spark的基本概念与架构

一、Spark简介Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够... 查看详情

sparkcontext的初始化(叔篇)——taskscheduler的启动

...与源码分析》一书第二章的内容请看链接《第2章 SPARK设计理念与基本架构》由于本书的第3章内容较多,所以打算分别开辟四篇随笔分别展现。《深入理解Spar 查看详情

mapreduce(mrv1)设计理念与基本架构

MapReduce是一个分布式计算框架,主要由两部分组成:编程模型和运行时环境.其中,编程模型为用户提供了非常易用的编程接口,用户只需要像编写串行程序一样实现几个简单的函数即可实现一个分布式程序,而其他比较复杂的... 查看详情

spark架构与作业执行流程简介(scala版)

...如此: 字面意思就是弹性分布式数据集,是spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。Resilient:弹性的,它表示的是数据可以保存在磁盘,也可以保存在内存中Distributed:它的数... 查看详情