博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Spark大数据分析:核心概念、技术及实践》一3.3 应用运行
阅读量:7102 次
发布时间:2019-06-28

本文共 1113 字,大约阅读时间需要 3 分钟。

本节书摘来自华章出版社《Spark大数据分析:核心概念、技术及实践》一书中的第3章,第3.1节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 应用运行 

本节主要描述数据处理代码是怎么在Spark集群中执行的。

3.3.1 术语

先来看看几个术语的定义。

shuffle操作。shuffle操作是指在集群节点上对数据进行重新分配。这是一个耗时操作,因为它涉及在网络间传输数据。需要注意的是,shuffle操作不是对数据进行随机重新分配,它按照某些标准将数据分成不同的集合。每一个集合就是一个新的分区。

作业。作业是一系列计算的集合,Spark执行这些计算并将结果返回给驱动程序。作业本质上就是在Spark集群上运行数据处理算法。一个应用程序可以发起多个作业。本章稍后将会介绍作业是怎么执行的。

阶段。一个阶段由若干个任务构成。Spark将一个作业分解为一个由若干个阶段构成的DAG,每一个阶段依赖于其他阶段。举个例子,把一个作业分解为阶段0和阶段1两个阶段。只有当阶段0完成之后,才可以开始阶段1。Spark利用shuffle边界将任务分成不同的阶段。不要求shuffle操作的任务属于同一阶段。只有在开始一个新阶段时,任务才需要输入数据是经过shuffle操作的。

3.3.2 应用运行过程

有了上面的这些定义,我们就可以描述一个Spark应用在集群节点上并行处理数据的过程。当一个Spark应用开始运行的时候,Spark会连接集群管理员,获取在worker节点上的执行者资源。就像前面所说的,Spark应用把一个数据处理算法当成一个作业提交。Spark将这个作业分解成由若干个阶段构成的DAG。然后,Spark在执行者上调度这些阶段的运行,调度操作由集群管理员提供的底层调度器实现。执行者并行地运行Spark提交的任务。

每一个Spark应用都有一组其自己的位于worker节点上的执行者。这样的设计有诸多好处。首先,不同应用中的任务由于运行在不同JVM之上,使得它们之间互相隔离。一个应用程序中的错误任务并不会让其他应用崩溃。其次,调度任务变得轻而易举。Spark一次只需要调度归属于同一应用的任务。它不用处理这样一种复杂情况,其中调度的多个任务属于多个并发执行的不同应用。

然而,这种设计也有不足之处。由于不同应用在不同的JVM进程中运行,因此它们之间就不太方便共享数据。即使它们可能在同一个worker节点上运行,它们也只能通过读写磁盘的方式共享数据。就像前面所说的,读写磁盘是耗时的操作。因此,应用间通过磁盘共享数据,将会遇到性能问题。

转载地址:http://vruhl.baihongyu.com/

你可能感兴趣的文章
细说Reactor模式
查看>>
JavaScript基础:常用数组函数
查看>>
MySQL-导入数据
查看>>
跨域前后端代码
查看>>
寻找水王2
查看>>
C# messagebox 居中父窗体
查看>>
android 设置文本框不能获取到焦点
查看>>
git 四个区五种状态
查看>>
mac中nvm的安装和使用
查看>>
使用JDBC连接数据库报“找不到驱动程序”错误解决
查看>>
Apache双机热备
查看>>
[转]Kinect for Windows SDK开发入门(一):开发环境配置
查看>>
springsource-tool-suite插件各个历史版本
查看>>
Java线程:线程栈模型与线程的变量
查看>>
Java线程:新特征-线程池
查看>>
ORA-01940: cannot drop a user that is currently connected 问题解析
查看>>
【转】JSTL 核心标签库 使用
查看>>
Excel 中如何快速统计一列中相同字符的个数(函数法)
查看>>
阮一峰 ---开发者手册
查看>>
Java中的运算符和各种运算符的优先级和结合性及注意事项整理
查看>>