在 Spark 上執行 Presto

在 Spark 上執行 Presto 可以利用 Spark 作為 Presto 查詢的執行框架。這對於我們想要在數千個節點上執行、需要數十或數百 TB 的記憶體,以及消耗許多 CPU 年的查詢很有用。

Spark 增加了幾個有用的功能,例如資源隔離、精細的資源管理和可擴展的實體化交換機制。

步驟

下載 Presto Spark 套件的 tarball,presto-spark-package-0.289.tar.gz 和 Presto Spark 啟動器,presto-spark-launcher-0.289.jar。將這兩個檔案都放在,例如,example 目錄中。我們在這裡假設一個兩個節點的 Spark 叢集,每個節點有四個核心,因此總共有八個核心。

以下是一個 config.properties 的範例

task.concurrency=4
task.max-worker-threads=4
task.writer-count=4

有關屬性的詳細資訊,請參閱屬性參考。請注意,task.concurrencytask.writer-counttask.max-worker-threads 都設定為 4,因為我們每個執行器有四個核心,並希望與下面相關的 Spark 提交引數同步。應調整這些值,以保持所有執行器核心忙碌並與 spark-submit 參數同步。

若要在 Spark 上執行 Presto,請先啟動您的 Spark 叢集,我們假設其 URL 為 *spark://spark-master:7077*。將您耗時的查詢保留在一個名為,例如,*query.sql* 的檔案中。從先前建立的 *example* 目錄執行 spark-submit 命令

/spark/bin/spark-submit \
--master spark://spark-master:7077 \
--executor-cores 4 \
--conf spark.task.cpus=4 \
--class com.facebook.presto.spark.launcher.PrestoSparkLauncher \
  presto-spark-launcher-0.289.jar \
--package presto-spark-package-0.289.tar.gz \
--config /presto/etc/config.properties \
--catalogs /presto/etc/catalogs \
--catalog hive \
--schema default \
--file query.sql

有關設定 catalog 的詳細資訊,請參閱Catalog 屬性。在 Spark 提交引數中,請注意 *executor-cores*(Spark 中每個執行器的核心數)和 *spark.task.cpus*(在 Spark 中分配給每個任務的核心數)的值。這些也等於核心數(在本例中為 4),並且與上面討論的一些 config.properties 設定相同。這是為了確保單個 Spark 上的 Presto 任務在單個 Spark 執行器中執行(此限制可能是暫時的,引入此限制是為了避免為每個任務複製廣播雜湊表)。