如何设置 Spark 以提高速度?
我正在运行spark-elasticsearch来分析日志数据。
与200万行(4gig)进行聚合/合并大约需要5分钟。
我正在3台计算机上运行1个主机,3个 worker 。
我将执行程序的内存增加到8g,将ES节点从1增加到3。
我正在客户端模式(https://becominghuman.ai/real-world-python-workloads-on-spark-standalone-clusters-2246346c7040)中运行独立集群
我不使用spark-submit,只是在启动master / workers之后运行python代码
Spark似乎总共推出了3个执行者(来自3个 worker )。
我想稍微调整一下 Spark 以在不做任何调整的情况下获得最佳性能。
我应该采取哪种方式进行优化?
以下是与我的表现相关的设置
conf.set("es.scroll.size", 10000)
conf.set("spark.executor.memory", "8g")
conf.set("spark.driver.memory", "8g")
conf.set("spark.dynamicAllocation.enabled", "true")
conf.set("spark.shuffle.service.enabled", "true")
conf.set("es.nodes.resolve.hostname", "false")
conf.set("spark.driver.extraClassPath", "/usr/local/elasticsearch-hadoop-7.4.2/dist/elasticsearch-spark-20_2.11-7.4.2.jar")
conf.set("es.nodes", settings.ES_HOST)
conf.set("es.nodes.wan.only", 'true')
spark-defaults.conf
# https://becominghuman.ai/real-world-python-workloads-on-spark-standalone-clusters-2246346c7040
spark.sql.execution.arrow.enabled true
# https://spark.apache.org/docs/latest/job-scheduling.html#dynamic-resource-allocation
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
最佳答案
这并不总是内存或群集配置的问题,我建议先尝试在增加内存之前尝试优化正在运行的查询/聚合。
您可以在此处找到Spark Performance Tuning的一些提示。另请参见Tuning Spark。确保查询是最佳的,并避免表现为UDF的性能下降。
对于群集中的执行程序和内存配置,您必须考虑所有计算机上的可用内存和内核以计算适当的参数。这是关于最佳做法的intersting post。