《Spark大数据分析:核心概念、技术及实践》一3.9 共享变量

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


3.9 共享变量

Spark使用的架构是无共享的。数据分布在集群的各个节点上,每个节点都有自己的CPU、内存和存储资源。没有全局的内存空间用于任务间共享。驱动程序和任务之间通过消息共享数据。

举例来说,如果一个RDD操作的函数参数是驱动程序中变量的引用,Spark会将这个变量的副本以及任务一起发送给执行者。每个任务都有一份变量的副本并把它当成只读变量使用。任何对这个变量的更新都只存在任务的内部,改动并不会回传给驱动程序。而且Spark会把这个变量在每一个阶段的开始发送给worker节点。

对于一些应用而言,这种默认行为是低效的。在一个实际的使用场景中,驱动程序在作业的任务间共享了一个巨大的查找表。而这个作业由多个阶段构成。默认情况下,Spark会自动将这个变量及其相关任务发送给每个执行者。然而,Spark会在每个阶段做这件事。如果这个查找表存储了100MB的数据,并且这个作业涉及10个阶段,那么Spark就会给每个worker节点发送10次100MB的相同数据。

另外一个使用场景是在每个运行在不同节点上的任务中需要更新全局变量。默认情况下,任务中对变量的更新是不会回传给驱动程序的。

Spark通过共享变量的概念来满足这些使用场景的需求。

3.9.1 广播变量

广播变量的使用使得Spark应用可以有效地在驱动程序和执行作业的任务之间共享数据。Spark只会给worker节点发送一次广播变量,并且将它反序列化成只读变量存储在执行者的内存中。而且,Spark采用一种更高效的算法来发布广播变量。

注意,如果一个作业由多个阶段构成,且阶段中的任务使用同一个驱动程序的变量,那么使用广播变量是十分有用的。如果你不想在开始执行每个任务之前反序列化变量,使用广播变量也是有益的。默认情况下,Spark会将传输过来的变量以序列化的形式缓存在执行者的内存中,在开始执行任务之前再反序列化它。

SparkContext 类提供了一个叫作broadcast的方法用于创建广播变量。它把一个待广播的变量作为参数,返回一个Broadcast类实例。一个任务必须使用Broadcast对象的value方法才可以获取广播变量的值。

考虑这样一个应用,它根据电商交易信息生成交易详情。在现实世界的应用中会有一张顾客表、一张商品表和一张交易表。为了简化起见,我们直接用一些简单的数据结构来代替这些表作为输入数据。

 

使用广播变量使得我们可以高效地实现顾客数据、商品数据和交易数据之间的连接。我们可以通过使用RDD API来实现连接操作,但是这会在网络间对顾客数据、商品数据和交易数据做shuffle操作。使用广播变量,我们使得Spark只将顾客数据和商品数据发送给每个节点一次,并且用简单的map操作来代替耗时的join操作。

3.9.2 累加器

累加器是只增变量,它可以被运行在不同节点上的任务更改并且被驱动程序读取。它可以用于计数器和聚合操作。Spark提供了数值类型的累加器,也支持创建自定义类型的累加器。

SparkContext类提供了一个叫作accumulator的方法用于创建累加器变量。它有两个参数。第一个参数是累加器的初值,第二个是在Spark UI中显示的名字,这是一个可选参数。它返回一个Accumulator类实例。这个类实例为操作累加器变量提供操作符。任务只能采用add方法或者+=操作符来增加累加器变量的值。只有驱动程序可以通过value方法来获取累加器的值。

考虑这样一个应用,它需要从顾客表中过滤出不合法的顾客并计数。在现实世界的应用中,我们会从硬盘中读取数据并将过滤后的数据写入到硬盘中的另外一个文件。为简化起见,我们跳过读写硬盘的部分。

 

 

在使用累加器的时候需要注意,转换操作期间对累加器的更新无法保证恰好只有一次。如果一个任务或一个阶段重复执行,每一个任务的更新操作就会多次执行。

而且,对累加器的更新操作并不是在RDD的操作方法被调用时才执行的。RDD的转换操作是惰性的,转换操作中对累加器的更新并不会立即执行。因此,如果驱动程序在操作方法被调用之前就使用累加器的值,那么它将得到一个错误的值。

相关文章
|
4月前
|
机器学习/深度学习 分布式计算 算法
Spark快速大数据分析PDF下载读书分享推荐
《Spark快速大数据分析》适合初学者,聚焦Spark实用技巧,同时深入核心概念。作者团队来自Databricks,书中详述Spark 3.0新特性,结合机器学习展示大数据分析。Spark是大数据分析的首选工具,本书助你驾驭这一利器。[PDF下载链接][1]。 ![Spark Book Cover][2] [1]: https://zhangfeidezhu.com/?p=345 [2]: https://i-blog.csdnimg.cn/direct/6b851489ad1944548602766ea9d62136.png#pic_center
174 1
Spark快速大数据分析PDF下载读书分享推荐
|
21天前
|
机器学习/深度学习 算法 大数据
大数据中按变量删除(Variable Deletion)
【10月更文挑战第22天】
32 5
|
20天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
71 2
|
21天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
59 1
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
77 4
|
1月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
39 0
|
2月前
|
分布式计算 Java Apache
Apache Spark Streaming技术深度解析
【9月更文挑战第4天】Apache Spark Streaming是Apache Spark生态系统中用于处理实时数据流的一个重要组件。它将输入数据分成小批次(micro-batch),然后利用Spark的批处理引擎进行处理,从而结合了批处理和流处理的优点。这种处理方式使得Spark Streaming既能够保持高吞吐量,又能够处理实时数据流。
70 0
|
4月前
|
分布式计算 Java Serverless
EMR Serverless Spark 实践教程 | 通过 spark-submit 命令行工具提交 Spark 任务
本文以 ECS 连接 EMR Serverless Spark 为例,介绍如何通过 EMR Serverless spark-submit 命令行工具进行 Spark 任务开发。
411 7
EMR Serverless Spark 实践教程 | 通过 spark-submit 命令行工具提交 Spark 任务
|
4月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
150 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
4月前
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
45 10
下一篇
无影云桌面