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

SparkJob调度

概况spark提供了一些方案来调度资源。首先,每个spark程序都在跑在若干个独立的executor集群上的(其中executor是一个jvm来runtask和storedata)

概况

spark提供了一些方案来调度资源。首先,每个spark程序都在跑在若干个独立的executor集群上的(其中executor是一个jvm来run task和store data),集群管理提供了集群层面的资源分配。其次,对于每一个spark程序来说,多个由不同进程提交的job(actions)可以并行的执行。这种情况很常见,sparkContext提供了一种公平调度的机制。

spark程序间的调度

不同的用户使用同一个集群,并使用不同的配置。最初需要解决的就是资源的分割。目前常见的分配原则有下列三种,其中yarn最常用。

  • standalone 默认情况下spark程序是FIFO的形式被提交的,并占用所有可用资源。可以通过设置spark.cores.max控制占用core的数量,并通过spark.executor.memory控制每个executor使用的内存。
  • yarn 主要通过 –num-executors或spark.executor.instances、–executor-memory或spark.executor.memory、–executor-cores或spark.executor.cores来控制。
    目前不同的spark 程序之间不可以共享数据。但是可以通过获取和释放共享资源,比如动态资源分配。
spark程序内的调度

由不同线程提交的并行的job可以被同时执行,spark内部的调度是线程安全的。
一般来说,spark的调度是FIFO的,每个job还可以分成stages。如果第一个job中的stage有task运行,之后的job就需要等待。
从spark0.8开始,可以配置公平调度器,spark 分配tasks是以一种轮询的方式,短的job可以提前被执行完。可以在sparkContext中设置
spark.scheduler.mode=FAIR

公平调度

公平调度提供了一种方式将jobs一起放到某个资源池中,可以给某些重要的jobs提供高优先级的资源。可以保证需要重要jobs可以提前完成。
一般情况下,jobs被提交到了default pool中,不过可以在代码中随时控制当前线程的job在哪个pool中执行,比如sc.setLocalProperty(“spark.scheduler.pool”,”pool”),也可以取消使用当前的pool,sc.setLocalProperty(“spark.scheduler.pool”, null)
以上的使用都需要配置pool的配置文件。具体有三个参数,参数的含义如下:

  • schedulingMode: 可以使FIFO和FAIR,控制pool中job的执行模式。
  • weight: 控制和其他pool对集群资源的占用权重,默认为1,如果设置为2,这个pool就会获取2倍的资源。不仅如此,还可以控制jobs的执行时间,同时如果设置为1000,此pool总是启动tasks无论什么时候jobs active。
  • minShare 最基本的资源分配。先满足此值,然后再分配weight
    可以通过设置conf.set(“spark.scheduler.allocation.file”, “/path/to/file”)使用自己配置的文件。格式如下:




FAIR
1
2


FIFO
2
3


如果在代码中使用sc.setLocalProperty(“spark.scheduler.pool”, “pool1”),并且不配置上述文件,每个分配池基本都是使用FIFO,weight=1,minshare=0.


推荐阅读
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文详细介绍了如何配置Apache Flume与Spark Streaming,实现高效的数据传输。文中提供了两种集成方案,旨在帮助用户根据具体需求选择最合适的配置方法。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 可能存在无限递归_递归算法看这一篇就够了|多图
    前言递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它。在日常工作中,统计文件夹大小, ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 洞态IAST Java Agent 实现AOP技术详解
    本文深入探讨了洞态IAST Java Agent如何通过AOP技术实现方法调用链和污点值传播等功能,为读者提供了详细的源码分析。 ... [详细]
author-avatar
_忘却的思念_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有