blob: 66527e2632e9913a6f3d874f2bea296d21394c3c [file]
#!/bin/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 -eux
HIVE_VERSION=
HADOOP_VERSION=
TEZ_VERSION=
usage() {
cat <<EOF 1>&2
Usage: $0 [-h] [-hadoop <Hadoop version>] [-tez <Tez version>] [-hive <Hive version>] [-repo <Docker repo>]
Build the Hive Docker image
-help Display help
-hadoop Build image with the specified Hadoop version
-tez Build image with the specified Tez version
-hive Build image with the specified Hive version
-repo Docker repository
EOF
}
while [ $# -gt 0 ]; do
case "$1" in
-h)
usage
exit 0
;;
-hadoop)
shift
HADOOP_VERSION=$1
shift
;;
-tez)
shift
TEZ_VERSION=$1
shift
;;
-hive)
shift
HIVE_VERSION=$1
shift
;;
-repo)
shift
REPO=$1
shift
;;
*)
shift
;;
esac
done
SCRIPT_DIR=$(cd $(dirname $0); pwd)
SOURCE_DIR=${SOURCE_DIR:-"$SCRIPT_DIR/../../.."}
repo=${REPO:-apache}
WORK_DIR="$(mktemp -d)"
CACHE_DIR="$SCRIPT_DIR/../../cache"
mkdir -p "$CACHE_DIR"
HADOOP_VERSION=${HADOOP_VERSION:-$(mvn -f "$SOURCE_DIR/pom.xml" -q help:evaluate -Dexpression=hadoop.version -DforceStdout)}
TEZ_VERSION=${TEZ_VERSION:-$(mvn -f "$SOURCE_DIR/pom.xml" -q help:evaluate -Dexpression=tez.version -DforceStdout)}
HADOOP_FILE_NAME="hadoop-$HADOOP_VERSION.tar.gz"
HADOOP_URL=${HADOOP_URL:-"https://archive.apache.org/dist/hadoop/core/hadoop-$HADOOP_VERSION/$HADOOP_FILE_NAME"}
if [ ! -f "$CACHE_DIR/$HADOOP_FILE_NAME" ]; then
echo "Downloading Hadoop from $HADOOP_URL..."
if ! curl --fail -L "$HADOOP_URL" -o "$CACHE_DIR/$HADOOP_FILE_NAME.tmp"; then
echo "Fail to download Hadoop, exiting...."
exit 1
fi
mv "$CACHE_DIR/$HADOOP_FILE_NAME.tmp" "$CACHE_DIR/$HADOOP_FILE_NAME"
fi
TEZ_FILE_NAME="apache-tez-$TEZ_VERSION-bin.tar.gz"
TEZ_URL=${TEZ_URL:-"https://downloads.apache.org/tez/$TEZ_VERSION/$TEZ_FILE_NAME"}
if [ ! -f "$CACHE_DIR/$TEZ_FILE_NAME" ]; then
echo "Downloading Tez from $TEZ_URL..."
if ! curl --fail -L "$TEZ_URL" -o "$CACHE_DIR/$TEZ_FILE_NAME.tmp"; then
echo "Failed to download Tez, exiting..."
exit 1
fi
mv "$CACHE_DIR/$TEZ_FILE_NAME.tmp" "$CACHE_DIR/$TEZ_FILE_NAME"
fi
if [ -n "$HIVE_VERSION" ]; then
HIVE_FILE_NAME="apache-hive-$HIVE_VERSION-bin.tar.gz"
if [ ! -f "$CACHE_DIR/$HIVE_FILE_NAME" ]; then
HIVE_URL=${HIVE_URL:-"https://downloads.apache.org/hive/hive-$HIVE_VERSION/$HIVE_FILE_NAME"}
echo "Downloading Hive from $HIVE_URL..."
if ! curl --fail -L "$HIVE_URL" -o "$CACHE_DIR/$HIVE_FILE_NAME.tmp"; then
echo "Failed to download Hive, exiting..."
exit 1
fi
mv "$CACHE_DIR/$HIVE_FILE_NAME.tmp" "$CACHE_DIR/$HIVE_FILE_NAME"
fi
cp "$CACHE_DIR/$HIVE_FILE_NAME" "$WORK_DIR"
else
HIVE_VERSION=$(mvn -f "$SOURCE_DIR/pom.xml" -q help:evaluate -Dexpression=project.version -DforceStdout)
HIVE_TAR="$SOURCE_DIR/packaging/target/apache-hive-$HIVE_VERSION-bin.tar.gz"
if ls "$HIVE_TAR" || mvn -f "$SOURCE_DIR/pom.xml" clean package -DskipTests -Pdist; then
cp "$HIVE_TAR" "$WORK_DIR/"
else
echo "Failed to compile Hive Project, exiting..."
exit 1
fi
fi
cp "$CACHE_DIR/hadoop-$HADOOP_VERSION.tar.gz" "$WORK_DIR/"
cp "$CACHE_DIR/apache-tez-$TEZ_VERSION-bin.tar.gz" "$WORK_DIR/"
cp -R "$SOURCE_DIR/packaging/src/docker/conf" "$WORK_DIR/"
cp -R "$SOURCE_DIR/packaging/src/docker/entrypoint.sh" "$WORK_DIR/"
cp "$SOURCE_DIR/packaging/src/docker/Dockerfile" "$WORK_DIR/"
docker build \
"$WORK_DIR" \
-f "$WORK_DIR/Dockerfile" \
-t "$repo/hive:$HIVE_VERSION" \
--build-arg "BUILD_ENV=unarchive" \
--build-arg "HIVE_VERSION=$HIVE_VERSION" \
--build-arg "HADOOP_VERSION=$HADOOP_VERSION" \
--build-arg "TEZ_VERSION=$TEZ_VERSION" \
rm -r "${WORK_DIR}"