二八杠游戏网

分享几点SparkStreaming调优实践经验

更新:2020-06-06 编辑:二八杠游戏网 来源:二八杠游戏网 热度:3341℃

本文主要介绍SparkStreaming调优实践经验。

将从以下几个方面入手:

数据序列化广播变量并行度批处理间隔内存管理...

在使用Spark和SparkStreaming时,当我们将应用部署在集群上时,可能会碰到运行慢、占用过多资源、不稳定等问题,这时需要做一些优化才能达到最好的性能。有时候一个简单的优化可以起到化腐朽为神奇的作用,使得程序能够更加有效率,也更加节省资源。本文我们就来介绍一些能够提高应用性能的参数和配置。

另外需要指出的是,优化本身是一个具体性很强的事情,不同的应用及落地场景会有不同的优化方式,并没有一个统一的优化标准。本文我们简单聊聊一些在项目中踩过的坑,列举以下常见的优化方式。

▌数据序列化

在分布式应用中,序列化对性能的影响是显著的。如果使用一种对象序列化慢、占用字节多的序列化格式,就会严重降低计算效率。通常在Spark中,主要有如下3个方面涉及序列化:

①在算子函数中使用到外部变量时,该变量会被序列化后进行网络传输。

②将自定义的类型作为RDD的泛型类型时,所有自定义类型对象都会进行序列化。因此这种情况下,也要求自定义的类必须实现Serializable接口。

③使用可序列化的持久化策略时,Spark会将RDD中的每个partition都序二八杠游戏技巧列化成一个大的字节数组。

而Spark综合考量易用性和性能,提供了下面两种序列化库。

①Java序列化:默认情况下,Spark使用Java的对象输出流框架来进行对象的序列化,并且可用在任意实现Java.io.Serializable接口的自定义类上。我们可以通过扩展Java.io.Externalizable来更加精细地控制序列化行为。Java序列化方式非常灵活,但是通常序列化速度非常慢而且对于很多类会产生非常巨大的序列化结果。

②Kryo序列化:Spark在2.0.0以上的版本可以使用Kryo库来非常快速地进行对象序列化,Kryo要比Java序列化更快、更紧凑,但是其不支持所有的Serializable类型,并且在使用自定义类之前必须先注册。

我们可以在初始化SparkConf时,调用conf.set来使用Kryo。一旦进行了这个配置,Kryo序列化不仅仅会用在Shuffling操作时worker节点间的数据传递,也会用在RDDs序列化到硬盘的过程。

Spark官方解释没有将Kryo作为默认序列化方式的唯一原因是,Kryo必须用户自己注册,但是其推荐在网络频繁传输的应用中使用Kryo。

另外值得注意的是,在Spark2.0.0之后,Spark已经默认将Kryo序列化作为简单类型RDD进行Shuffling操作时传输数据的对象序列化方式。

Spark已经自动包含注册了绝大部分Scala的核心类,如果需要向Kryo注册自己的类别,可以使用registerKryoClasses方法。使用Kryo的代码框架如下:

(责任编辑:二八杠游戏网)

本文地址:/xinfan/20200606/5838.html

上一篇:免费分享两款自购IOS付费应用

下一篇:划重点了二八杠游戏网!2020美国CES展必看的TOP10品牌

相关文章