blob: bfbb55f55d73657c10e4dcb9f94e30ed1de34667 [file]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Download Spark resources, required by some Spark UTs. The resource path should be set
# for spark.test.home in mvn test.
#
# This file can be:
# Executed directly: ./install-spark-resources.sh <spark-version> [install-dir]
set -e
# Installs Spark binary and source releases with:
# 1 - spark version
# 2 - hadoop version
# 3 - scala version
function install_spark() {
local spark_version="$1"
local hadoop_version="$2"
local scala_version="$3"
local spark_version_short=$(echo "${spark_version}" | cut -d '.' -f 1,2 | tr -d '.')
local scala_suffix=$([ "${scala_version}" == '2.13' ] && echo '-scala-2.13' || echo '')
local scala_suffix_short=$([ "${scala_version}" == '2.13' ] && echo '-scala2.13' || echo '')
local mirror_host='https://www.apache.org/dyn/closer.lua/'
local mirror_host2='https://mirror.lyrahosting.com/apache/' # Fallback mirror due to closer.lua slowness
local url_query='?action=download'
local checksum_suffix='sha512'
local url_path="spark/spark-${spark_version}/"
local local_binary="spark-${spark_version}-bin-hadoop${hadoop_version}${scala_suffix_short}.tgz"
local local_binary_checksum="${local_binary}.${checksum_suffix}"
local local_source="spark-${spark_version}.tgz"
local local_source_checksum="${local_source}.${checksum_suffix}"
local remote_binary="${mirror_host2}${url_path}${local_binary}${url_query}"
local remote_binary_checksum="${mirror_host}${url_path}${local_binary_checksum}${url_query}"
local remote_source="${mirror_host2}${url_path}${local_source}${url_query}"
local remote_source_checksum="${mirror_host}${url_path}${local_source_checksum}${url_query}"
local wget_opts="--no-verbose --no-check-certificate"
wget ${wget_opts} -O "${local_binary}" "${remote_binary}"
wget ${wget_opts} -O "${local_source}" "${remote_source}"
# Checksum may not have been specified; don't check if doesn't exist
if [ "$(command -v shasum)" ]; then
wget ${wget_opts} -O "${local_binary_checksum}" "${remote_binary_checksum}"
if ! shasum -a 512 -c "${local_binary_checksum}" > /dev/null ; then
echo "Bad checksum from ${remote_binary_checksum}"
rm -f "${local_binary_checksum}"
exit 2
fi
rm -f "${local_binary_checksum}"
wget ${wget_opts} -O "${local_source_checksum}" "${remote_source_checksum}"
if ! shasum -a 512 -c "${local_source_checksum}" > /dev/null ; then
echo "Bad checksum from ${remote_source_checksum}"
rm -f "${local_source_checksum}"
exit 2
fi
rm -f "${local_source_checksum}"
else
echo "Skipping checksum because shasum is not installed." 1>&2
fi
tar --strip-components=1 -xf "${local_binary}" spark-"${spark_version}"-bin-hadoop"${hadoop_version}""${scala_suffix_short}"/jars/ \
spark-"${spark_version}"-bin-hadoop"${hadoop_version}""${scala_suffix_short}"/python \
spark-"${spark_version}"-bin-hadoop"${hadoop_version}""${scala_suffix_short}"/bin
mkdir -p ${INSTALL_DIR}/shims/spark"${spark_version_short}""${scala_suffix}"/spark_home/assembly/target/scala-"${scala_version}"
mv jars ${INSTALL_DIR}/shims/spark"${spark_version_short}""${scala_suffix}"/spark_home/assembly/target/scala-"${scala_version}"
mv python ${INSTALL_DIR}/shims/spark"${spark_version_short}""${scala_suffix}"/spark_home
mv bin ${INSTALL_DIR}/shims/spark"${spark_version_short}""${scala_suffix}"/spark_home
tar --strip-components=1 -xf "${local_source}" spark-"${spark_version}"/sql/core/src/test/resources/ \
spark-"${spark_version}"/sql/hive/src/test/resources/
mkdir -p shims/spark"${spark_version_short}${scala_suffix}"/spark_home/
mv sql shims/spark"${spark_version_short}${scala_suffix}"/spark_home/
rm -rf "${local_binary}"
rm -rf "${local_source}"
}
# Only run install_spark when script is executed directly (not sourced)
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
INSTALL_DIR=${2:-/opt/}
mkdir -p ${INSTALL_DIR}
case "$1" in
3.3)
# Spark-3.3
cd ${INSTALL_DIR} && \
install_spark "3.3.1" "3" "2.12"
;;
3.4)
# Spark-3.4
cd ${INSTALL_DIR} && \
install_spark "3.4.4" "3" "2.12"
;;
3.5)
# Spark-3.5
cd ${INSTALL_DIR} && \
install_spark "3.5.5" "3" "2.12"
;;
3.5-scala2.13)
# Spark-3.5, scala 2.13
cd ${INSTALL_DIR} && \
install_spark "3.5.5" "3" "2.13"
;;
4.0)
# Spark-4.0, scala 2.12 // using 2.12 as a hack as 4.0 does not have 2.13 suffix
cd ${INSTALL_DIR} && \
install_spark "4.0.2" "3" "2.12"
mv /opt/shims/spark40/spark_home/assembly/target/scala-2.12 /opt/shims/spark40/spark_home/assembly/target/scala-2.13
;;
4.1)
# Spark-4.x, scala 2.12 // using 2.12 as a hack as 4.0 does not have 2.13 suffix
cd ${INSTALL_DIR} && \
install_spark "4.1.1" "3" "2.12"
mv /opt/shims/spark41/spark_home/assembly/target/scala-2.12 /opt/shims/spark41/spark_home/assembly/target/scala-2.13
;;
*)
echo "Spark version is expected to be specified."
exit 1
;;
esac
fi