如何提高emr集群的spark性能

vsmadaxz  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(351)

我正在查看consolidate位置,在这里我可以查看需要在spark job中调优的高级别的所有参数,以从集群中获得更好的性能,前提是您已经分配了足够的节点。我确实浏览了链接,但一次处理太多了https://spark.apache.org/docs/2.4.5/configuration.html#available-属性
我在下面列出了我的发现,这将有助于人们在深入研究上面与用例的联系之前先看一下

kninwzqo

kninwzqo1#

下面是我发现有助于调整作业的参数列表,每当我发现某个参数的用例时,我都会将其附加在后面
参数park.scheduler.modefair或fifo要查找的内容,这决定您要如何将执行器分配到作业执行器内存检查执行器中的oom如果您发现它们将要oom可能这就是原因或检查执行器核心值,无论它们是否太小,都会导致执行器上的负载
https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.htmldriver-memoryif 您正在执行一种收集类型的操作(即,将数据发送回驱动程序的任何操作),然后查找调整此值Executor coresits值实际上取决于您要查找的处理类型是什么多线程方法/轻流程。下面的文档可以帮助您更好地理解它
https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.htmlspark.default.parallelismthis 在减少作业执行时间方面帮了我们不少忙,最初运行作业时没有这个值&观察集群默认设置了什么值(它是基于集群大小的)。如果你看到这个值太高,那么就试着降低它,我们通常会将它降低到下面的逻辑
最大核心节点数每台机器的线程数+最大按需节点数每台机器的线程数+最大点节点数*每台机器的线程数park.sql.shuffle.partitions此值在作业对数据进行完全无序处理时使用,例如,如果没有在联接上重新分区,则使用交叉联接或内部联接的dfclausedynamic executor allocation这在很大程度上帮助了我们摆脱了为作业分配确切数量的执行者的痛苦。尝试调整belowspark.dynamicalocation.minexecutors以启动应用程序需要这些数量的执行器,否则它将无法启动。当您不想让作业在1或2个可用的executorsspark.dynamicalocation.maxexecutors上爬行时,这非常有用。如果作业的多作业群集运行并行jobspark.dynamicalocation.initialexecutors,则可以使用最大数量的执行器来确保作业不会消耗所有群集资源驱动程序在将作业派生给执行者之前正在执行一些初始作业,例如列出文件夹中的文件,以便在作业结束时仅删除这些文件。这确保了您可以提供min executors,但可以首先知道驱动程序将需要一些时间来启动spark.dynamicalocation.executidletimeout这对于上述情况也很有帮助,即驱动程序正在执行一些工作,没有任何可分配给执行程序的内容,您不希望它们超时重新分配遗嘱执行人需要一段时间
https://spark.apache.org/docs/2.4.5/configuration.html#dynamic-分配试图减少在写入分区时创建的文件数因为我们的数据在写入分区时被不同的执行器读取每个执行器将写入自己的文件。这将导致创建大量的小文件&在intern中,对这些文件的查询将非常繁重。有两种方法
coalesce:这将尝试在执行器之间进行最小的洗牌,并将创建一个不均匀的文件大小
重新分区:这将对数据进行洗牌并创建大小相等的文件
https://stackoverflow.com/questions/31610971/spark-repartition-vs-
coalescemaxrecordsperfile:此参数有助于通知spark,在连接小df和大df时,每个文件要查找多少条记录检查是否可以在默认情况下使用小df的广播spark使用sort merge join,但是如果表的大小很小,请查看是否可以广播这些变量
https://towardsdatascience.com/the-art-of-joining-in-spark-dcbd33d693c
如何使用广播:https://stackoverflow.com/a/37487575/814074
下面的参数您需要寻找做广播连接arespark.sql.autobroadcastjointhresholds这有助于spark了解对于给定大小的df是否使用广播连接spark.driver.maxresultsizemax结果将返回给驱动程序,以便在驱动程序正在广播此结果时可以广播驱动程序内存需要是biggerspark.network.timeout spark.executor.heartbeatintervalthis有助于在驱动程序中突然终止执行器的情况下,可能有多种原因,但如果没有特别发现,可以检查这些参数
https://spark.apache.org/docs/2.4.5/configuration.html#execution-behaviordata在客户之间有偏差请尝试找出一种方法,在该方法中,您可以按每个客户的数量降序触发作业。这可以确保集群在初始运行期间被很好地占用&长时间运行的客户在小客户完成其工作时可以得到一些时间。另外,如果给定客户没有数据,您可以删除客户,以减少集群上的负载

相关问题