在 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.concurrency
、task.writer-count
和 task.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 執行器中執行(此限制可能是暫時的,引入此限制是為了避免為每個任務複製廣播雜湊表)。