diff --git a/bigtop-packages/src/common/spark/do-component-build b/bigtop-packages/src/common/spark/do-component-build
index 54e5b8591d..d6db4766fb 100644
--- a/bigtop-packages/src/common/spark/do-component-build
+++ b/bigtop-packages/src/common/spark/do-component-build
@@ -18,6 +18,68 @@ set -ex
. `dirname $0`/bigtop.bom
+# BIGTOP-3907: Build native library/jars for aarch64
+if [ $HOSTTYPE = "aarch64" ] ; then
+ # download leveldbjni 1.8 from original repo
+ git clone https://github.com/chirino/leveldb.git
+ git clone https://github.com/fusesource/leveldbjni.git --branch leveldbjni-1.8 --single-branch
+ export SNAPPY_HOME=/usr/lib
+ export LEVELDB_HOME=`cd leveldb; pwd`
+ export LEVELDBJNI_HOME=`cd leveldbjni; pwd`
+ export LIBRARY_PATH=${SNAPPY_HOME}
+ cd ${LEVELDB_HOME}
+ export C_INCLUDE_PATH=${LIBRARY_PATH}
+ export CPLUS_INCLUDE_PATH=${LIBRARY_PATH}
+ # apply ARM64 specific patch
+ patch -p1 -E << 'EOF'
+diff a/port/atomic_pointer.h b/port/atomic_pointer.h
+--- a/port/atomic_pointer.h
++++ b/port/atomic_pointer.h
+@@ -36,6 +36,8 @@
+ #define ARCH_CPU_X86_FAMILY 1
+ #elif defined(__ARMEL__)
+ #define ARCH_CPU_ARM_FAMILY 1
++#elif defined(__aarch64__)
++#define ARCH_CPU_ARM64_FAMILY 1
+ #elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
+ #define ARCH_CPU_PPC_FAMILY 1
+ #endif
+@@ -93,6 +95,13 @@ inline void MemoryBarrier() {
+ }
+ #define LEVELDB_HAVE_MEMORY_BARRIER
+
++// ARM64
++#elif defined(ARCH_CPU_ARM64_FAMILY) && defined(__linux__)
++inline void MemoryBarrier() {
++ asm volatile("dmb sy" : : : "memory");
++}
++#define LEVELDB_HAVE_MEMORY_BARRIER
++
+ // PPC
+ #elif defined(ARCH_CPU_PPC_FAMILY) && defined(__GNUC__)
+ inline void MemoryBarrier() {
+@@ -216,6 +225,7 @@ class AtomicPointer {
+ #undef LEVELDB_HAVE_MEMORY_BARRIER
+ #undef ARCH_CPU_X86_FAMILY
+ #undef ARCH_CPU_ARM_FAMILY
++#undef ARCH_CPU_ARM64_FAMILY
+ #undef ARCH_CPU_PPC_FAMILY
+
+ } // namespace port
+EOF
+ git apply ../leveldbjni/leveldb.patch
+ make libleveldb.a
+ # Now use maven to build and update the local maven repository with
+ # aarch64 version of leveldbjni.
+ cd ${LEVELDBJNI_HOME}
+ mvn clean install -DskipTests -P download -Plinux64,all
+ cd ..
+ #cleanup
+ rm -rf ${LEVELDBJNI_HOME}
+ rm -rf ${LEVELDB_HOME}
+fi
+## BIGTOP-3907
+
BUILD_OPTS="-Divy.home=${HOME}/.ivy2 -Dsbt.ivy.home=${HOME}/.ivy2 -Duser.home=${HOME} \
-Drepo.maven.org=$IVY_MIRROR_PROP \
-Dreactor.repo=file://${HOME}/.m2/repository \
diff --git a/bigtop-packages/src/common/spark/patch1-remove-aarch64-profile.diff b/bigtop-packages/src/common/spark/patch1-remove-aarch64-profile.diff
new file mode 100644
index 0000000000..d76388d91f
--- /dev/null
+++ b/bigtop-packages/src/common/spark/patch1-remove-aarch64-profile.diff
@@ -0,0 +1,24 @@
+diff --git a/pom.xml b/pom.xml
+index 183d258840..0a5df7944d 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -3506,19 +3506,6 @@
+
+ sparkr
+
+-
+-
+- aarch64
+-
+- org.openlabtesting.leveldbjni
+-
+-
+-
+- linux
+- aarch64
+-
+-
+-
+
+ jdwp-test-debug
+