使用Simple Scans进行Spark SQL性能

时间:2015-08-14 21:11:45

标签: performance memory apache-spark apache-spark-sql

我在3台计算机上使用集群(独立模式)上的Spark 1.4,用于类似于TPCH的工作负载(具有多路/多路大型连接和聚合的分析查询)。每台机器有12GB内存和4个内核。我的总数据大小为150GB,存储在HDFS中(存储为Hive表),我使用hive上下文通过Spark SQL运行查询。 在检查了火花页面上的性能调整文档和最新火花峰会的一些片段之后,我决定在我的spark-env中设置以下配置:

ClientHello

(由于我的任务往往很长,所以启动多个JVM的开销,每个工作一个JW远小于总查询时间)。当我监视作业进度时,我意识到虽然Worker内存为2.5GB,但执行程序(每个worker一个)的最大内存为512MB(默认值)。我在应用程序中将此值放大为:

SPARK_WORKER_INSTANCES=4
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=2500M

尝试将每个worker的最大可用内存给予其唯一的执行者,但我发现我的查询运行速度比prev的情况慢(默认为512MB)。改变2.5g到1g改善了性能时间,它接近但仍然比512MB的情况更差。我想我在这里缺少的是“WORKER_MEMORY”和“executor.memory”之间的关系。

  • 是不是工作者试图在其执行者(在我的情况下是唯一的执行者)中分割这个内存的情况?或者还有其他需要记忆的工人吗?

  • 我需要研究和调整哪些其他重要参数才能获得最佳的硬件响应时间? (我已经阅读了关于Kryo序列化程序,我正在尝试这一点 - 我主要关注与内存相关的设置以及与我的工作并行性相关的旋钮)。例如,对于简单的仅扫描查询,Spark比Hive更差(几乎慢3倍),而两者都在扫描完全相同的表格&文件格式。这就是为什么我认为我将它们作为默认值而遗漏了一些参数。

任何提示/建议都将受到高度赞赏。

0 个答案:

没有答案