spark优化指南

原创 2018年04月15日 16:51:46

Spark 程序可能由集群中的任何资源( CPU ,网络带宽或内存)导致瓶颈。首先我们先来介绍了一下spark内存管理的基本原理。后面介绍了内存调优的几种方法。


1. 内存管理概述

Spark中的内存使用大部分属于两类:执行和存储。 执行内存是指用于在混洗,连接,排序和聚合中进行计算的内存,而存储内存指的是用于跨群集缓存和传播内部数据的内存。 在Spark中,执行内存和存储内存共享统一区域(M)。 当不使用执行内存时,存储可以获取所有可用内存,反之亦然。 如有必要,执行内存可能会挤占存储内存空间,但只能在总存储内存使用量低于特定阈值(R)时才执行。 换句话说,R描述了M中的一个子区域,其中缓存块空间不会被挤占。 由于执行的复杂性,存储不会挤占执行内存空间。


2. 内存调优

在调整内存使用情况时有三个注意事项:对象使用的内存量(您可能希望整个数据集适合内存),访问这些对象的成本以及垃圾收集的开销。我们可以使用下面的几种方法来对内存进行优化。

2.1 调整数据结构

减少内存消耗的第一种方法是避免增加开销的Java功能,例如基于指针的数据结构和包装对象。

2.2序列化RDD存储

减少内存使用量的一种更简单的方法是以序列化的形式存储它们。以序列化格式存储数据的唯一缺点是访问时间较慢,这是由于必须对每个对象进行反序列化。 如果你想以序列化的形式缓存数据,我们强烈推荐使用Kryo,因为它比Java序列化(当然也比原始的Java对象)要小得多。

2.2.1 数据序列化

spark提供了两种序列化库:
1. Java serialization: 默认情况下,Spark使用Java的ObjectOutputStream框架来序列化对象。
2. Kryo serialization:Spark还可以使用Kryo库(版本2)更快地序列化对象。 Kryo比Java序列化速度更快且更紧凑(通常高达10倍),但不支持所有的Serializable类型,并且需要事先注册您将在程序中使用的类以获得最佳性能。建议在任何网络密集型应用程序中尝试使用它。通过调用conf.set(“spark.serializer”,“org.apache.spark.serializer.KryoSerializer”)来切换到Kryo。可以使用 registerKryoClasses 方法来注册自己的自定义类,例如:

val conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)

2.3 垃圾收集(GC)调整

垃圾收集( garbage collection)的成本与Java对象的数量成正比,因此使用较少对象的数据结构会大大降低此成本。

2.4 其他需要注意的地方

2.4.1 并行度水平

一般来说,我们建议您的群集中每个CPU内核有2-3个任务。

2.4.2 广播大的变量

使用SparkContext中可用的广播功能可以大大减少每个序列化任务的大小和通过群集启动作业的成本。 如果您的任务使用其内部驱动程序中的任何大对象,请考虑将其转换为广播变量。

2.4.3 数据本地化

如果数据和运行在其上的代码在一起,那么计算就会很快。 但是,如果代码和数据是分开的,就必须转移一个到另一个上。 通常,由于代码大小比数据小得多,因此将序列化代码从一个地方运送到另一个地方比一个数据块的移动要更快。


END

Spark性能优化指南——基础篇

前言 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作...
  • guohecang
  • guohecang
  • 2016-05-03 16:12:28
  • 1770

Spark性能优化指南一——基础篇

1.Spark调优有哪些原则? 2.Spark作业原理是什么? 3.怎样进行参数调优? 前言 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖...
  • Losteng
  • Losteng
  • 2016-11-27 20:13:56
  • 949

Spark性能优化指南高级篇

转载自 http://tech.meituan.com/spark-tuning-pro.html 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spar...
  • zlx510tsde
  • zlx510tsde
  • 2016-10-26 15:28:01
  • 1518

我的新书《Hadoop+Spark生态系统操作与实战指南》已经上架

致 青 春        赶在儿子1岁生日之际,赶在我30岁告别之际,我撰写《Hadoop+Spark生态系统操作与实战指南》一书,作为我儿子的生日礼物。我借【时光之手】合上我30年青春的最后一...
  • silentwolfyh
  • silentwolfyh
  • 2017-08-07 20:22:59
  • 3570

《Hadoop + Spark生态系统 操作与实战指南》

《Hadoop + Spark生态系统 操作与实战指南》 内 容 简 介 本书用于Hadoop+Spark快速上手,本书全面解析Hadoop和Spark生态系统,通过原理解说和实例操作每一...
  • brucexia
  • brucexia
  • 2017-09-11 11:58:56
  • 1227

大数据:Spark性能优化指南 高级篇

大数据:Spark性能优化指南 高级篇 热点网2016-05-16 15:06:55阅读(163)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作...
  • javastart
  • javastart
  • 2016-07-10 21:08:00
  • 2719

Spark中文指南(入门篇)-Spark编程模型(一)

前言 本章将对Spark做一个简单的介绍,更多教程请参考:Spark教程 本章知识点概括 Apache Spark简介 Spark的四种运行模式 Spark基于Standlone的运行流程 S...
  • u010994304
  • u010994304
  • 2016-06-27 19:08:07
  • 1490

[妙手回春]网站可用性测试及优化指南

  • 2014年11月26日 09:33
  • 10.12MB
  • 下载

Tensorflow on Spark爬坑指南

北京 上海巡回站 | NVIDIA DLI深度学习培训2018年1月26/1月12日NVIDIA 深度学习学院 带你快速进入火热的DL领域阅读全文                           ...
  • leadai
  • leadai
  • 2018-01-03 00:00:00
  • 216

Spark SQL之Join优化

SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL的总体流程,一般地,我们有两种方式使用SparkSQL,一种是直接写sql语句,这个需要有元数据库支持,例如...
  • weixin_37136725
  • weixin_37136725
  • 2018-01-06 15:23:07
  • 346
收藏助手
不良信息举报
您举报文章:spark优化指南
举报原因:
原因补充:

(最多只允许输入30个字)