从零开始学习,Apache Spark源码走读(一)

西门子PLC1200与CB1241模块的Modbus RTU从站配置全流程(附串口调试技巧) 本文详细介绍了西门子S7-1200 PLC与CB1241通信模块实现Modbus RTU从站配置的全流程,包括硬件接线规范、TIA Portal工程组态、通信指令编程及串口调试技巧。通过实战案例和常见错误处理方案,帮助工程师快速搭建稳定的工业通信系统,提升自动化设备的互联互通能力。 阅读详情

概要

本文以wordCount为例,详细说明Spark创建和运行job的过程,重点是在进程及线程的创建。

实验环境搭建

在进行后续操作前,确保下列条件已满足。

  1. 下载spark binary 0.9.1
  2. 安装scala
  3. 安装sbt
  4. 安装java

启动spark-shell

单机模式运行,即local模式

local模式运行非常简单,只要运行以下命令即可,假设当前目录是$SPARK_HOME

MASTER=local bin/spark-shell

"MASTER=local"就是表明当前运行在单机模式

local cluster方式运行

local cluster模式是一种伪cluster模式,在单机环境下模拟Standalone的集群,启动顺序分别如下

  1. 启动master
  2. 启动worker
  3. 启动spark-shell

master

$SPARK_HOME/sbin/start-master.sh

 注意运行时的输出,日志默认保存在$SPARK_HOME/logs目录。

master主要是运行类 org.apache.spark.deploy.master.Master,在8080端口启动监听,日志如下图所示

修改配置

  1. 进入$SPARK_HOME/conf目录
  2. 将spark-env.sh.template重命名为spark-env.sh
  3. 修改spark-env.sh,添加如下内容
export SPARK_MASTER_IP=localhost
export SPARK_LOCAL_IP=localhost

运行worker

bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077 -i 127.0.0.1  -c 1 -m 512M
<br>

worker启动完成,连接到master。打开maser的web ui可以看到连接上来的worker. Master WEb UI的监听地址是http://localhost:8080

启动spark-shell

MASTER=spark://localhost:7077 bin/spark-shell

如果一切顺利,将看到下面的提示信息。

Created spark context..
Spark context available as sc.

可以用浏览器打开localhost:4040来查看如下内容

  1. stages
  2. storage
  3. environment
  4. executors

wordcount

上述环境准备妥当之后,我们在sparkshell中运行一下最简单的例子,在spark-shell中输入如下代码

scala>sc.textFile("README.md").filter(_.contains("Spark")).count

上述代码统计在README.md中含有Spark的行数有多少

部署过程详解

Spark布置环境中组件构成如下图所示。

Spark cluster components

  • Driver Program 简要来说在spark-shell中输入的wordcount语句对应于上图的Driver Program。
  • Cluster Manager 就是对应于上面提到的master,主要起到deploy management的作用
  • Worker Node 与Master相比,这是slave node。上面运行各个executor,executor可以对应于线程。executor处理两种基本的业务逻辑,一种就是driver programme,另一种就是job在提交之后拆分成各个stage,每个stage可以运行一到多个task

Notes: 在集群(cluster)方式下,Cluster Manager运行在一个jvm进程之中,而worker运行在另一个jvm进程中。在local cluster中,这些jvm进程都在同一台机器中,如果是真正的Standalone或Mesos及Yarn集群,worker与master或分布于不同的主机之上。

JOB的生成和运行

job生成的简单流程如下

  1. 首先应用程序创建SparkContext的实例,如实例为sc
  2. 利用SparkContext的实例来创建生成RDD
  3. 经过一连串的transformation操作,原始的RDD转换成为其它类型的RDD
  4. 当action作用于转换之后RDD时,会调用SparkContext的runJob方法
  5. sc.runJob的调用是后面一连串反应的起点,关键性的跃变就发生在此处

 调用路径大致如下

  1. sc.runJob->dagScheduler.runJob->submitJob
  2. DAGScheduler::submitJob会创建JobSummitted的event发送给内嵌类eventProcessActor
  3. eventProcessActor在接收到JobSubmmitted之后调用processEvent处理函数
  4. job到stage的转换,生成finalStage并提交运行,关键是调用submitStage
  5. 在submitStage中会计算stage之间的依赖关系,依赖关系分为宽依赖窄依赖两种
  6. 如果计算中发现当前的stage没有任何依赖或者所有的依赖都已经准备完毕,则提交task
  7. 提交task是调用函数submitMissingTasks来完成
  8. task真正运行在哪个worker上面是由TaskScheduler来管理,也就是上面的submitMissingTasks会调用TaskScheduler::submitTasks
  9. TaskSchedulerImpl中会根据Spark的当前运行模式来创建相应的backend,如果是在单机运行则创建LocalBackend
  10. LocalBackend收到TaskSchedulerImpl传递进来的ReceiveOffers事件
  11. receiveOffers->executor.launchTask->TaskRunner.run

