热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解Spark——准备篇

跟踪源码spark-shell-spark-submit-spark-classspark-shellspark-submitspark-classSparkSubmit-r
跟踪源码

spark-shell -> spark-submit -> spark-class

《深入理解Spark——准备篇》 spark-shell
《深入理解Spark——准备篇》 spark-submit
《深入理解Spark——准备篇》 spark-class

SparkSubmit -> repl.Main -> ILoop ( SparkILoop ).process -> loadFiles ( initializeSpark ( createSparkSession ) ) -> printWelcome

《深入理解Spark——准备篇》 repl.Main
《深入理解Spark——准备篇》 ILoop.process
《深入理解Spark——准备篇》 SparkILoop.loadFiles
《深入理解Spark——准备篇》 SparkILoop.initializeSpark

Spark设计理念与基本架构

Hadoop MRv1

《深入理解Spark——准备篇》 MRv1 示意图

组成部分

1.运行环境:JobTracker 和 TaskTracker

2.编程模型:MapReduce

3.数据处理引擎:Map Task 和 Reduce Task

缺点

1.JobTracker 既负责 资源管理 又负责 任务调度,容易成为瓶颈。

2.单 Master,容易down。

3.TaskTracker 采用 slot 等量划分本节点上的资源量( CPU、内存 )。slot 分为 Map slot 和 Reduce slot , MapTask 只能用 Map slot,ReduceTask 只能用 Reduce slot。有时会 MapTask 较多时,而 Reduce Task 还没有被调度,这时 Reduce slot 会被闲置。

Hadoop MRv2

《深入理解Spark——准备篇》 MRv2 示意图

改进

1.JobTracker被拆分成了通用的资源调度平台(ResourceManager RM)和负责各个计算框架的任务调度模块(ApplicationMaster AM)。

2.MRv2 中核心不再是 MapReduce,而是Yarn,MapReduce 框架时可插拔的,可以用 Spark、Storm 替代。

缺点

对HDFS的频繁操作(包括计算结果持久化、数据备份以及 shuffle )导致磁盘 I/O 成为系统性能的瓶颈。只适合离线的数据处理,不具备实时处理的能力。

Spark

基本概念

RDD:弹性分布式数据集

Task:具体执行的任务。分为 ShuffleMapTask 和 ResultTask两种,两者分别对应与 Hadoop 中的 Map 和 Reduce。

Job:用户提交的作业。

Stage:Job分成的阶段。根据依赖划分 Stage 。

Partition:数据分区。一个RDD数据可以被划分成多个 Partition。

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

ShuffleDependency:shuffle依赖,宽依赖。子 RDD 对父 RDD 中的所有 Partition 都有依赖。

DAG:有向无环图。反映各 RDD 之间的依赖关系。

核心功能

SparkContext

Driver Application 的执行与输出都是通过 SparkContext 来完成的。

①内置的 DAGScheduler 负责创建 Job,将 DAG 中的 RDD 划分到不同的 Stage,提交 Stage 等功能。

②内置的 TaskScheduler 负责资源的申请、任务的提交以及请求集群对任务的调度等工作。

存储体系

优先考虑使用各个节点的内存作为存储。Spark 还提供了以内存为中心的高容错的分布式文件系统 Tachyon 供用户进行选择。Tachyon 能够为 Spark 提供可靠的内存级的文件共享服务。

计算引擎

由 SparkContext 中的 DAGScheduler、RDD以及具体节点上的 Executor 负责执行的 Map 和 Reduce 任务组成。DAGScheduler 和 RDD 虽然位于 SparkContext 内部,但是在任务正式提交与执行之前会将 Job 中的 RDD 组成DAG,决定了执行阶段任务的数量、迭代计算、shuffle 等过程。

部署模式

SparkContext 的 TaskScheduler 组件中提供了对 Standalone 部署模式的实现和 Yarn、Mesos 等分布式资源管理系统的支持。除此之外,还提供了 Local 模式便于开发和调试。

编程模型

《深入理解Spark——准备篇》 代码执行过程

1.使用 SparkContext 提供的API 编写 Driver application程序。

2.使用 SparkContext 提交用户编写的 Driver application程序。具体:

①使用 BlockManager 和 BroadcastManager 将任务的 Hadoop 配置进行广播。

② DAGSchduler 将任务转换为 RDD 并组织成 DAG,DAG还将被划分为不同的Stage。

③ TaskSchduler 通过

ActorSystem
将任务提交给集群管理器(Cluster Manager)。

3.集群管理器(Cluster Manager)给任务分配资源,即将具体任务分配到 Worker上,Worker 创建 Executor 来处理任务的运行。Standalone、YARN、Mesos、EC2 等都可以作为 Spark 的集群管理器。

RDD计算模型

每个分区的数据只会在一个Task中计算。

基本架构

《深入理解Spark——准备篇》 Spark 基本架构

1.Cluster Manager

Spark 的集群管理器,主要负责资源的分配与管理。集群管理器分配的资源属于一级分配,它将各个 Worker 上的内存、CPU 等资源分配给应用程序(Driver application),但是并不负责对 Executor 的资源分配。Standalone、YARN、Mesos、EC2 等都可以作为 Spark 的集群管理器。

2.Worker

Spark的工作节点。其获得由集群资源(Cluster Manager)分配的资源,负责创建 Executor,将资源和任务进一步分配给 Executor,同步资源信息给 Cluster Manager。

3.Executor

执行计算任务的单元(

线程 or 进程?
),主要负责任务的执行以及与 Worker、Driver App的信息同步。

4.Driver App

客户端应用程序。用于将任务程序转换为 RDD 和 DAG,并与 Cluster Manager 进行通信与调度。


推荐阅读
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
author-avatar
英英2502927137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有