Use the right build command to build only the things that changed:

# Regenerate cmake files.
./buildall.sh -cmake_only

# Rebuild impalad binary only:
make -j ${IMPALA_BUILD_THREADS} impalad

# Rebuild a backend test binary only:
make -j ${IMPALA_BUILD_THREADS} buffered-block-mgr-test

# Rebuild frontend only:
make fe

Pass the right command line flags to skip unnecessary work:

  • Add -notests to buildall.sh command to skip building backend tests
  • Pass -noclean to buildall.sh if you don't need to do a full clean

Ccache - speeds up rebuilds when switching between branches

Ccache is a standard tool to accelerate C/C++ builds by caching previously-built object files. It can tremendously speed up builds when switching between branches of Impala.

# Install the ccache package (this example works on Ubuntu)
sudo apt-get install ccache

# Make sure you have a high limit on your max ccache size to ensure it is effective
ccache --max-size=50G

Ninja - speeds up incremental builds

Ninja is an alternative to make that can resolve dependencies much faster. This can save 10+ seconds per invocation compared to make, which is significant for incremental builds (the difference in speed between ninja and make for full builds is minor compared to the end-to-end runtime of the build).

# Install the ninja package (this example works on Ubuntu)
sudo apt-get install ninja-build

# Instead of ./buildall.sh ...:
./buildall.sh ... -ninja

# Instead of make -j ${IMPALA_BUILD_THREADS} <targets>:
ninja -j ${IMPALA_BUILD_THREADS} <targets>

# You can use an alias to make ninja use IMPALA_BUILD_THREADS by default
alias ninja='ninja -j ${IMPALA_BUILD_THREADS}'


Using distcc

The instructions for using distcc are in bin/distcc/README.md

Skip checking toolchain dependencies (advanced only)

By default buildall.sh will check for toolchain and python package updates, which can add some time to buildall.sh invocations. You can disable this by adding this line to bin/impala-config-local.sh:

bin/impala-config-local.sh
export SKIP_TOOLCHAIN_BOOTSTRAP=true

If you do this then you may run into build failures because of missing dependencies, and you will need to temporarily disable this optimisation or directly download the dependencies (e.g. by running bin/bootstrap_toolchain.py)

  • No labels