Build from Source Code

Download BigDL Source

BigDL source code is available at GitHub

$ git clone

By default, git clone will download the development version of BigDL, if you want a release version, you can use command git checkout to change the version. Available release versions is BigDL releases.

Setup Build Environment

The following instructions are aligned with master code.

Maven 3 is needed to build BigDL, you can download it from the maven website.

After installing Maven 3, please set the environment variable MAVEN_OPTS as follows:

$ export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

When compiling with Java 7, you need to add the option ā€œ-XX:MaxPermSize=1Gā€.

It is highly recommended that you build BigDL using the script. And it will handle the MAVEN_OPTS variable.

Once downloaded, you can build BigDL with one of the following commands:

For Spark 2.0 and above (using Scala 2.11)

$ bash -P spark_2.x

It is highly recommended to use Java 8 when running with Spark 2.x; otherwise you may observe very poor performance.

For Spark 1.5.x or 1.6.x (using Scala 2.10)

$ bash

Specify a Scala version By default, uses Scala 2.10 for Spark 1.5.x or 1.6.x, and Scala 2.11 for Spark 2.0.x or 2.1.x. To override the default behaviors, you can pass -P scala_2.10 or -P scala_2.11 to as appropriate.

After that, you can find a dist folder, which contains all the needed files to run a BigDL program. The files in dist include:

Build with Maven

To build BigDL directly using Maven, run the command below:

$ mvn clean package -DskipTests

After that, you can find that the three jar packages in PATH_To_BigDL/target/, where PATH_To_BigDL is the path to the directory of the BigDL.

Note that the instructions above will build BigDL with Spark 1.5.x or 1.6.x (using Scala 2.10) for Linux, and skip the build of native library code. Similarly, you may customize the default behaviors by passing the following parameters to maven:

Setup IDE

We set the scope of spark related library to provided in pom.xml. The reason is that we don't want package spark related jars which will make bigdl a huge jar, and generally as bigdl is invoked by spark-submit, these dependencies will be provided by spark at run-time.

This will cause a problem in IDE. When you run applications, it will throw NoClassDefFoundError because the library scope is provided.

You can easily change the scopes by the all-in-one profile.