代码片段executor.lauchTask

 def launchTask(context: ExecutorBackend, taskId: Long, serializedTask: ByteBuffer) {
    val tr = new TaskRunner(context, taskId, serializedTask)
    runningTasks.put(taskId, tr)
    threadPool.execute(tr)
  }

说了这么一大通,也就是讲最终的逻辑处理切切实实是发生在TaskRunner这么一个executor之内。

运算结果是包装成为MapStatus然后通过一系列的内部消息传递,反馈到DAGScheduler,这一个消息传递路径不是过于复杂,有兴趣可以自行勾勒。

分位数映射数据后处理-Quantile Mapping后处理 (R语言) 统计后处理器基本上是统计模型,将观察到的关注变量与从气象或水文模型的直接模型输出(DMO)导出的适当预测变量相关联。统计后处理的重要性早已在气象预报中得到认可。早期的工作包括完善的预测(perfect prognosis),模型输出统计(MOS)和模拟方法(analog method)等模型。 近年来,已经提出了许多其他后处理方法,包括秩直方图校准(rank histogram calibrati... 阅读详情

相关推荐

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1608

Apache Spark源码走读之2 -- Job的提交与运行

欢迎转载,转载请注明出处,徽沪郎。 概要 本文以wordCount为例,详细说明spark创建和运行job的过程,重点是在进程及线程的创建。 实验环境搭建 在进行后续操作前,确保下列条件已满足。 下载spark binary 0.9.1 安装scala 安装sbt 安装java 启动spark-shell 单机模式运...

weixin_33953249的博客 180

《Python星球日记》 第72天:问答系统与信息检索

《Python星球日记》 第72天:问答系统与信息检索,在前面的日子里,我们学习了自然语言处理的基础知识,包括文本预处理、词向量、Transformer架构和各种预训练模型。今天,我们将探索问答系统这NLP的重要应用,以及如何结合信息检索技术构建智能问答系统。

Code_流苏:在代码中寻诗意,在实践中觅真知 1035

spark-shell启动报错解决办法

spark-shell启动报错解决办法: scala版本不兼容问题 这是因为加入了项目依赖库到/usr/cwgis/app/spark/jars/lib/中 删除相关的scala开头的jar文件即可启动spark-shell [root@node111 ~]# runCmd.sh &amp;quot;rm /usr/cwgis/app/spark/jars/lib/scala*.jar&amp;quot; all ...

hsg77的专栏 5306

Spark 启动Spark Shell环境出错

Spark 启动Spark Shell环境出错 Exception in thread "main" java.lang.NoSuchMethodError: jline.console.completer.CandidateListCompletionHandler.setPrintSpaceAfterFullCompletion(Z)V

m0_65893781的博客 2141

spark任务出现Lost executor报错的几点解决方案

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34113237的博客 2457

Spark 动态资源失效问题排查

文章目录、问题描述二、动态资源相关原理初试executor数量executor数量的变动1、Executor Add2、Executor Remove三、问题定位Spark Task的本地化调度本地化调度级别没有及时推进导致的问题四、解决方案1、问题2、问题二3、总结 、问题描述 最近开启动态资源后,有用户反馈他的任务运行很慢,去Spark HistoryServer页面看了下,发现只剩下...

u013332124的专栏 3万+

许鹏:从零开始学习Apache Spark源码走读

楔子 源码阅读是件非常容易的事,也是件非常难的事。容易的是代码就在那里,打开就可以看到。难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问题是什么。 在对Spark源码进行具体的走读之前,如果想要快速对Spark的有个整体性的认识,阅读Matei Zaharia做的Spark论文是个非常不错的选择。 在阅读该论文的基础之上,再结合Spark作者在2012 Dev

c597753863的专栏 1424

Apache Spark源码走读

ApacheSpark源码走读之3-Task运行期之函数调用关系分析 Spark中间结果处理 1.中间计算任务ShuffleMapTask执行完计算后会将计算状态封装为MapStatus并返回给DAGScheduler 2.DAGScheduler将MapStatus保存到MapOutputTrackerMaster中 3.ResultTask执行到ShuffleRDD(只要是shuf

MrGeroge的博客 619

Spark源码走读11——Standalone

Spark的资源调度由自己实现,主要节点分为Master、Worker、Driver。Driver般运行在Master节点中。Standalone模式般的分布式样也是Master-Slavers的模式,那么关于Master的HA也有多种实现方式: 1)文件系统发生故障立即恢复,当Master节点挂掉则立即恢复 2)Zookeeper的实现方式,如配置参数-Dspark.deploy.re

