blob: 92cc87160cd647e97a598d23d294f0633a02ab31 [file] [log] [blame]
#!/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.
set -euo pipefail
hadoop_v=2.9.2
spark_v=2.3.4
submarine_v=${submarine_version:-"0.8.0"}
echo "Using submarine version: $submarine_v"
image_name="local/mini-submarine:${submarine_v}"
if [ -L ${BASH_SOURCE-$0} ]; then
PWD=$(dirname $(readlink "${BASH_SOURCE-$0}"))
else
PWD=$(dirname ${BASH_SOURCE-$0})
fi
export MINI_PATH=$(cd "${PWD}">/dev/null; pwd)
SUBMARINE_PROJECT_PATH=${MINI_PATH}/../..
download_package() {
if [ -f "$1" ]; then
echo "Found $1"
else
echo "Start downloading the package $1 from $2"
if type wget >/dev/null 2>&1; then
wget $2/$1
elif type curl >/dev/null 2>&1; then
curl -O $2/$1
else
echo 'We need a tool to transfer data from or to a server. Such as wget/curl.'
echo 'Bye, bye!'
exit -1
fi
fi
}
is_empty_dir(){
return `ls -A $1|wc -w`
}
# download hadoop
download_package "hadoop-${hadoop_v}.tar.gz" "http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-${hadoop_v}"
# download spark
download_package "spark-${spark_v}-bin-hadoop2.7.tgz" "http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-${spark_v}"
# download zookeeper
download_package "zookeeper-3.4.14.tar.gz" "http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14"
if [ ! -d "${SUBMARINE_PROJECT_PATH}/submarine-dist/target" ]; then
mkdir "${SUBMARINE_PROJECT_PATH}/submarine-dist/target"
fi
submarine_dist_exists=$(find -L "${SUBMARINE_PROJECT_PATH}/submarine-dist/target" -name "submarine-dist-${submarine_v}*.tar.gz")
# If exists, use the release candidate artifacts to build image
if [[ ! -z "${release_candidates_path:-}" ]]; then
submarine_dist_exists=${release_candidates_path}
echo "Using release candidates artifacts: ${release_candidates_path}"
cp ${release_candidates_path}/submarine-dist-${submarine_v}-hadoop*.tar.gz ${MINI_PATH}
fi
# Build source code if the package doesn't exist.
if [[ -z "${submarine_dist_exists}" ]]; then
cd "${SUBMARINE_PROJECT_PATH}"
mvn clean package -DskipTests
fi
cp ${SUBMARINE_PROJECT_PATH}/submarine-dist/target/submarine-dist-${submarine_v}*.tar.gz ${MINI_PATH}
cp -r ${SUBMARINE_PROJECT_PATH}/submarine-sdk/pysubmarine ${MINI_PATH}
cp -r ${SUBMARINE_PROJECT_PATH}/dev-support/database ${MINI_PATH}
# build image
echo "Start building the mini-submarine docker image..."
cd ${MINI_PATH}
docker build --build-arg HADOOP_VERSION=${hadoop_v} --build-arg SPARK_VERSION=${spark_v} --build-arg SUBMARINE_VERSION=${submarine_v} --build-arg IMAGE_NAME=${image_name} -t ${image_name} .
# clean template file
rm -rf ${MINI_PATH}/database
rm -rf ${MINI_PATH}/pysubmarine
rm -rf ${MINI_PATH}/submarine-dist-${submarine_v}*.tar.gz