簡體   English   中英

使用Simple Scans進行Spark SQL性能

[英]Spark SQL performance with Simple Scans

我在3台機器上的集群(獨立模式)上使用Spark 1.4,用於類似於TPCH的工作負載(具有多路/多路大型連接和聚合的分析查詢)。 每台機器有12GB內存和4個內核。 我的總數據大小為150GB,存儲在HDFS中(存儲為Hive表),我使用hive上下文通過Spark SQL運行查詢。 在檢查了火花頁面上的性能調整文檔和最新火花峰會的一些片段之后,我決定在我的spark-env中設置以下配置:

SPARK_WORKER_INSTANCES=4
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=2500M

(由於我的任務往往很長,所以啟動多個JVM的開銷,每個工作一個JVM遠遠少於總查詢時間)。 當我監視作業進度時,我意識到雖然Worker內存為2.5GB,但執行程序(每個worker一個)的最大內存為512MB(默認值)。 我在我的申請中將此值放大為:

conf.set("spark.executor.memory", "2.5g");

嘗試將每個worker的最大可用內存提供給它唯一的執行器,但我發現我的查詢運行速度比prev的情況慢(默認為512MB)。 改變2.5g到1g改善了性能時間,它接近但仍然比512MB的情況更差。 我想我在這里缺少的是“WORKER_MEMORY”和“executor.memory”之間的關系。

  • WORKER是否試圖在其執行者(在我的情況下是唯一的執行者)之間分配這種記憶? 還是有其他東西正在做工人需要記憶?

  • 還有哪些其他重要的參數需要在這一點上進行調查和調整,以便從我的硬件中獲得最佳響應時間? (我已經閱讀了關於Kryo序列化程序,我正在嘗試這一點 - 我主要關注與內存相關的設置以及與我的工作並行性相關的旋鈕)。 例如,對於簡單的僅掃描查詢,Spark比Hive更差(幾乎慢3倍),而兩者都掃描完全相同的表和文件格式。 這就是為什么我認為我將它們作為默認值丟失了一些參數。

任何提示/建議都將受到高度贊賞。

Spark_worker_cores在各個實例之間共享。 將核心增加到8 - 然后您應該看到您預期的行為(和性能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM