当前位置: 首页 > news >正文

spark哪些代码在driver运行_编写的Spark程序代码,运行在driver端还是executor端呢?...

Spark闭包 | driver & executor程序代码执行​mp.weixin.qq.com2396d283eb81a59b014ccf28aa841141.png

driver是运行用户编写Application 的main()函数的地方,具体负责DAG的构建、任务的划分、task的生成与调度等。job,stage,task生成都离不开rdd自身,rdd的相关的操作不能缺少driver端的sparksession/sparkcontext。

executor是真正执行task地方,而task执行离不开具体的数据,这些task运行的结果可以是shuffle中间结果,也可以持久化到外部存储系统。一般都是将结果、状态等汇集到driver。但是,目前executor之间不能互相通信,只能借助第三方来实现数据的共享或者通信。

那么,编写的Spark程序代码,运行在driver端还是executor端呢?

先看个简单例子:通常我们在本地测试程序的时候,要打印RDD中的数据。

在本地模式下,直接使用rdd.foreach(println)或rdd.map(println)在单台机器上,能够按照预期打印并输出所有RDD的元素。

但是,在集群模式下,由executor执行输出写入的是executor的stdout,而不是driver上的stdout,所以driver的stdout不会显示这些!

要想在driver端打印所有元素,可以使用collect()方法先将RDD数据带到driver节点,然后在调用foreach(println)(但需要注意一点,由于会把RDD中所有元素都加载到driver端,可能引起driver端内存不足导致OOM。如果你只是想获取RDD中的部分元素,可以考虑使用take或者top方法)

总之,在这里RDD中的元素即为具体的数据,对这些数据的操作都是由负责task执行的executor处理的,所以想在driver端输出这些数据就必须先将数据加载到driver端进行处理。

最后做个总结:所有对RDD具体数据的操作都是在executor上执行的,所有对rdd自身的操作都是在driver上执行的。比如foreach、foreachPartition都是针对rdd内部数据进行处理的,所以我们传递给这些算子的函数都是执行于executor端的。但是像foreachRDD、transform则是对RDD本身进行一列操作,所以它的参数函数是执行在driver端的,那么它内部是可以使用外部变量,比如在SparkStreaming程序中操作offset、动态更新广播变量等。

关联文章:

相关文章:

  • pmm 监控 mysql_PMM 监控 MySQL
  • mysql 重装恢复_windows系统如何重装MySQL并恢复数据
  • suse required-start: mysql_SUSE Linux中启动Apache和MySQL的方法
  • spring兼容mysql_使用Spring+MySql实现读写分离(二)spring整合多数据库
  • 修改mysql+表格内容_java修改MySQL表中的数据问题:如代码
  • jdba怎么连接mysql_JDBA——java连接oracle问题
  • php简单图书管理系统源代码_【程序源代码】简单通用的后台管理系统
  • linux shell命令sed 向末尾插入一行_谈一谈Linux三剑客sed命令,基本概念及简单案例...
  • mysql flink 实时_Flink1.8实时数仓项目实战
  • 创建excel服务失败_什么是数据驱动测试?学习创建框架
  • mysql cbo优化器_Oracle约束Constraint对于CBO优化器的作用
  • php结合MySQL的柱状图_jpgraph+php+mysql生成柱状图(含代码)
  • 查看有哪些namespace_Linux操作系统中的namespace是个什么鬼
  • zabbix php mysql_Centos7+PHP5.6+MySQL5.7+Zabbix4.0部署
  • 判别式模型python_判别式模型与生成式模型
  • 2019年如何成为全栈工程师?
  • android图片蒙层
  • Consul Config 使用Git做版本控制的实现
  • Docker入门(二) - Dockerfile
  • IDEA 插件开发入门教程
  • java正则表式的使用
  • JS笔记四:作用域、变量(函数)提升
  • Linux gpio口使用方法
  • SQLServer之索引简介
  • 对象管理器(defineProperty)学习笔记
  • 给新手的新浪微博 SDK 集成教程【一】
  • 解决iview多表头动态更改列元素发生的错误
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 探索 JS 中的模块化
  • 一道面试题引发的“血案”
  • 阿里云ACE认证学习知识点梳理
  • 通过调用文摘列表API获取文摘
  • ​queue --- 一个同步的队列类​
  • ​马来语翻译中文去哪比较好?
  • # include “ “ 和 # include < >两者的区别
  • #考研#计算机文化知识1(局域网及网络互联)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)ATF MMU转换表
  • (多级缓存)多级缓存
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十三)Flask之特殊装饰器详解
  • (未解决)macOS matplotlib 中文是方框
  • (转载)从 Java 代码到 Java 堆
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .cn根服务器被攻击之后
  • .NET CLR基本术语
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net wcf memory gates checking failed
  • .Net 代码性能 - (1)
  • .NET设计模式(8):适配器模式(Adapter Pattern)