Tuning (调试)

2024-04-05 02:48
文章标签 调试 tuning

本文主要是介绍Tuning (调试),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Tuning Spark

由于大多数Spark计算的内存特性,Spark程序可能会受到群集中任何资源的瓶颈:CPU,网络带宽或内存。 大多数情况下,如果数据适合内存,瓶颈就是网络带宽,但有时候,您还需要进行一些调整,例如以序列化形式存储RDD,以减少内存使用。 本指南将介绍两个主要主题:数据序列化,这对于良好的网络性能至关重要,还可以减少内存使用和内存调整。 我们还草拟了几个较小的主题。

Data Serialization

序列化在任何分布式应用程序的性能中起着重要作用。 将对象序列化或消耗大量字节的速度慢的格式将大大减慢计算速度。 通常,这将是您应该优化Spark应用程序的第一件事。 Spark旨在在便利性(允许您使用操作中的任何Java类型)和性能之间取得平衡。 它提供了两个序列化库:

  • Java序列化:默认情况下,Spark使用Java的ObjectOutputStream框架序列化对象,并且可以与您创建的任何实现java.io.Serializable的类一起使用。 您还可以通过扩展java.io.Externalizable来更紧密地控制序列化的性能。 Java序列化是灵活的,但通常很慢,并导致许多类的大型序列化格式。
  • Kryo序列化:Spark还可以使用Kryo库(版本2)更快地序列化对象。 Kryo比Java序列化(通常高达10倍)显着更快,更紧凑,但不支持所有Serializable类型,并且需要您提前注册您将在程序中使用的类以获得最佳性能。

您可以通过使用SparkConf初始化作业并调用conf.set(“spark.serializer”,“org.apache.spark.serializer.KryoSerializer”)来切换到使用Kryo。 此设置配置序列化程序,不仅用于在工作节点之间混洗数据,还用于将RDD序列化到磁盘。 Kryo不是默认值的唯一原因是因为自定义注册要求,但我们建议在任何网络密集型应用程序中尝试它。 从Spark 2.0.0开始,我们在使用简单类型,简单类型数组或字符串类型对RDD进行混洗时,内部使用Kryo序列化程序。

Spark自动包含Kryo序列化程序,用于来自Twitter chill库的AllScalaRegistrar中涵盖的许多常用核心Scala类。

要使用Kryo注册自己的自定义类,请使用registerKryoClasses方法。

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

Kryo文档描述了更高级的注册选项,例如添加自定义序列化代码。
如果您的对象很大,您可能还需要增加spark.kryoserializer.buffer配置。 此值必须足够大才能容纳要序列化的最大对象。
最后,如果你没有注册你的自定义类,Kryo仍然会工作,但它必须存储每个对象的完整类名,这是浪费。

Memory Tuning

调整内存使用量有三个注意事项:对象使用的内存量(您可能希望整个数据集适合内存),

这篇关于Tuning (调试)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877469

相关文章

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依