每个数据科学家都应该知道的 5 种 Spark 优化技术
已发表: 2020-06-12无论是小型初创公司还是大型公司,数据无处不在。 这些数据是从各种来源收集的,例如客户日志、办公室账单、成本表和员工数据库。 公司收集和分析这些数据块以确定模式和趋势。 这些模式帮助他们为增强业务做出重要决策。
但是,这种数据分析和数字运算仅通过 Excel 表格是不可能的。 这就是数据处理软件技术的用武之地。最快和广泛使用的数据处理框架之一是 Apache Spark。 Spark 优化技术用于调整其性能以充分利用它。
我们稍后将了解这些技术。 让我们围绕这个软件框架的基础知识展开思考。
目录
什么是 Apache Spark?
Apache Spark 是世界著名的开源集群计算框架,用于处理公司中的海量数据集。 使用 Apache Spark 可以轻松处理这些庞大的数据集并将其分布在多个系统中。 它提供了简单的 API,使程序员和开发人员的生活变得轻松。
Spark 为 Python、R、Scala 和 Java 等编程语言提供本机绑定。 它支持机器学习、图形处理和SQL 数据库。 由于这些惊人的好处,Spark 被用于银行、科技公司、金融组织、电信部门和政府机构。 要了解有关 apache spark 的更多信息,请查看我们来自知名大学的数据科学课程。
Apache Spark 的架构
Apache Spark 的运行时架构由以下组件组成:
Spark 驱动程序或主进程
这会将程序转换为任务,然后为执行程序(从属进程)安排它们。 任务调度器将这些任务分发给执行者。
集群管理器
Spark 集群管理器负责启动执行器和驱动程序。 它在集群的多个主机上调度和分配资源。
执行者
执行器,也称为从属进程,是执行作业任务的实体。 启动后,它们会一直运行,直到 Spark 应用程序的生命周期结束。 如果 executor 失败,Spark 作业的执行不会停止。
弹性分布式数据集 (RDD)
这是一组不可变的数据集,分布在 Spark 集群的节点上。 值得注意的是,集群是可以安装 Spark 的分布式系统的集合。 RDD 被分成多个分区。 而且,它们被称为弹性,因为它们可以在数据失败的情况下修复数据问题。
Spark 支持的 RDD 类型有:
- 从Hadoop 分布式文件系统上的文件构建的 Hadoop 数据集
- 并行化集合,可以基于 Scala 集合
DAG(有向无环图)
只要将代码输入 Spark 控制台,Spark 就会创建一个图表。 如果触发了某个动作(执行操作的指令),则将此图提交给DAGScheduler 。
该图可以被视为一系列数据操作。 DAG 由顶点和边组成。 顶点表示一个 RDD,边表示要在该特定 RDD 上执行的计算。 它被称为有向图,因为图中没有循环或循环。
火花优化技术
Spark优化技术用于修改Spark的设置和属性,确保资源得到合理利用,作业快速执行。 所有这些最终都有助于有效地处理数据。
下面列出了最流行的Spark 优化技术:
1.数据序列化
在这里,内存中的对象被转换为另一种格式,可以存储在文件中或通过网络发送。 这提高了分布式应用程序的性能。 序列化数据的两种方式是:
- 爪哇 序列化– ObjectOutputStream框架用于序列化对象。 java.io.Externalizable 可用于控制序列化的性能。 这个过程提供了轻量级的持久性。
- Kyro 序列化——Spark 使用Kryo 序列化库 (v4)来序列化对象,这比 Java 序列化更快,并且是一个更紧凑的过程。 为了提高性能,必须使用 registerKryoClasses 方法注册类。
2.缓存
这是一种在更频繁地需要数据时使用的有效技术。 Cache() 和 persist() 是该技术中使用的方法。 这些方法用于存储 RDD、DataSet 和 DataFrame 的计算。 但是,cache() 将其存储在内存中,persist() 将其存储在用户定义的存储级别。

当使用重复计算时,这些方法可以帮助降低成本并节省时间。
阅读: Apache PySpark 中的数据框:综合教程
3.数据结构调优
我们可以通过调整某些可能会增加开销的 Java 特性来减少使用 Spark 时的内存消耗。 这可以通过以下方式实现:
- 使用枚举对象或数字 ID 代替字符串作为键。
- 避免使用大量对象和复杂的嵌套结构。
- 如果内存大小小于 32 GB,请将 JVM 标志设置为 xx:+UseCompressedOops。
4.垃圾回收优化
为了优化垃圾收集器,必须使用 G1 和 GC 来运行 Spark 应用程序。 G1 收集器管理不断增长的堆。 根据生成的日志进行 GC 调整是必不可少的,以控制应用程序的意外行为。 但在此之前,需要对程序的逻辑和代码进行修改和优化。
G1GC 通过优化进程之间的暂停时间来帮助减少作业的执行时间。
5. 内存管理
用于存储计算(例如连接、混洗、排序和聚合)的内存称为执行内存。 存储内存用于缓存和处理存储在集群中的数据。 两个内存都使用一个统一的区域 M。
当执行内存不使用时,存储内存可以使用该空间。 同样,当存储内存空闲时,执行内存可以利用该空间。 这是最有效的Spark 优化技术之一。
另请阅读: Apache Spark 的 6 个改变游戏规则的功能
结论
从各种Spark 优化技术中,我们可以了解它们如何帮助缩短处理时间并更快地处理数据。 开发人员和专业人员根据应用程序和相关数据量应用这些技术。
如果您想了解火花优化、数据科学,请查看 IIIT-B 和 upGrad 的数据科学执行 PG 计划,该计划专为在职专业人士创建,提供 10 多个案例研究和项目、实用的实践研讨会、行业指导专家,与行业导师一对一,400 多个小时的学习和顶级公司的工作协助。
什么是 Spark 优化技术?
Apache Spark 让企业可以轻松快速地处理数据,轻松解决复杂的数据问题。 显然,在任何程序的开发过程中,关注其性能是非常重要的。 Spark 优化技术有助于内存数据计算。 唯一可以阻碍这些计算的是内存、CPU 或任何其他资源。
每种火花优化技术都用于不同的目的并执行某些特定的操作。 一些广泛使用的火花优化技术是:
1.序列化
2.API选择
3.提前变量
4.缓存和持久化
5.ByKey操作
6.文件格式选择
7.垃圾收集调优
8. 并行度
什么时候不应该考虑使用 Spark?
Apache Spark 有很多用例,但在某些特殊需求中,您需要其他大数据引擎来实现这一目的。 在这种情况下,建议使用其他技术而不是使用 Spark。 以下是不应考虑使用 Spark 的用例:
1. 计算能力低——Apache Spark 上的默认处理发生在集群内存中。 如果您的虚拟机或集群的计算能力很小,您应该选择其他替代方案,例如 Apache Hadoop。
2. 发布-订阅模型中的数据摄取——在这种情况下,有多个来源和多个目的地,数百万数据在短时间内被移动。 在这里,您不应该使用 Spark,而应使用 Apache Kafka。
Pandas 比 Apache Spark 快吗?
当您比较 Pandas DataFrame 和 Spark DataFrame 的计算速度时,您会注意到 Pandas DataFrame 的性能在小型数据集上略胜一筹。 另一方面,如果数据量增加,则发现 Spark DataFrame 的性能足以胜过 Pandas DataFrame。 因此,它将在很大程度上取决于数据量。