我们正在以下硬件上运行用JAVA编写的SPARK应用程序:
具有以下<代码>配置/spark submit命令:
--执行器内存=30GB--驱动程序内存=20G--执行器内核=5--驱动程序内核=5
我们正在使用SPARK集群管理器。
处理1000万个数据需要13分钟。
我们无权共享应用程序代码。
是否有人可以建议配置以优化我们的应用程序以获得更好的性能?
如果你需要任何其他细节,请告诉我。
我们正在使用SPARK 2.3.0
编辑
我们的数据包含127列和1000万行。spark使用上述配置启动了32个执行器。我们正在flatmap函数中进行外部应用程序调用。
你觉得如果硬件资源不够呢?
如果您在Spark standalone群集上,可以尝试将“executor cores=5”设置设置为较低的设置,如果您的操作不是CPU密集型的,则可以使用更多的执行器。另外,请尝试将“执行器核心总数”(total executor cores)设置为88(或您要提供的核心的最大数量,此参数控制您将拥有的执行器数量),以便更好地控制。
当你开始编写Apache Spark代码或者浏览公开的API的时候,你会遇到诸如transformation,action,RDD等术语。了解到这些是编写Spark代码的基础。同样,当你任务开始失败或者你需要透过web界面去了解自己的应用为何如此费时的时候,你需要去了解一些新的名词:job, stage, task。对于这些新术语的理解有助于编写良好Spark代码。这里的良好主要指更快的Spark
由于大部分Spark计算都是在内存中完成的,所以Spark程序的瓶颈可能由集群中任意一种资源导致,如:CPU、网络带宽、或者内存等。最常见的情况是,数据能装进内存,而瓶颈是网络带宽;当然,有时候我们也需要做一些优化调整来减少内存占用,例如将RDD以序列化格式保存。 本文将主要涵盖两个主题:1.数据序列化(这对于优化网络性能极为重要);2.减少内存占用以及内存调优。同时,我们也会提及其他几个比较小的
本文向大家介绍Spark性能如何调优?相关面试题,主要包含被问及Spark性能如何调优?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 避免创建重复的RDD,尽量复用同一RDD,尽量避免使用shuffle类算子,优化数据结构,使用Hive ETL预处理数据,过滤少数导致倾斜的key,提高shuffle操作的并行度,两阶段聚合,将reduce join转为map join。
由于大部分Spark计算都是在内存中完成的,所以Spark程序的瓶颈可能由集群中任意一种资源导致,如:CPU、网络带宽、或者内存等。最常见的情况是,数据能装进内存,而瓶颈是网络带宽;当然,有时候我们也需要做一些优化调整来减少内存占用。
对于某些工作负载,可以在通过在内存中缓存数据或者打开一些实验选项来提高性能。 在内存中缓存数据 Spark SQL可以通过调用sqlContext.cacheTable("tableName")方法来缓存使用柱状格式的表。然后,Spark将会仅仅浏览需要的列并且自动地压缩数据以减少内存的使用以及垃圾回收的 压力。你可以通过调用sqlContext.uncacheTable("tableName")
集群中的Spark Streaming应用程序获得最好的性能需要一些调整。这章将介绍几个参数和配置,提高Spark Streaming应用程序的性能。你需要考虑两件事情: 高效地利用集群资源减少批数据的处理时间 设置正确的批容量(size),使数据的处理速度能够赶上数据的接收速度 减少批数据的执行时间 设置正确的批容量 内存调优