峰哥的专栏 8498

Apache Spark源码走读系列

http://www.cnblogs.com/hseagle/

glgl2424的专栏 929

Spark源码走读1——RDD

RDD全称Resilient Distributed DataSets,弹性的分布式数据集。是Spark的核心内容。 RDD是只读的,不可变的数据集,也拥有很好的容错机制。他有5个主要特性    -A list of partitions 分片列表,数据能为切分才好做并行计算    -A function for computing each split 个函数计算个分片    -A

峰哥的专栏 1万+

Spark源码走读8——NetWork

网络管理,由于分布式集群,那么无论master还是worker都离不开网络通讯。Network包位于核心源码org.apache.spark.network中。 Connection Connection是个抽象,它有两个子类ReceivingConnection、SendingConnection。接收连接和发送连接。 ReceivingConnection 接收连接。这里面有几个比较

峰哥的专栏 7578

Spark源码走读4——Scheduler

用户提交的Job到DAGScheduler后,会封装成ActiveJob,同时启动JobWaiter监听作业的完成情况。同时依据job中RDD的dependency和dependency属性(NarrowDependency,ShufflerDependecy),DAGScheduler会根据依赖关系的先后产生出不同的stage DAG(result stage, shuffle map stag

峰哥的专栏 2万+

许鹏:从零开始学习Apache Spark源码走读

自2013年6月进入Apache孵化器,Spark已经有来自25个组织的120多位开发者参与贡献。而在不久前,更成为了Apache软件基金会的顶级项目,当下已是知名Hadoop开发商Cloudera和MapR的新宠。 http://www.56.com/p44/v_MTMwNDYzNDY1.html

u014697142的专栏 744

01-spark源码走读本地环境搭建

本地环境准备必备环境spark源码导入IDE安装必备ide插件IDE配置默认maven环境项目配置jdk项目增加scala支持项目切换3.2分支编译源码运行测试类 必备环境 IDE ideaIU-2021.3.2 安装jdk并配置环境变量 maven安装,并配置环境变量 spark源码导入IDE https://github.com/apache/spark git clone https://github.com/apache/spark cd spark ## 这里主要以3.2分支为主,比较稳

qq_31454379的博客 2436

Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码)(zhuan)

Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码 - 徽沪郎 时间 2014-07-17 13:47:00 富贵有定数,学问则无定数 相似文章 (0) 原文  http://www.cnblogs.com/hseagle/p/3850841.html 欢迎转载,转载请注明出处,徽沪郎。 概要 上篇博文讲述了如何通过修改源

张伟的专栏 2395

Apache Spark源码走读之1 -- Spark论文阅读笔记

转自:http://www.cnblogs.com/hseagle/p/3664933.html 楔子 源码阅读是件非常容易的事,也是件非常难的事。容易的是代码就在那里,打开就可以看到。难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问题是什么。 在对Spark源码进行具体的走读之前,如果想要快速对Spark的有个整体性的认识,阅读Matei Za...

132

许鹏:从零开始学习Apache Spark源码走读(三)

许鹏:从零开始学习Apache Spark源码走读(三) 发表于2014-06-18 18:30| 17149次阅读| 来源个人博客| 24 条评论| 作者许鹏 大数据Spark开源技术博客推荐 摘要:自2013年6月进入Apache孵化器,Spark已经有来自25个组织的120多位开发者参与贡献。而在不久前,更成为了Apache软件基金会的顶级项目,当下已是知名Hado

张伟的专栏 1233

RAG技术2025复盘与2026展望[源码]

2025年RAG技术呈现基建成熟收敛、技术从粗狂转向冷静祛魅的特征,开源框架形成dify/coze、maxkb、langraph三足鼎立格局,技术发展历经朴素RAG到多模态GraphRAG的叠代但创新放缓,逐步向具体业务场景结合。2026年趋势聚焦多模态深化、应用场景多元化、技术普及落地,核心原则仍是“面向业务做RAG”,落地需结合实际场景选择适配技术栈。文章详细分析了RAG技术的现状、发展趋势及落地实践,为开发者提供了有价值的参考。

三相维也纳整流器:三相维也纳整流器磁滞控制的Simulink仿真模型-matlab开发

这是三相三电平维也纳整流器的仿真模型。 控制算法采用电压和电流双闭环控制。 外部电压环路为PI控制器,内部电流环路为bang bang滞后控制器。

上一篇: Scala学习笔记(九) - 包和引用
下一篇: spark 案例集群测试整理
下页Pro
博客等级 码龄14年 13粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值