《Scala机器学习》一一3.5 Spark的性能调整

简介: 本节书摘来自华章出版社《Scala机器学习》一 书中的第3章,第3.5节,作者:[美] 亚历克斯·科兹洛夫(Alex Kozlov)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.5 Spark的性能调整
虽然数据管道的高效执行是任务调度器优先考虑的,这是Spark驱动的一部分,有时Spark需要人为给出一些提示。Spark调度主要与两个参数有关:CPU和内存。当然其他资源(如磁盘和网络I/O)也在Spark性能方面发挥重要作用,但目前Spark、Mesos或YARN都不能主动管理它们。
要监控的第一个参数是RDD的分区数,可以从文件中读取RDD时明确指定。常见的Spark错误是分区太多,这样做需要提供更多的并行性。当任务开始/结束时间相对较小的情况下,这样做也可以工作。但是建议减少分区数,特别是在有聚合的情况时。
每个RDD的默认分区数和并行级别由spark.default.parallelism参数决定,可在$ SPARK_HOME/conf/spark-defaults.conf配置文件中定义此参数。具体的RDD的分区数也可以通过coalesce( )或repartition( )方法来显式地更改。
内核总数和有效内存不足会导致任务无法继续进行,通常会造成死锁。当从命令行调用spark-submit、spark-shell或PySpark时,可以用--executor-cores选项来指定每个执行器的内核数。也可以在之前讨论的spark-defaults.conf文件中设置相应的参数。如果内核数量设置得太大,调度器将无法在节点上分配资源,从而导致死锁。
类似地,可通过--executor-memory(或spark.executor.memory属性)选项来指定所有任务请求的堆大小(默认为1G)。如果执行器的内存设制得太大,调度器可能会被死锁,或只能调度节点上有限的执行器。
在计算内核和内存数量时,独立模式中隐含的假设是:Spark是唯一运行的应用程序,这可能是正确。当在Mesos或YARN下运行时,配置集群调度器很重要,它通过Spark驱动来调度执行器对资源的有效请求。相关的YARN属性有:yarn.nodemanager.resource. cpu-vcores和yarn.nodemanager.resource.memory-mb。YARN可能会多给一点请求的内存。YARN的yarn.scheduler.minimum-allocation-mb和yarn.scheduler.increment-allocation-mb属性分别控制着最小值和增量请求值。
JVM还可以使用堆以外的一些内存,例如,用于内部字符串和直接字节缓冲区。spark.yarn.executor.memoryOverhead的属性值被添加到执行器内存,以确定每个执行器对YARN的内存请求。它默认为max(384, .07 * spark.executor.memory)。
由于Spark需要在执行器和客户机节点之间传输数据,高效的序列化非常重要。第6章会介绍不同的序列化框架,但在默认情况下,Spark会使用Kryo来进行序列化,这要求按静态方法显式地注册类。如果运行时发现序列化错误,可能是因为相应的类没有被注册或Kryo不支持它,这种情形出现嵌套和复杂的数据类型。一般来说,若不能非常有效地完成对象序列化,建议避免在执行器之间传递复杂的对象。
驱动具有类似的参数:spark.driver.cores、spark.driver.memory和spark.driver.maxRe-sultSize。后者为从所有执行器收集的结果设置限制,是通过collect方法来进行收集的。让驱动进程不出现内存不足的异常很重要。另一种避免内存不足异常和后续问题的方法是修改管道返回的聚合(或过滤)的结果,也可改用take方法。

相关文章
|
2月前
|
机器学习/深度学习 数据可视化 算法
机器学习中的分类问题:如何选择和理解性能衡量标准
机器学习中的分类问题:如何选择和理解性能衡量标准
机器学习中的分类问题:如何选择和理解性能衡量标准
|
2月前
|
机器学习/深度学习 自然语言处理 算法
机器学习-特征选择:如何用信息增益提升模型性能?
机器学习-特征选择:如何用信息增益提升模型性能?
60 1
|
9天前
|
机器学习/深度学习 数据采集 搜索推荐
机器学习中的特征工程:提升模型性能的关键步骤
【5月更文挑战第3天】特征工程是提升机器学习模型性能的关键,涉及从原始数据中提取、选择和创造特征。它能提高模型预测准确率,简化模型复杂度,增强泛化能力。常用技术包括特征选择(Filter、Wrapper、Embedded方法)、特征构造(组合、多项式、文本特征提取)和特征变换(标准化、归一化、离散化)。通过优化特征工程,可找到最佳特征组合,提升模型性能。
|
10天前
|
机器学习/深度学习 分布式计算 算法
使用Spark进行机器学习
【5月更文挑战第2天】使用Spark进行机器学习
16 2
|
11天前
|
机器学习/深度学习 算法 Python
【Python 机器学习专栏】随机森林算法的性能与调优
【4月更文挑战第30天】随机森林是一种集成学习方法,通过构建多棵决策树并投票或平均预测结果,具有高准确性、抗过拟合、处理高维数据的能力。关键性能因素包括树的数量、深度、特征选择和样本大小。调优方法包括调整树的数量、深度,选择关键特征和参数优化。Python 示例展示了使用 GridSearchCV 进行调优。随机森林广泛应用于分类、回归和特征选择问题,是机器学习中的重要工具。
|
24天前
|
机器学习/深度学习 数据可视化 算法
R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据
|
25天前
|
机器学习/深度学习 大数据
如何通过评估方法评估机器学习模型的性能
如何通过评估方法评估机器学习模型的性能
9 0
|
1月前
|
机器学习/深度学习
机器学习第13天:模型性能评估指标
机器学习第13天:模型性能评估指标
28 0
|
2月前
|
机器学习/深度学习 存储 监控
使用Scala编写控制局域网上网软件的机器学习算法
在当今数字化世界中,对于使用控制局域网上网软件控制上网活动的需求越来越迫切。无论是家庭、学校还是企业,都需要有效的方法来监控和管理用户在局域网上的上网行为。本文将介绍如何使用Scala编写机器学习算法来实现这一目标,同时提供一些代码示例来说明具体的实现方式。
129 0
|
2月前
|
人工智能 前端开发 PyTorch
AI加速引擎PAI-TorchAcc:整体介绍与性能概述
PAI-TorchAcc(Torch Accelerator)是阿里云人工智能平台PAI开发的Pytorch上的大模型训练加速框架。PAI-TorchAcc提供了一套基于Pytorch的简洁、易用的接口,无需进行模型转换就可以无缝地接入HuggingFace上的模型,并用多种分布式策略进行训练加速。本文详细介绍PAI-TorchAcc的产品能力与性能。