mirror of
https://github.com/apache/impala.git
synced 2026-02-02 15:00:38 -05:00
Having recently gone through setting up Eclipse for frontend debugging, I'm amending the process a tad to make it smoother for new developers. * Adds the JDK sources package to the developer bootstrap process. These are useful if you need to point Eclipse to the source of Java libraries and are harmless to everyone else. * Defaults to "downloadSource" for the "mvn eclipse:eclipse" plugin. This was being set explicitly in the Wiki instructions, but there's no reason not to set it on by default for everyone. * Adds a "launcher" file for debugging the FE. Instead of creating a debug configuration manually, it's possible to share these across developers by checking them in. I checked it in via a mechanism that "mvn eclipse:eclipse" has to create additional files, to avoid literring the directory for non-Eclipse users. * Changes the output directory used by Eclipse's compiler to a different one than Maven uses. Because we start Impala from the commandline, it's easy to start Impala and then change a line of Java, which forces Eclipse to kick in and replace the .class files. When this happens, the existing Impala starts complaining about class not found, because the underlying files have been overwritten. It's preferable to separate the directories and rely on Maven for the compiled Java. Change-Id: Ia723fbf706cf409a8fb6b5ff0297c2b1ff7c9590 Reviewed-on: http://gerrit.cloudera.org:8080/7803 Reviewed-by: Dimitris Tsirogiannis <dtsirogiannis@cloudera.com> Tested-by: Impala Public Jenkins
221 lines
6.9 KiB
Bash
Executable File
221 lines
6.9 KiB
Bash
Executable 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.
|
|
|
|
# This script bootstraps a development environment from almost nothing; it is known to
|
|
# work on Ubuntu 14.04 and 16.04. It clobbers some local environment and system
|
|
# configurations, so it is best to run this in a fresh install. It also sets up the
|
|
# ~/.bashrc for the calling user and impala-config-local.sh with some environment
|
|
# variables to make Impala compile and run after this script is complete.
|
|
#
|
|
# The intended user is a person who wants to start contributing code to Impala. This
|
|
# script serves as an executable reference point for how to get started. It takes about
|
|
# two hours to complete.
|
|
#
|
|
# To run this in a Docker container:
|
|
#
|
|
# 1. Run with --privileged
|
|
# 2. Give the container a non-root sudoer wih NOPASSWD:
|
|
# apt-get update
|
|
# apt-get install sudo
|
|
# adduser --disabled-password --gecos '' impdev
|
|
# echo 'impdev ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
|
# 3. Run this script as that user: su - impdev -c /bootstrap_development.sh
|
|
|
|
set -eu -o pipefail
|
|
|
|
if [[ -t 1 ]] # if on an interactive terminal
|
|
then
|
|
echo "This script will clobber some system settings. Are you sure you want to"
|
|
echo -n "continue? "
|
|
while true
|
|
do
|
|
read -p "[yes/no] " ANSWER
|
|
ANSWER=$(echo "$ANSWER" | tr /a-z/ /A-Z/)
|
|
if [[ $ANSWER = YES ]]
|
|
then
|
|
break
|
|
elif [[ $ANSWER = NO ]]
|
|
then
|
|
echo "OK, Bye!"
|
|
exit 1
|
|
fi
|
|
done
|
|
else
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
fi
|
|
|
|
set -x
|
|
|
|
source /etc/lsb-release
|
|
|
|
if ! [[ $DISTRIB_ID = Ubuntu ]]
|
|
then
|
|
echo "This script only supports Ubuntu" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! [[ $DISTRIB_RELEASE = 14.04 || $DISTRIB_RELEASE = 16.04 ]]
|
|
then
|
|
echo "This script only supports Ubuntu 14.04 and 16.04" >&2
|
|
exit 1
|
|
fi
|
|
|
|
REAL_APT_GET=$(which apt-get)
|
|
function apt-get {
|
|
for ITER in $(seq 1 20); do
|
|
echo "ATTEMPT: ${ITER}"
|
|
if sudo "${REAL_APT_GET}" "$@"
|
|
then
|
|
return 0
|
|
fi
|
|
sleep "${ITER}"
|
|
done
|
|
echo "NO MORE RETRIES"
|
|
return 1
|
|
}
|
|
|
|
apt-get update
|
|
apt-get --yes install apt-utils
|
|
apt-get --yes install git
|
|
|
|
# If there is no Impala git repo, get one now
|
|
if ! [[ -d ~/Impala ]]
|
|
then
|
|
time -p git clone https://git-wip-us.apache.org/repos/asf/incubator-impala.git ~/Impala
|
|
fi
|
|
cd ~/Impala
|
|
SET_IMPALA_HOME="export IMPALA_HOME=$(pwd)"
|
|
echo "$SET_IMPALA_HOME" >> ~/.bashrc
|
|
eval "$SET_IMPALA_HOME"
|
|
|
|
apt-get --yes install ccache g++ gcc libffi-dev liblzo2-dev libkrb5-dev libsasl2-dev \
|
|
libssl-dev make maven ninja-build ntp ntpdate python-dev python-setuptools \
|
|
postgresql ssh wget vim-common
|
|
|
|
if ! { service --status-all | grep -E '^ \[ \+ \] ssh$'; }
|
|
then
|
|
sudo service ssh start
|
|
fi
|
|
|
|
# TODO: config ccache to give it plenty of space
|
|
# TODO: check that there is enough space on disk to do a build and data load
|
|
# TODO: make this work with non-bash shells
|
|
|
|
JDK_VERSION=8
|
|
if [[ $DISTRIB_RELEASE = 14.04 ]]
|
|
then
|
|
JDK_VERSION=7
|
|
fi
|
|
apt-get --yes install openjdk-${JDK_VERSION}-jdk openjdk-${JDK_VERSION}-source
|
|
SET_JAVA_HOME="export JAVA_HOME=/usr/lib/jvm/java-${JDK_VERSION}-openjdk-amd64"
|
|
echo "$SET_JAVA_HOME" >> "${IMPALA_HOME}/bin/impala-config-local.sh"
|
|
eval "$SET_JAVA_HOME"
|
|
|
|
sudo service ntp stop
|
|
sudo ntpdate us.pool.ntp.org
|
|
# If on EC2, use Amazon's ntp servers
|
|
if which dmidecode && { sudo dmidecode -s bios-version | grep amazon; }
|
|
then
|
|
sudo sed -i 's/ubuntu\.pool/amazon\.pool/' /etc/ntp.conf
|
|
grep amazon /etc/ntp.conf
|
|
grep ubuntu /etc/ntp.conf
|
|
fi
|
|
# While it is nice to have ntpd running to keep the clock in sync, that does not work in a
|
|
# --privileged docker container, and a non-privileged container cannot run ntpdate, which
|
|
# is strictly needed by Kudu.
|
|
# TODO: Make privileged docker start ntpd
|
|
sudo service ntp start || grep docker /proc/1/cgroup
|
|
|
|
# IMPALA-3932, IMPALA-3926
|
|
if [[ $DISTRIB_RELEASE = 16.04 ]]
|
|
then
|
|
SET_LD_LIBRARY_PATH='export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}'
|
|
elif [[ $DISTRIB_RELEASE = 14.04 ]]
|
|
then
|
|
SET_LD_LIBRARY_PATH="unset LD_LIBRARY_PATH"
|
|
fi
|
|
echo "$SET_LD_LIBRARY_PATH" >> "${IMPALA_HOME}/bin/impala-config-local.sh"
|
|
eval "$SET_LD_LIBRARY_PATH"
|
|
|
|
# TODO: What are the security implications of this?
|
|
for PG_AUTH_FILE in /etc/postgresql/*/main/pg_hba.conf
|
|
do
|
|
sudo sed -ri 's/local +all +all +peer/local all all trust/g' $PG_AUTH_FILE
|
|
done
|
|
sudo service postgresql restart
|
|
sudo /etc/init.d/postgresql reload
|
|
sudo service postgresql restart
|
|
|
|
# Set up postgress for HMS
|
|
if ! [[ 1 = $(sudo -u postgres psql -At -c "SELECT count(*) FROM pg_roles WHERE rolname = 'hiveuser';") ]]
|
|
then
|
|
sudo -u postgres psql -c "CREATE ROLE hiveuser LOGIN PASSWORD 'password';"
|
|
fi
|
|
sudo -u postgres psql -c "ALTER ROLE hiveuser WITH CREATEDB;"
|
|
sudo -u postgres psql -c "SELECT * FROM pg_roles WHERE rolname = 'hiveuser';"
|
|
|
|
# Setup ssh to ssh to localhost
|
|
mkdir -p ~/.ssh
|
|
chmod go-rwx ~/.ssh
|
|
if ! [[ -f ~/.ssh/id_rsa ]]
|
|
then
|
|
ssh-keygen -t rsa -N '' -q -f ~/.ssh/id_rsa
|
|
fi
|
|
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
|
|
echo "NoHostAuthenticationForLocalhost yes" >> ~/.ssh/config
|
|
ssh localhost whoami
|
|
|
|
# Workarounds for HDFS networking issues
|
|
echo "127.0.0.1 $(hostname -s) $(hostname)" | sudo tee -a /etc/hosts
|
|
# In Docker, one can change /etc/hosts as above but not with sed -i. The error message is
|
|
# "sed: cannot rename /etc/sedc3gPj8: Device or resource busy". The following lines are
|
|
# basically sed -i but with cp instead of mv for -i part.
|
|
NEW_HOSTS=$(mktemp)
|
|
sed 's/127.0.1.1/127.0.0.1/g' /etc/hosts > "${NEW_HOSTS}"
|
|
diff -u /etc/hosts "${NEW_HOSTS}" || true
|
|
sudo cp "${NEW_HOSTS}" /etc/hosts
|
|
rm "${NEW_HOSTS}"
|
|
|
|
sudo mkdir -p /var/lib/hadoop-hdfs
|
|
sudo chown $(whoami) /var/lib/hadoop-hdfs/
|
|
|
|
# TODO: restrict this to only the users it is needed for
|
|
echo "* - nofile 1048576" | sudo tee -a /etc/security/limits.conf
|
|
|
|
# LZO is not needed to compile or run Impala, but it is needed for the data load
|
|
if ! [[ -d ~/Impala-lzo ]]
|
|
then
|
|
git clone https://github.com/cloudera/impala-lzo.git ~/Impala-lzo
|
|
fi
|
|
if ! [[ -d ~/hadoop-lzo ]]
|
|
then
|
|
git clone https://github.com/cloudera/hadoop-lzo.git ~/hadoop-lzo
|
|
fi
|
|
cd ~/hadoop-lzo/
|
|
time -p ant package
|
|
cd "$IMPALA_HOME"
|
|
|
|
export MAX_PYTEST_FAILURES=0
|
|
source bin/impala-config.sh
|
|
export NUM_CONCURRENT_TESTS=$(nproc)
|
|
time -p ./buildall.sh -noclean -format -testdata -skiptests
|
|
|
|
# To then run the tests:
|
|
# time -p bin/run-all-tests.sh
|