From d6bd3c333a985f831df1dd5de957770d03e14771 Mon Sep 17 00:00:00 2001 From: Robert Schulze Date: Fri, 12 Sep 2025 10:37:27 +0200 Subject: [PATCH] Revert "add Apache Auron" --- spark-auron/README.md | 37 ---------------- spark-auron/benchmark.sh | 90 --------------------------------------- spark-auron/queries.sql | 43 ------------------- spark-auron/query.py | 66 ---------------------------- spark-auron/run.sh | 10 ----- spark-auron/template.json | 11 ----- spark-comet/README.md | 7 +-- spark-gluten/README.md | 6 +-- 8 files changed, 3 insertions(+), 267 deletions(-) delete mode 100644 spark-auron/README.md delete mode 100755 spark-auron/benchmark.sh delete mode 100644 spark-auron/queries.sql delete mode 100755 spark-auron/query.py delete mode 100755 spark-auron/run.sh delete mode 100644 spark-auron/template.json diff --git a/spark-auron/README.md b/spark-auron/README.md deleted file mode 100644 index e7e1288bb..000000000 --- a/spark-auron/README.md +++ /dev/null @@ -1,37 +0,0 @@ -This README includes info on configuring Apache Auron (formerly Blaze) for ClickBench. For additional details, please refer to [Auron's docs](https://auron.apache.org/), [spark-accelerators README](../spark/README-accelerators.md) and [issue](https://github.com/apache/auron/issues/1287) discussing the results. - -### Run - -As usual, benchmark can be run via `./benchmark.sh`. Additionally, users can provide machine spec like `./benchmark.sh c6a.8xlarge` so script saves it in relevant file. - -## Notes - -### Debug - -- To find all unsupported queries from `log.txt`: -``` ->>> grep -o 'expressions.*' log.txt | grep -v 'toprettystring' | grep -o ' .*' | sort | uniq -c - - 45 cast(EventTime#4L as timestamp) - 12 cast(none#0L as timestamp) - 153 date_add(1970-01-01, EventDate#5) - 72 date_add(1970-01-01, none#0) - 24 date_add(1970-01-01, none#1) - 15 date_trunc(class org.apache.spark.sql.auron.NativeExprWrapper() dataType:StringType), ...) - 15 minute(class org.apache.spark.sql.auron.NativeExprWrapper() dataType:TimestampType), ...) - 9 regexp_replace(Referer#14, ^https?://(?:www.)?([^/]+)/.*$, $1, 1) - 6 regexp_replace(none#0, ^https?://(?:www.)?([^/]+)/.*$, $1, 1) -``` - -### Links - -- Refer to Auron's [`pom.xml`](https://github.com/apache/auron/blob/v5.0.0/pom.xml) for exact _version compatibility_ between Auron, Spark, Scala, and Java. -- Download _pre-built JARs_ from the [Auron archives](https://auron.apache.org/archives). -- View an example _Auron configuration_ in the [benchmarks documentation](https://auron.apache.org/documents/benchmarks.html#benchmark-configuration). - -### Configuration - -- As of version 5.0, Spark 3.5.5 is chosen since it's used for the `spark-3.5` shim (see `pom.xml`) and TPC-DS testing. -- Apache Auron was previously named [Blaze](https://github.com/apache/auron/issues/1168). This change occurred after version 5.0, so previous naming references (links, settings) still remain. These will be updated in the next version. -- In version 5.0, Auron generates extensive INFO logs (~55MB file after ~40 queries), which may impact system performance. This behavior will be manageable in next version and will require setting `spark.auron.native.log.level`. -- Auron's memory configuration follows the example from the [benchmark page](https://auron.apache.org/documents/benchmarks.html#benchmark-configuration). diff --git a/spark-auron/benchmark.sh b/spark-auron/benchmark.sh deleted file mode 100755 index e88c78afc..000000000 --- a/spark-auron/benchmark.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash - -# Note: Keep in sync with spark-*/benchmark.sh (see README-accelerators.md for details) -# -# Highlights: -# - pyspark==3.5.6 version is used (latest stable for Auron 5.0.0) -# - Auron installation is added -# - auto-save results - -# Install - -sudo apt-get update -y -sudo apt-get install -y python3-pip python3-venv openjdk-17-jdk - -export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-$(dpkg --print-architecture)/" -export PATH=$JAVA_HOME/bin:$PATH - -python3 -m venv myenv -source myenv/bin/activate -pip install pyspark==3.5.5 psutil - -# Load the data - -wget --continue --progress=dot:giga 'https://datasets.clickhouse.com/hits_compatible/hits.parquet' - -# Install Auron - -AURON_JAR_URL='https://github.com/apache/auron/releases/download/v5.0.0/blaze-engine-spark-3.5-release-5.0.0-SNAPSHOT.jar' - -wget --continue --progress=dot:giga $AURON_JAR_URL -O auron.jar - -# Run the queries - -./run.sh 2>&1 | tee log.txt - -# Print results to stdout as required -cat log.txt | grep -P '^Time:\s+([\d\.]+)|Failure!' | sed -r -e 's/Time: //; s/^Failure!$/null/' | - awk '{ if (i % 3 == 0) { printf "[" }; printf $1; if (i % 3 != 2) { printf "," } else { print "]," }; ++i; }' - -DATA_SIZE=$(du -b hits.parquet | cut -f1) - -echo "Data size: $DATA_SIZE" -echo "Load time: 0" - -# Save results as JSON - -MACHINE="${1:-c6a.4xlarge}" # Use first argument as machine name, default to c6a.4xlarge -AURON_VERSION=$(echo $AURON_JAR_URL | grep -Po "\d.\d.\d" | head -n 1) -SPARK_VERSION=$(pip freeze | grep '^pyspark==' | cut -d '=' -f3) - -mkdir -p results - -( -cat << EOF -{ - "system": "Spark (Auron)", - "date": "$(date +%Y-%m-%d)", - "machine": "${MACHINE}", - "cluster_size": 1, - "proprietary": "no", - "tuned": "no", - "comment": "Using Auron ${AURON_VERSION} with Spark ${SPARK_VERSION}", - "tags": ["Java", "Rust", "column-oriented", "Spark derivative", "DataFusion", "Parquet"], - "load_time": 0, - "data_size": ${DATA_SIZE}, - "result": [ -EOF - -cat log.txt | grep -P '^Time:\s+([\d\.]+)|Failure!' | sed -r -e 's/Time: //; s/^Failure!$/null/' | - awk -v total=$(grep -cP '^Time:\s+[\d\.]+|Failure!' log.txt) ' - { - if (i % 3 == 0) printf "\t\t["; - if ($1 == "null") printf "null"; - else printf "%.3f", $1; - if (i % 3 != 2) printf ", "; - else { - if (i < total - 1) printf "],\n"; - else printf "]"; - } - i++; - }' - -cat << EOF - - ] -} -EOF -) > "results/${MACHINE}.json" - -echo "Results have been saved to results/${MACHINE}.json" diff --git a/spark-auron/queries.sql b/spark-auron/queries.sql deleted file mode 100644 index 31f65fc89..000000000 --- a/spark-auron/queries.sql +++ /dev/null @@ -1,43 +0,0 @@ -SELECT COUNT(*) FROM hits; -SELECT COUNT(*) FROM hits WHERE AdvEngineID <> 0; -SELECT SUM(AdvEngineID), COUNT(*), AVG(ResolutionWidth) FROM hits; -SELECT AVG(UserID) FROM hits; -SELECT COUNT(DISTINCT UserID) FROM hits; -SELECT COUNT(DISTINCT SearchPhrase) FROM hits; -SELECT MIN(EventDate), MAX(EventDate) FROM hits; -SELECT AdvEngineID, COUNT(*) FROM hits WHERE AdvEngineID <> 0 GROUP BY AdvEngineID ORDER BY COUNT(*) DESC; -SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10; -SELECT RegionID, SUM(AdvEngineID), COUNT(*) AS c, AVG(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10; -SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; -SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; -SELECT SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; -SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10; -SELECT SearchEngineID, SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; -SELECT UserID, COUNT(*) FROM hits GROUP BY UserID ORDER BY COUNT(*) DESC LIMIT 10; -SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10; -SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10; -SELECT UserID, extract(minute FROM EventTime) AS m, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10; -SELECT UserID FROM hits WHERE UserID = 435090932899640449; -SELECT COUNT(*) FROM hits WHERE URL LIKE '%google%'; -SELECT SearchPhrase, MIN(URL), COUNT(*) AS c FROM hits WHERE URL LIKE '%google%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; -SELECT SearchPhrase, MIN(URL), MIN(Title), COUNT(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title LIKE '%Google%' AND URL NOT LIKE '%.google.%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; -SELECT * FROM hits WHERE URL LIKE '%google%' ORDER BY EventTime LIMIT 10; -SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime LIMIT 10; -SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY SearchPhrase LIMIT 10; -SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime, SearchPhrase LIMIT 10; -SELECT CounterID, AVG(length(URL)) AS l, COUNT(*) AS c FROM hits WHERE URL <> '' GROUP BY CounterID HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25; -SELECT REGEXP_REPLACE(Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS k, AVG(length(Referer)) AS l, COUNT(*) AS c, MIN(Referer) FROM hits WHERE Referer <> '' GROUP BY k HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25; -SELECT SUM(ResolutionWidth), SUM(ResolutionWidth + 1), SUM(ResolutionWidth + 2), SUM(ResolutionWidth + 3), SUM(ResolutionWidth + 4), SUM(ResolutionWidth + 5), SUM(ResolutionWidth + 6), SUM(ResolutionWidth + 7), SUM(ResolutionWidth + 8), SUM(ResolutionWidth + 9), SUM(ResolutionWidth + 10), SUM(ResolutionWidth + 11), SUM(ResolutionWidth + 12), SUM(ResolutionWidth + 13), SUM(ResolutionWidth + 14), SUM(ResolutionWidth + 15), SUM(ResolutionWidth + 16), SUM(ResolutionWidth + 17), SUM(ResolutionWidth + 18), SUM(ResolutionWidth + 19), SUM(ResolutionWidth + 20), SUM(ResolutionWidth + 21), SUM(ResolutionWidth + 22), SUM(ResolutionWidth + 23), SUM(ResolutionWidth + 24), SUM(ResolutionWidth + 25), SUM(ResolutionWidth + 26), SUM(ResolutionWidth + 27), SUM(ResolutionWidth + 28), SUM(ResolutionWidth + 29), SUM(ResolutionWidth + 30), SUM(ResolutionWidth + 31), SUM(ResolutionWidth + 32), SUM(ResolutionWidth + 33), SUM(ResolutionWidth + 34), SUM(ResolutionWidth + 35), SUM(ResolutionWidth + 36), SUM(ResolutionWidth + 37), SUM(ResolutionWidth + 38), SUM(ResolutionWidth + 39), SUM(ResolutionWidth + 40), SUM(ResolutionWidth + 41), SUM(ResolutionWidth + 42), SUM(ResolutionWidth + 43), SUM(ResolutionWidth + 44), SUM(ResolutionWidth + 45), SUM(ResolutionWidth + 46), SUM(ResolutionWidth + 47), SUM(ResolutionWidth + 48), SUM(ResolutionWidth + 49), SUM(ResolutionWidth + 50), SUM(ResolutionWidth + 51), SUM(ResolutionWidth + 52), SUM(ResolutionWidth + 53), SUM(ResolutionWidth + 54), SUM(ResolutionWidth + 55), SUM(ResolutionWidth + 56), SUM(ResolutionWidth + 57), SUM(ResolutionWidth + 58), SUM(ResolutionWidth + 59), SUM(ResolutionWidth + 60), SUM(ResolutionWidth + 61), SUM(ResolutionWidth + 62), SUM(ResolutionWidth + 63), SUM(ResolutionWidth + 64), SUM(ResolutionWidth + 65), SUM(ResolutionWidth + 66), SUM(ResolutionWidth + 67), SUM(ResolutionWidth + 68), SUM(ResolutionWidth + 69), SUM(ResolutionWidth + 70), SUM(ResolutionWidth + 71), SUM(ResolutionWidth + 72), SUM(ResolutionWidth + 73), SUM(ResolutionWidth + 74), SUM(ResolutionWidth + 75), SUM(ResolutionWidth + 76), SUM(ResolutionWidth + 77), SUM(ResolutionWidth + 78), SUM(ResolutionWidth + 79), SUM(ResolutionWidth + 80), SUM(ResolutionWidth + 81), SUM(ResolutionWidth + 82), SUM(ResolutionWidth + 83), SUM(ResolutionWidth + 84), SUM(ResolutionWidth + 85), SUM(ResolutionWidth + 86), SUM(ResolutionWidth + 87), SUM(ResolutionWidth + 88), SUM(ResolutionWidth + 89) FROM hits; -SELECT SearchEngineID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; -SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; -SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; -SELECT URL, COUNT(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; -SELECT 1, URL, COUNT(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; -SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, COUNT(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; -SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND URL <> '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10; -SELECT Title, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND Title <> '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10; -SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND IsLink <> 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10 OFFSET 1000; -SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 10 OFFSET 1000; -SELECT URLHash, EventDate, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 3594120000172545465 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 10 OFFSET 100; -SELECT WindowClientWidth, WindowClientHeight, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND DontCountHits = 0 AND URLHash = 2868770270353813622 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10 OFFSET 10000; -SELECT DATE_TRUNC('minute', EventTime) AS M, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-14' AND EventDate <= '2013-07-15' AND IsRefresh = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER BY DATE_TRUNC('minute', EventTime) LIMIT 10 OFFSET 1000; diff --git a/spark-auron/query.py b/spark-auron/query.py deleted file mode 100755 index 0ea74ddf0..000000000 --- a/spark-auron/query.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 - -""" -Note: Keep in sync with spark-*/query.py (see README-accelerators.md for details) - -Highlights: -- memory is split between heap (for Spark) and memoryOverhead (for Auron) -- Auron configuration is added to `SparkSession` -""" - -from pyspark.sql import SparkSession -import pyspark.sql.functions as F - -import psutil -import re -import sys -import timeit - - -query = sys.stdin.read() -# Replace \1 to $1 because spark recognizes only this pattern style (in query 28) -query = re.sub(r"""(REGEXP_REPLACE\(.*?,\s*('[^']*')\s*,\s*)('1')""", r"\1'$1'", query) -print(query) - -# Calculate available memory to configurate SparkSession -ram = int(round(psutil.virtual_memory().available / (1024 ** 3) * 0.7)) -exec_memory = ram // 3 -exec_overhead = ram - exec_memory -print(f"SparkSession will be set with {exec_memory} GB of memory and {exec_overhead} GB of memory overhead") - -builder = ( - SparkSession - .builder - .appName("ClickBench") - .config("spark.driver", "local[*]") # To ensure using all cores - .config("spark.driver.memory", f"{exec_memory}g") # Set amount of memory SparkSession can use - .config("spark.sql.parquet.binaryAsString", True) # Treat binary as string to get correct length calculations and text results - - # Additional Auron configuration - .config("spark.jars", "auron.jar") - .config("spark.driver.extraClassPath", "auron.jar") - .config("spark.auron.enable", True) - .config("spark.sql.extensions", "org.apache.spark.sql.blaze.BlazeSparkSessionExtension") - .config("spark.shuffle.manager", "org.apache.spark.sql.execution.blaze.shuffle.BlazeShuffleManager") - .config("spark.memory.offHeap.enabled", "false") - .config("spark.driver.memoryOverhead", exec_overhead * 1024) -) - -spark = builder.getOrCreate() - -df = spark.read.parquet("hits.parquet") -# Do casting before creating the view so no need to change to unreadable integer dates in SQL -df = df.withColumn("EventTime", F.col("EventTime").cast("timestamp")) -df = df.withColumn("EventDate", F.date_add(F.lit("1970-01-01"), F.col("EventDate"))) -df.createOrReplaceTempView("hits") - -for try_num in range(3): - try: - start = timeit.default_timer() - result = spark.sql(query) - result.show(100) # some queries should return more than 20 rows which is the default show limit - end = timeit.default_timer() - print("Time: ", end - start) - except Exception as e: - print(e) - print("Failure!") diff --git a/spark-auron/run.sh b/spark-auron/run.sh deleted file mode 100755 index 8c9ca1289..000000000 --- a/spark-auron/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Note: Keep in sync with spark-*/run.sh (see README-accelerators.md for details) - -cat queries.sql | while read query; do - sync - echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null - - ./query.py <<< "${query}" -done diff --git a/spark-auron/template.json b/spark-auron/template.json deleted file mode 100644 index 9b1bc1d2f..000000000 --- a/spark-auron/template.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "system": "Spark (Auron)", - "proprietary": "no", - "tuned": "no", - "tags": [ - "Java", - "Rust", - "column-oriented", - "Spark derivative" - ] -} diff --git a/spark-comet/README.md b/spark-comet/README.md index a606b9787..17c08371c 100644 --- a/spark-comet/README.md +++ b/spark-comet/README.md @@ -4,9 +4,7 @@ This README includes info on configuring Apache Comet for ClickBench. For additi As usual, benchmark can be run via `./benchmark.sh`. Additionally, users can provide machine spec like `./benchmark.sh c6a.8xlarge` so script saves it in relevant file. -## Notes - -### Debug +### Notes - To find all unsupported queries from `log.txt` (requires running bench in debug mode): ```bash @@ -17,9 +15,6 @@ As usual, benchmark can be run via `./benchmark.sh`. Additionally, users can pro 123 +- HashAggregate [COMET: distinct aggregates are not supported] ... ``` - -### Links - - Check [here](https://datafusion.apache.org/comet/user-guide/installation.html#supported-spark-versions) for _version compatibility_ between Spark and Comet. - Check [here](https://datafusion.apache.org/comet/user-guide/installation.html#using-a-published-jar-file) for _links to Comet jar_. - Check [here](https://datafusion.apache.org/comet/user-guide/installation.html#run-spark-shell-with-comet-enabled) for _basic Comet configuration_. diff --git a/spark-gluten/README.md b/spark-gluten/README.md index 3e82983dd..03da87113 100644 --- a/spark-gluten/README.md +++ b/spark-gluten/README.md @@ -1,12 +1,10 @@ -This README includes info on configuring Apache Gluten for ClickBench. For additional details, please refer to [Gluten's docs](https://apache.github.io/incubator-gluten/get-started/Velox.html), [spark-accelerators README](../spark/README-accelerators.md) and [discussion](https://github.com/apache/incubator-gluten/discussions/10465). +This README includes info on configuring Apache Gluten for ClickBench. For additional details, please refer to [Gluten's docs](https://apache.github.io/incubator-gluten/get-started/Velox.html) and [spark-accelerators README](../spark/README-accelerators.md). ### Run As usual, benchmark can be run via `./benchmark.sh`. Additionally, users can provide machine spec like `./benchmark.sh c6a.8xlarge` so script saves it in relevant file. -## Notes - -### Links +### Notes - Check [here](https://gluten.apache.org/downloads/) for _pre-built jars_. - Check [here](https://gluten.apache.org/#3-how-to-use) and [here](https://apache.github.io/incubator-gluten/get-started/Velox.html#submit-the-spark-sql-job) for _examples of Gluten configuration_.