You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bb...@apache.org on 2022/12/15 17:03:41 UTC

[hbase] 01/91: Add maven and RPM building in blazar

This is an automated email from the ASF dual-hosted git repository.

bbeaudreault pushed a commit to branch hubspot-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit fd5b526398d1a3bb371f15cd951606e34c6487b8
Author: Bryan Beaudreault <bb...@hubspot.com>
AuthorDate: Wed Jun 9 09:51:16 2021 -0400

    Add maven and RPM building in blazar
    
    This uses our standard buildpack, but each module must get a custom .blazar.yaml to pass in required
    properties to the build. One can distribute that .blazar.yaml using build-scripts/copy_blazar_yaml.sh.
    In order to minimize the duplication, most of the customizations are consolidated in
    build-scripts/prepare_environment.sh.
    
    The RPM build is hooked into the standard build hbase-assembly, as a post-build step. The RPM build
    scripts in hbase-assembly/rpm-build handle turning the assembled tar.gz into multiple RPMs. We required
    some minor changes to the descriptor in hbase-assembly to account for the fact that our build processes
    each module independently instead of as a single reactor build. As a result, moduleSet does not work, so
    moduleSet usages were converted to dependencySet.
---
 .blazar.yaml                                       |  18 +
 build-scripts/copy_blazar_yaml.sh                  |  10 +
 build-scripts/prepare_environment.sh               | 103 +++++
 hbase-annotations/.blazar.yaml                     |  18 +
 hbase-archetypes/.blazar.yaml                      |  18 +
 .../hbase-archetype-builder/.blazar.yaml           |  18 +
 hbase-archetypes/hbase-client-project/.blazar.yaml |  18 +
 .../hbase-shaded-client-project/.blazar.yaml       |  18 +
 hbase-assembly/.blazar.yaml                        |  34 ++
 hbase-assembly/pom.xml                             |   9 +
 hbase-assembly/rpm-build/build.sh                  |  61 +++
 hbase-assembly/rpm-build/hbase.spec                | 229 +++++++++++
 hbase-assembly/rpm-build/sources/hbase.1           |  88 ++++
 hbase-assembly/rpm-build/sources/hbase.default     |  41 ++
 .../rpm-build/sources/hbase.nofiles.conf           |  16 +
 hbase-assembly/rpm-build/sources/hbase.svc         |  92 +++++
 hbase-assembly/rpm-build/sources/init.d.tmpl       | 311 ++++++++++++++
 hbase-assembly/rpm-build/sources/install_hbase.sh  | 181 +++++++++
 .../rpm-build/sources/regionserver-init.d.tpl      | 446 +++++++++++++++++++++
 .../src/main/assembly/hadoop-three-compat.xml      | 178 +++-----
 hbase-asyncfs/.blazar.yaml                         |  18 +
 hbase-build-configuration/.blazar.yaml             |  18 +
 hbase-checkstyle/.blazar.yaml                      |  18 +
 hbase-client/.blazar.yaml                          |  18 +
 hbase-common/.blazar.yaml                          |  18 +
 hbase-common/pom.xml                               |   8 +-
 hbase-endpoint/.blazar.yaml                        |  18 +
 hbase-examples/.blazar.yaml                        |  18 +
 hbase-external-blockcache/.blazar.yaml             |  18 +
 hbase-hadoop-compat/.blazar.yaml                   |  18 +
 hbase-hadoop2-compat/.blazar.yaml                  |  18 +
 hbase-hbtop/.blazar.yaml                           |  18 +
 hbase-http/.blazar.yaml                            |  18 +
 hbase-it/.blazar.yaml                              |  18 +
 hbase-logging/.blazar.yaml                         |  18 +
 hbase-mapreduce/.blazar.yaml                       |  18 +
 hbase-metrics-api/.blazar.yaml                     |  18 +
 hbase-metrics/.blazar.yaml                         |  18 +
 hbase-procedure/.blazar.yaml                       |  18 +
 hbase-protocol-shaded/.blazar.yaml                 |  18 +
 hbase-protocol/.blazar.yaml                        |  18 +
 hbase-replication/.blazar.yaml                     |  18 +
 hbase-resource-bundle/.blazar.yaml                 |  18 +
 hbase-rest/.blazar.yaml                            |  18 +
 hbase-rsgroup/.blazar.yaml                         |  18 +
 hbase-server/.blazar.yaml                          |  18 +
 hbase-shaded/.blazar.yaml                          |  18 +
 .../hbase-shaded-check-invariants/.blazar.yaml     |  18 +
 .../hbase-shaded-client-byo-hadoop/.blazar.yaml    |  18 +
 hbase-shaded/hbase-shaded-client/.blazar.yaml      |  18 +
 hbase-shaded/hbase-shaded-mapreduce/.blazar.yaml   |  18 +
 .../hbase-shaded-testing-util-tester/.blazar.yaml  |  18 +
 .../hbase-shaded-testing-util/.blazar.yaml         |  18 +
 .../.blazar.yaml                                   |  18 +
 hbase-shell/.blazar.yaml                           |  18 +
 hbase-testing-util/.blazar.yaml                    |  18 +
 hbase-thrift/.blazar.yaml                          |  18 +
 hbase-zookeeper/.blazar.yaml                       |  18 +
 pom.xml                                            |   5 +
 59 files changed, 2472 insertions(+), 114 deletions(-)

diff --git a/.blazar.yaml b/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/build-scripts/copy_blazar_yaml.sh b/build-scripts/copy_blazar_yaml.sh
new file mode 100755
index 00000000000..1cb33dc484f
--- /dev/null
+++ b/build-scripts/copy_blazar_yaml.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+poms=$(find . -name pom.xml)
+
+for pom in $poms; do
+    module=$(dirname $pom)
+    if [[ "$module" != "." && "$module" != "./hbase-assembly" ]]; then
+        cp .blazar.yaml $module/.blazar.yaml
+    fi
+done
diff --git a/build-scripts/prepare_environment.sh b/build-scripts/prepare_environment.sh
new file mode 100755
index 00000000000..4b63081430b
--- /dev/null
+++ b/build-scripts/prepare_environment.sh
@@ -0,0 +1,103 @@
+#
+# Generates the appropriate environment vars so that we:
+# - build against the right version of hadoop, and properly set up maven
+# - generate the correct maven version based on the branches
+# - upload RPMs with the correct release based on the branch, and to the right yum repo
+#
+# Since we need to distribute .blazar.yaml to all sub-modules of the project, we define our constants once
+# in this script which can be re-used by every .blazar.yaml.
+#
+
+MAIN_BRANCH="hubspot-2"
+MAIN_YUM_REPO="6_hs-hbase"
+DEVELOP_YUM_REPO="6_hs-hbase-develop"
+
+# If we bump our hadoop build version, we should bump this as well
+# At some point it would be good to more closely link this to our hadoop build, but that can only happen
+# once we update our apache-hadoop build to do a full maven. At which point we can probably change this to 
+# like 3.0-hubspot-SNAPSHOT and leave it at that.
+HADOOP_DEP_VERSION="3.3.1"
+MAVEN_ARGS="-Phadoop-3.0 -Dhadoop.profile=3.0 -Dhadoop-three.version=$HADOOP_DEP_VERSION -Dgpg.skip=true -DskipTests=true"
+
+#
+# Validate inputs from blazar
+#
+
+if [ -z "$WORKSPACE" ]; then
+    echo "Missing env var \$WORKSPACE"
+    exit 1
+fi
+if [ -z "$GIT_BRANCH" ]; then
+    echo "Missing env var \$GIT_BRANCH"
+    exit 1
+fi
+if [ -z "$BUILD_COMMAND_RC_FILE" ]; then
+    echo "Missing env var \$BUILD_COMMAND_RC_FILE"
+    exit 1
+fi
+
+#
+# Extract current hbase version from root pom.xml
+#
+
+# the pom.xml has an invalid xml namespace, so just remove that so xmllint can parse it.
+cat $WORKSPACE/pom.xml | sed '2 s/xmlns=".*"//g' > pom.xml.tmp
+HBASE_VERSION=$(echo "cat /project/version/text()" | xmllint --nocdata --shell pom.xml.tmp | sed '1d;$d')
+rm pom.xml.tmp
+
+# sanity check that we've got some that looks right. it wouldn't be the end of the world if we got it wrong, but 
+# will help avoid confusion.
+if [[ ! "$HBASE_VERSION" =~ 2\.[0-9]+\.[0-9]+ ]]; then
+    echo "Unexpected HBASE_Version extracted from pom.xml. Got $HBASE_VERSION but expected a string like '2.4.3', with 3 numbers separated by decimals, the first number being 2."
+    exit 1
+fi
+
+#
+# Generate branch-specific env vars
+# We are going to generate the maven version and the RPM release here:
+# - For the maven version, we need to special case our main branch
+# - For RPM, we want our final version to be:
+#   main branch: {hbase_version}-hs.{build_number}.el6
+#   other branches: {hbase_version}-hs~{branch_name}.{build_number}.el6, where branch_name substitutes underscore for non-alpha-numeric characters
+#
+
+echo "Git branch $GIT_BRANCH. Detecting appropriate version override and RPM release."
+
+RELEASE="hs"
+
+if [[ "$GIT_BRANCH" = "$MAIN_BRANCH" ]]; then
+    MAVEN_VERSION="2.0-hubspot-SNAPSHOT"
+    YUM_REPO=$MAIN_YUM_REPO
+elif [[ "$GIT_BRANCH" != "hubspot" ]]; then
+    MAVEN_VERSION="2.0-${GIT_BRANCH}-SNAPSHOT"
+    RELEASE="${RELEASE}~${GIT_BRANCH//[^[:alnum:]]/_}"
+    YUM_REPO=$DEVELOP_YUM_REPO
+else
+    echo "Invalid git branch $GIT_BRANCH"
+    exit 1
+fi
+
+RELEASE="${RELEASE}.${BUILD_NUMBER}"
+FULL_BUILD_VERSION="${HBASE_VERSION}-${RELEASE}"
+
+# Add into MAVEN_ARGS because we added this property in hbase-common/pom.xml so we 
+# could accurately reflect the full build version in the UI and elsewhere.
+MAVEN_ARGS="$MAVEN_ARGS -Dhubspot.build.version=$FULL_BUILD_VERSION"
+
+#
+# Dump generated env vars into rc file
+#
+
+cat >> "$BUILD_COMMAND_RC_FILE" <<EOF
+export MAVEN_ARGS='$MAVEN_ARGS'
+export SET_VERSION='$MAVEN_VERSION'
+export HBASE_VERSION='$HBASE_VERSION'
+export PKG_RELEASE='$RELEASE'
+export YUM_REPO='$YUM_REPO'
+export FULL_BUILD_VERSION='$FULL_BUILD_VERSION'
+EOF
+
+echo "Building HBase version $HBASE_VERSION"
+echo "Will use maven version $MAVEN_VERSION"
+echo "Will run maven with extra args $MAVEN_ARGS"
+echo "Will upload RPMs with version $FULL_BUILD_VERSION to $YUM_REPO"
diff --git a/hbase-annotations/.blazar.yaml b/hbase-annotations/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-annotations/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-archetypes/.blazar.yaml b/hbase-archetypes/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-archetypes/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-archetypes/hbase-archetype-builder/.blazar.yaml b/hbase-archetypes/hbase-archetype-builder/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-archetypes/hbase-archetype-builder/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-archetypes/hbase-client-project/.blazar.yaml b/hbase-archetypes/hbase-client-project/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-archetypes/hbase-client-project/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-archetypes/hbase-shaded-client-project/.blazar.yaml b/hbase-archetypes/hbase-shaded-client-project/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-archetypes/hbase-shaded-client-project/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-assembly/.blazar.yaml b/hbase-assembly/.blazar.yaml
new file mode 100644
index 00000000000..ba54ab3da02
--- /dev/null
+++ b/hbase-assembly/.blazar.yaml
@@ -0,0 +1,34 @@
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+env:
+  RPMS_OUTPUT_DIR: "$WORKSPACE/generated_rpms"
+  MAVEN_PHASE: package assembly:single
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
+
+after:
+  onSuccess:
+    - description: "Ensure $RPMS_OUTPUT_DIR exists"
+      commands:
+        - mkdir -p $RPMS_OUTPUT_DIR
+
+    - description: "Create RPM Package"
+      commands:
+        - ./rpm-build/build.sh
+
+    - description: "List RPMs in $RPMS_OUTPUT_DIR"
+      commands:
+        - echo "The following Rpms are ready for upload"
+        - ls -lah $RPMS_OUTPUT_DIR
+
+    - description: "Publish RPM"
+      commands:
+        - echo "Will upload to $YUM_REPO"
+        - rpm-upload --rpms-dir=$WORKSPACE/generated_rpms/ --repo-name $YUM_REPO
diff --git a/hbase-assembly/pom.xml b/hbase-assembly/pom.xml
index 678e553f3e4..1c1f7373f2d 100644
--- a/hbase-assembly/pom.xml
+++ b/hbase-assembly/pom.xml
@@ -175,6 +175,15 @@
     </plugins>
   </build>
   <dependencies>
+    <!--
+      Added by HubSpot since this module was in the original hadoop-three-compat moduleSet include list,
+      which is now converted to a dependencySet.
+    -->
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-annotations</artifactId>
+    </dependency>
+
     <!-- client artifacts for downstream use -->
     <dependency>
       <groupId>org.apache.hbase</groupId>
diff --git a/hbase-assembly/rpm-build/build.sh b/hbase-assembly/rpm-build/build.sh
new file mode 100755
index 00000000000..8767da5bb8e
--- /dev/null
+++ b/hbase-assembly/rpm-build/build.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -e
+set -x
+
+RPM_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+# If not specified, extract the version.
+if [[ "X$HBASE_VERSION" = "X" ]]; then
+    echo "Must specifiy \$HBASE_VERSION"
+    exit 1
+fi
+
+# Setup scratch dir
+SCRATCH_DIR="${RPM_DIR}/scratch"
+
+rm -rf $SCRATCH_DIR
+mkdir -p ${SCRATCH_DIR}/{SOURCES,SPECS,RPMS,SRPMS}
+cp -a $RPM_DIR/sources/* ${SCRATCH_DIR}/SOURCES/
+cp $RPM_DIR/hbase.spec ${SCRATCH_DIR}/SPECS/
+
+# Set up src dir
+SRC_DIR="${RPM_DIR}/hbase-$HBASE_VERSION"
+TAR_NAME=hbase-$HBASE_VERSION.tar.gz
+
+rm -rf $SRC_DIR
+rsync -a $RPM_DIR/../../ $SRC_DIR --exclude rpm-assembly --exclude .git
+
+pushd $SRC_DIR/../
+tar -czf ${SCRATCH_DIR}/SOURCES/${TAR_NAME} $(basename $SRC_DIR)
+popd
+
+# Build srpm
+
+rpmbuild \
+    --define "_topdir $SCRATCH_DIR" \
+    --define "input_tar $TAR_NAME" \
+    --define "mvn_target_dir $RPM_DIR/../target" \
+    --define "hbase_version ${HBASE_VERSION}" \
+    --define "release ${PKG_RELEASE}%{?dist}" \
+    -bs --nodeps --buildroot="${SCRATCH_DIR}/INSTALL" \
+    ${SCRATCH_DIR}/SPECS/hbase.spec
+
+src_rpm=$(ls -1 ${SCRATCH_DIR}/SRPMS/hbase-*)
+
+# build rpm
+
+rpmbuild \
+    --define "_topdir $SCRATCH_DIR" \
+    --define "input_tar $TAR_NAME" \
+    --define "mvn_target_dir $RPM_DIR/../target" \
+    --define "hbase_version ${HBASE_VERSION}" \
+    --define "release ${PKG_RELEASE}%{?dist}" \
+    --rebuild $src_rpm
+
+if [[ -d $RPMS_OUTPUT_DIR ]]; then
+    mkdir -p $RPMS_OUTPUT_DIR
+
+    # Move rpms to output dir for upload
+
+    find ${SCRATCH_DIR}/{SRPMS,RPMS} -name "*.rpm" -exec mv {} $RPMS_OUTPUT_DIR/ \;
+fi
\ No newline at end of file
diff --git a/hbase-assembly/rpm-build/hbase.spec b/hbase-assembly/rpm-build/hbase.spec
new file mode 100644
index 00000000000..b2ccc892663
--- /dev/null
+++ b/hbase-assembly/rpm-build/hbase.spec
@@ -0,0 +1,229 @@
+# taken from hbase.spec in https://github.com/apache/bigtop/
+# greatly modified to simplify and fix dependencies to work in the hubspot environment
+
+%define hadoop_major_version 3.2
+%define hbase_major_version 2.4
+%define etc_hbase_conf %{_sysconfdir}/hbase/conf
+%define etc_hbase_conf_dist %{etc_hbase_conf}.dist
+%define hbase_home /usr/lib/hbase
+%define bin_hbase %{hbase_home}/bin
+%define lib_hbase %{hbase_home}/lib
+%define conf_hbase %{hbase_home}/conf
+%define logs_hbase %{hbase_home}/logs
+%define pids_hbase %{hbase_home}/pids
+#%define webapps_hbase %{hbase_home}/hbase-webapps
+%define man_dir %{_mandir}
+%define hbase_username hbase
+%define hbase_services master regionserver thrift thrift2 rest
+%define hadoop_home /usr/lib/hadoop
+%define zookeeper_home /usr/lib/zookeeper
+
+# FIXME: brp-repack-jars uses unzip to expand jar files
+# Unfortunately guice-2.0.jar pulled by ivy contains some files and directories without any read permission
+# and make whole process to fail.
+# So for now brp-repack-jars is being deactivated until this is fixed.
+# See BIGTOP-294
+%define __os_install_post \
+    %{_rpmconfigdir}/brp-compress ; \
+    %{_rpmconfigdir}/brp-strip-static-archive %{__strip} ; \
+    %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} ; \
+    /usr/lib/rpm/brp-python-bytecompile ; \
+    %{nil}
+
+%define doc_hbase %{_docdir}/hbase-%{hbase_version}
+%global initd_dir %{_sysconfdir}/rc.d/init.d
+%define alternatives_cmd alternatives
+
+# Disable debuginfo package
+%define debug_package %{nil}
+
+Name: hbase
+Version: %{hbase_version}
+Release: %{release}
+Summary: HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. 
+URL: http://hbase.apache.org/
+Group: Systems/Daemons
+Buildroot: %{_topdir}/INSTALL/hbase-%{version}
+License: ASL 2.0
+Source0: %{input_tar}
+Source1: install_hbase.sh
+Source2: hbase.svc
+Source3: init.d.tmpl
+Source4: hbase.default
+Source5: hbase.nofiles.conf
+Source6: regionserver-init.d.tpl
+
+Requires: coreutils, /usr/sbin/useradd, /sbin/chkconfig, /sbin/service
+Requires: hadoop >= %{hadoop_major_version}
+
+AutoReq: no
+
+%description
+HBase is an open-source, distributed, column-oriented store modeled after Google' Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, HBase provides Bigtable-like capabilities on top of Hadoop. HBase includes:
+
+    * Convenient base classes for backing Hadoop MapReduce jobs with HBase tables
+    * Query predicate push down via server side scan and get filters
+    * Optimizations for real time queries
+    * A high performance Thrift gateway
+    * A REST-ful Web service gateway that supports XML, Protobuf, and binary data encoding options
+    * Cascading source and sink modules
+    * Extensible jruby-based (JIRB) shell
+    * Support for exporting metrics via the Hadoop metrics subsystem to files or Ganglia; or via JMX
+
+%package master
+Summary: The Hadoop HBase master Server.
+Group: System/Daemons
+Requires: %{name} >= %{hbase_major_version}
+Requires(pre): %{name} >= %{hbase_major_version}
+# Required for init scripts
+Requires: /lib/lsb/init-functions
+
+%description master
+HMaster is the "coordinator server" for a HBase. There is only one HMaster for a single HBase deployment.
+
+%package regionserver
+Summary: The Hadoop HBase RegionServer server.
+Group: System/Daemons
+Requires: %{name} >= %{hbase_major_version}
+Requires(pre): %{name} >= %{hbase_major_version}
+Requires: /lib/lsb/init-functions
+
+%description regionserver
+HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There are many HRegionServers in a single HBase deployment.
+
+%package thrift
+Summary: The Hadoop HBase Thrift Interface
+Group: System/Daemons
+Requires: %{name} >= %{hbase_major_version}
+Requires(pre): %{name} >= %{hbase_major_version}
+# Required for init scripts
+Requires: /lib/lsb/init-functions
+
+%description thrift
+ThriftServer - this class starts up a Thrift server which implements the Hbase API specified in the Hbase.thrift IDL file.
+"Thrift is a software framework for scalable cross-language services development. It combines a powerful software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, and Ruby. Thrift was developed at Facebook, and we are now releasing it as open source." For additional information, see http://developers.facebook.com/thrift/. Facebook has announced their intent to migrate Thrift into Apache Incubator.
+
+%package thrift2
+Summary: The Hadoop HBase Thrift2 Interface
+Group: System/Daemons
+Requires: %{name} >= %{hbase_major_version}
+Requires(pre): %{name} >= %{hbase_major_version}
+# Required for init scripts
+Requires: /lib/lsb/init-functions
+
+%description thrift2
+Thrift2 Server to supersede original Thrift Server.
+Still under development. https://issues.apache.org/jira/browse/HBASE-8818
+
+%package rest
+Summary: The Apache HBase REST gateway
+Group: System/Daemons
+Requires: %{name} >= %{hbase_major_version}
+Requires(pre): %{name} >= %{hbase_major_version}
+# Required for init scripts
+Requires: /lib/lsb/init-functions
+
+%description rest
+The Apache HBase REST gateway
+
+%prep
+%setup -n hbase-%{hbase_version}
+
+%install
+%__rm -rf $RPM_BUILD_ROOT
+bash %{SOURCE1} \
+	--mvn-target-dir=%{mvn_target_dir} \
+    --doc-dir=%{doc_hbase} \
+    --conf-dir=%{etc_hbase_conf_dist} \
+	--prefix=$RPM_BUILD_ROOT
+
+%__install -d -m 0755 $RPM_BUILD_ROOT/%{initd_dir}/
+
+%__install -d -m 0755 $RPM_BUILD_ROOT/etc/default/
+%__install -m 0644 %{SOURCE4} $RPM_BUILD_ROOT/etc/default/hbase
+
+%__install -d -m 0755 $RPM_BUILD_ROOT/etc/security/limits.d
+%__install -m 0644 %{SOURCE5} $RPM_BUILD_ROOT/etc/security/limits.d/hbase.nofiles.conf
+
+%__install -d  -m 0755  %{buildroot}/%{_localstatedir}/log/hbase
+ln -s %{_localstatedir}/log/hbase %{buildroot}/%{logs_hbase}
+
+%__install -d  -m 0755  %{buildroot}/%{_localstatedir}/run/hbase
+ln -s %{_localstatedir}/run/hbase %{buildroot}/%{pids_hbase}
+
+%__install -d  -m 0755  %{buildroot}/%{_localstatedir}/lib/hbase
+
+for service in %{hbase_services}
+do
+    init_file=$RPM_BUILD_ROOT/%{initd_dir}/hbase-${service}
+    if [[ "$service" = "regionserver" ]] ; then
+        # Region servers start from a different template that allows
+        # them to run multiple concurrent instances of the daemon
+        %__cp %{SOURCE6} $init_file
+        %__sed -i -e "s|@INIT_DEFAULT_START@|3 4 5|" $init_file
+        %__sed -i -e "s|@INIT_DEFAULT_STOP@|0 1 2 6|" $init_file
+        %__sed -i -e "s|@CHKCONFIG@|345 87 13|" $init_file
+        %__sed -i -e "s|@HBASE_DAEMON@|${service}|" $init_file
+    else
+        %__sed -e "s|@HBASE_DAEMON@|${service}|" %{SOURCE2} > ${RPM_SOURCE_DIR}/hbase-${service}.node
+        bash %{SOURCE3} ${RPM_SOURCE_DIR}/hbase-${service}.node rpm $init_file
+    fi
+
+    chmod 755 $init_file
+done
+
+%__install -d -m 0755 $RPM_BUILD_ROOT/usr/bin
+
+# Pull hadoop from its packages
+rm -f $RPM_BUILD_ROOT/%{lib_hbase}/{hadoop,slf4j-log4j12-}*.jar
+
+ln -f -s %{hadoop_home}/client/hadoop-annotations.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-auth.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-common.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-hdfs-client.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-mapreduce-client-common.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-mapreduce-client-core.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-mapreduce-client-jobclient.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-yarn-api.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-yarn-client.jar $RPM_BUILD_ROOT/%{lib_hbase}
+ln -f -s %{hadoop_home}/client/hadoop-yarn-common.jar $RPM_BUILD_ROOT/%{lib_hbase}
+
+%pre
+getent group hbase 2>/dev/null >/dev/null || /usr/sbin/groupadd -r hbase
+getent passwd hbase 2>&1 > /dev/null || /usr/sbin/useradd -c "HBase" -s /sbin/nologin -g hbase -r -d /var/lib/hbase hbase 2> /dev/null || :
+
+%post
+%{alternatives_cmd} --install %{etc_hbase_conf} %{name}-conf %{etc_hbase_conf_dist} 30
+
+%files
+%defattr(-,hbase,hbase)
+%{logs_hbase}
+%{pids_hbase}
+%dir %{_localstatedir}/log/hbase
+%dir %{_localstatedir}/run/hbase
+%dir %{_localstatedir}/lib/hbase
+
+%defattr(-,root,root)
+%config(noreplace) %{_sysconfdir}/default/hbase
+%config(noreplace) /etc/security/limits.d/hbase.nofiles.conf
+%{hbase_home}
+%{hbase_home}/hbase-*.jar
+#%{webapps_hbase}
+/usr/bin/hbase
+%config(noreplace) %{etc_hbase_conf_dist}
+
+# files from doc package
+%defattr(-,root,root)
+%doc %{doc_hbase}/
+
+%define service_macro() \
+%files %1 \
+%attr(0755,root,root)/%{initd_dir}/%{name}-%1 \
+%post %1 \
+chkconfig --add %{name}-%1
+
+%service_macro master
+%service_macro thrift
+%service_macro thrift2
+%service_macro regionserver
+%service_macro rest
diff --git a/hbase-assembly/rpm-build/sources/hbase.1 b/hbase-assembly/rpm-build/sources/hbase.1
new file mode 100644
index 00000000000..349218fe1d8
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/hbase.1
@@ -0,0 +1,88 @@
+.\" 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.
+.\"
+.\" Process this file with
+.\" groff -man -Tascii hbase.1
+.\"
+.TH hbase 1 "October 2010 " Linux "User Manuals"
+
+.SH NAME
+HBase \- HBase is the Hadoop database.
+
+.SH SYNOPSIS
+
+.B hbase
+\fICOMMAND\fR
+
+.SH DESCRIPTION
+
+HBase is the Hadoop database. Use it when you need random, realtime
+read/write access to your Big Data. This project's goal is the hosting
+of very large tables -- billions of rows X millions of columns -- atop
+clusters of commodity hardware.
+
+HBase is an open-source, distributed, versioned, column-oriented store
+modeled after Google's Bigtable: A Distributed Storage System for
+Structured Data by Chang et al. Just as Bigtable leverages the
+distributed data storage provided by the Google File System, HBase
+provides Bigtable-like capabilities on top of Hadoop.
+
+For more information about HBase, see http://hbase.apache.org.
+
+\fICOMMAND\fR may be one of the following:
+  shell            run the HBase shell
+  shell-tests      run the HBase shell tests
+  zkcli            run the ZooKeeper shell
+  master           run an HBase HMaster node
+  regionserver     run an HBase HRegionServer node
+  zookeeper        run a Zookeeper server
+  rest             run an HBase REST server
+  thrift           run an HBase Thrift server
+  avro             run an HBase Avro server
+  migrate          upgrade an hbase.rootdir
+  hbck             run the hbase 'fsck' tool
+ or
+  CLASSNAME        run the class named CLASSNAME
+
+Most commands print help when invoked w/o parameters or with --help.
+
+.SH ENVIRONMENT
+
+.IP JAVA_HOME
+The java implementation to use.  Overrides JAVA_HOME.
+
+.IP HBASE_CLASSPATH
+Extra Java CLASSPATH entries.
+
+.IP HBASE_HEAPSIZE
+The maximum amount of heap to use, in MB. Default is 1000.
+
+.IP HBASE_OPTS
+Extra Java runtime options.
+
+.IP HBASE_CONF_DIR
+Alternate conf dir. Default is ${HBASE_HOME}/conf.
+
+.IP HBASE_ROOT_LOGGER
+The root appender. Default is INFO,console
+
+.IP HIVE_OPT
+Extra Java runtime options.
+
+.IP HADOOP_HOME
+Optionally, the Hadoop home to run with.
+
+.SH COPYRIGHT
+Copyright (C) 2010 The Apache Software Foundation. All rights reserved.
diff --git a/hbase-assembly/rpm-build/sources/hbase.default b/hbase-assembly/rpm-build/sources/hbase.default
new file mode 100644
index 00000000000..a0058d2e405
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/hbase.default
@@ -0,0 +1,41 @@
+# 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.
+
+export HBASE_HOME="/usr/lib/hbase"
+export HBASE_CONF_DIR="/etc/hbase/conf"
+
+export HBASE_PID_DIR="/var/run/hbase"
+export HBASE_LOG_DIR="/var/log/hbase"
+export HBASE_IDENT_STRING=hbase
+
+# Up to 100 region servers can be run on a single host by specifying offsets
+# here or as CLI args when using init scripts. Each offset identifies an
+# instance and is used to determine the network ports it uses. Each instance
+# will have have its own log and pid files.
+#
+# REGIONSERVER_OFFSETS="1 2 3"
+
+#
+# Set the starting port to be assigned for HBASE RS JMX monitoring when 
+# running multiple region servers on a node. Each RS will be assigned a JMX port
+# which will be equal to starting JMX port + offset
+#
+# export JMXPORT=10103
+
+#
+# Set a directory which will be used for Java temp directory. For multi RS the
+# directory will be appended with offset to make it unique for each JVM process
+#
+# export JAVA_TMP_DIR="/tmp/java_tmp_dir"
diff --git a/hbase-assembly/rpm-build/sources/hbase.nofiles.conf b/hbase-assembly/rpm-build/sources/hbase.nofiles.conf
new file mode 100644
index 00000000000..0520c2deb8d
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/hbase.nofiles.conf
@@ -0,0 +1,16 @@
+# 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.
+
+hbase - nofile 32768
diff --git a/hbase-assembly/rpm-build/sources/hbase.svc b/hbase-assembly/rpm-build/sources/hbase.svc
new file mode 100644
index 00000000000..e6eec456897
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/hbase.svc
@@ -0,0 +1,92 @@
+# 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.
+
+DAEMON="hbase-@HBASE_DAEMON@"
+DESC="HBase @HBASE_DAEMON@ daemon"
+EXEC_PATH="/usr/lib/hbase/bin/hbase-daemon.sh"
+SVC_USER="hbase"
+WORKING_DIR="/var/lib/hbase"
+DAEMON_FLAGS=""
+CONF_DIR="/etc/hbase/conf"
+PIDFILE="/var/run/hbase/hbase-${DAEMON}.pid"
+
+generate_functions() {
+cat <<'__EOT__'
+
+hbase_env() {
+    export HBASE_HOME=/usr/lib/hbase
+    BIGTOP_DEFAULTS_DIR=${BIGTOP_DEFAULTS_DIR-/etc/default}
+    [ -n "${BIGTOP_DEFAULTS_DIR}" -a -r ${BIGTOP_DEFAULTS_DIR}/hbase ] && . ${BIGTOP_DEFAULTS_DIR}/hbase
+}
+
+__EOT__
+}
+
+generate_start() {
+
+cat <<'__EOT__'
+start() {
+    hbase_env
+
+    [ -x $EXEC_PATH ] || exit $ERROR_PROGRAM_NOT_INSTALLED
+
+    checkstatusofproc
+    status=$?
+    if [ "$status" -eq "$STATUS_RUNNING" ]; then
+        log_success_msg "${DESC} is running"
+        exit 0
+    fi
+
+    runuser -s /bin/bash hbase -c "${EXEC_PATH} start @HBASE_DAEMON@"
+
+    checkstatusofproc
+    RETVAL=$?
+
+    if [ $RETVAL -eq $STATUS_RUNNING ]; then
+      touch $LOCKFILE
+      log_success_msg "Started ${DESC} (${DAEMON}): "
+    else
+      log_failure_msg "Failed to start ${DESC}. Return value: $RETVAL"
+    fi
+
+    return $RETVAL
+}
+__EOT__
+
+}
+
+generate_stop() {
+
+cat <<'__EOT__'
+stop() {
+    hbase_env
+
+    runuser -s /bin/bash hbase -c "${EXEC_PATH} stop @HBASE_DAEMON@"
+    sleep 3
+    RETVAL=$?
+
+    if [ $RETVAL -eq $RETVAL_SUCCESS ]; then
+      log_success_msg "Stopped ${DESC}: "
+      rm -f $LOCKFILE $PIDFILE
+    else
+      log_failure_msg "Failure to stop ${DESC}. Return value: $RETVAL"
+    fi
+
+    return $RETVAL
+}
+__EOT__
+
+}
+
diff --git a/hbase-assembly/rpm-build/sources/init.d.tmpl b/hbase-assembly/rpm-build/sources/init.d.tmpl
new file mode 100644
index 00000000000..3730a2a6e21
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/init.d.tmpl
@@ -0,0 +1,311 @@
+#!/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 is a poor man's templating engine for generating init.d scripts to
+# support all the Apache services that Bigtop distro has. An actual init.d
+# script gets generate via running this script under bash and giving it
+# a mandatory argument of a file containing the configuration for the service.
+# The argument file should be a valid piece of bash code since it gets directly
+# source into this template. E.g.
+#    $ bash ./init.d.tmpl hadoop-hdfs-namenode.svc rpm hadoop-hdfs-namenode
+#
+# You must declare the following in your .svc configuration file:
+#     DAEMON="name of the resulting init.d script"
+#     DESC="Free form human readable description of the service"
+#     EXEC_PATH="path to the upstream daemon management script"
+#     SVC_USER="user to run this service as"
+#     DAEMON_FLAGS="flags to be passed to the $EXEC_PATH"
+#     WORKING_DIR="working directory to cd into before starting the daemon"
+#     CONF_DIR="path to the configuration directory"
+#     PIDFILE="file holding a PID of the running daemon"
+#     LOCKFILE="file signifying the service lock"
+#
+#     CHKCONFIG="chkconfig(8) registration signature"
+#     INIT_DEFAULT_START="run levels to use"
+#     INIT_DEFAULT_STOP="run levels not to use ;-)"
+#
+# You can, also, override parts of the generated init.d script by providing
+# function definitions for: generate_start, generate_stop, generate_functions, and generate_extra_commands.
+# See the default implemenations below and feel free to customize. Also look
+# for exising .svc files in common to see how different services are tweaking
+# the defaults.
+#
+# Of course, if this whole templating thing grows too big we might need to
+# consider a real templating engine (I have played with m4, but it seems
+# qutie brittle when used for manipulating pieces of the shell code -- think
+# $0 the like).
+
+if [ $# -lt 3 ] ; then
+  echo "Usage: ${BASH_SOURCE-0} service.definition.svc rpm|deb init.d.script"
+  exit 1
+fi
+
+# Override anything necessary for supported systems
+case "$2" in
+  "deb" )
+    # The defaults will work well on Debian-based systems
+    ;;
+  "rpm" )
+    # On RedHat, SuSE and Mageia run-level 2 is networkless, hence excluding it
+    CHKCONFIG="345 85 15"
+    INIT_DEFAULT_START="3 4 5"
+    INIT_DEFAULT_STOP="0 1 2 6"
+    ;;
+  "*" )
+    ;;
+esac
+
+# Create the init script, make it executable, and send stdout to it
+mkdir -p `dirname $3`
+touch $3
+chmod 0755 $3
+exec > $3
+
+generate_start() {
+
+cat <<'__EOT__'
+
+start() {
+  [ -x $EXEC_PATH ] || exit $ERROR_PROGRAM_NOT_INSTALLED
+  [ -d $CONF_DIR ] || exit $ERROR_PROGRAM_NOT_CONFIGURED
+
+  runuser -s /bin/bash $SVC_USER -c "cd $WORKING_DIR && $EXEC_PATH --config '$CONF_DIR' start $DAEMON_FLAGS"
+
+  # Some processes are slow to start
+  sleep $SLEEP_TIME
+  checkstatusofproc
+  RETVAL=$?
+
+  if [ $RETVAL -eq $STATUS_RUNNING ]; then
+    touch $LOCKFILE
+    log_success_msg "Started ${DESC}: "
+  else
+	log_failure_msg "Failed to start ${DESC}. Return value: $RETVAL"
+  fi
+  return $RETVAL
+}
+
+__EOT__
+
+}
+
+generate_stop() {
+
+cat <<'__EOT__'
+
+stop() {
+  start_daemon $EXEC_PATH --config "$CONF_DIR" stop $DAEMON_FLAGS
+  RETVAL=$?
+
+  if [ $RETVAL -eq $RETVAL_SUCCESS ]; then
+	 log_success_msg "Stopped ${DESC}: "
+	 rm -f $LOCKFILE $PIDFILE
+ else
+	 log_failure_msg "Failed to stop ${DESC}. Return value: $RETVAL."
+ fi
+}
+
+__EOT__
+
+}
+
+generate_functions() {
+    :
+}
+
+generate_extra_commands() {
+
+cat <<'__EOT__'
+    *)
+      echo $"Usage: $0 {start|stop|status|restart|try-restart|condrestart|force-reload}"
+      exit 1
+__EOT__
+
+}
+
+###################################################################
+# Some reasonable defaults for the run-level settings, these are
+# tweaked on a per-OS basis from the SPEC/rules files that call us
+# and can be further tweaked inside of individual .svc templates
+CHKCONFIG=${CHKCONFIG:-"2345 85 15"}
+INIT_DEFAULT_START=${INIT_DEFAULT_START:-"2 3 4 5"}
+INIT_DEFAULT_STOP=${INIT_DEFAULT_STOP:-"0 1 6"}
+
+###################################################################
+# NOTE how we are sourcing the argument here so that a user-defined
+# settings have a chance to override the default values for
+# generate_start, generate_stop, generate_functions and generate_extra_commands. If you
+# ever want to make this template even more flexible -- define the
+# default values above this line
+. $1
+
+cat <<__EOT__
+#!/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.
+#
+# Starts a $DESC
+#
+# chkconfig: $CHKCONFIG
+# description: $DESC
+# pidfile: $PIDFILE
+### BEGIN INIT INFO
+# Provides:          $DAEMON
+# Short-Description: $DESC
+# Default-Start:     $INIT_DEFAULT_START
+# Default-Stop:      $INIT_DEFAULT_STOP
+# Required-Start:    \$syslog \$remote_fs
+# Required-Stop:     \$syslog \$remote_fs
+# Should-Start:
+# Should-Stop:
+### END INIT INFO
+
+. /lib/lsb/init-functions
+DEFAULTS_DIR=\${DEFAULTS_DIR-/etc/default}
+[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/hadoop ] && . \${DEFAULTS_DIR}/hadoop
+[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/$DAEMON ] && . \${DEFAULTS_DIR}/$DAEMON
+
+RETVAL_SUCCESS=0
+
+STATUS_RUNNING=0
+STATUS_DEAD=1
+STATUS_DEAD_AND_LOCK=2
+STATUS_NOT_RUNNING=3
+STATUS_OTHER_ERROR=102
+
+
+ERROR_PROGRAM_NOT_INSTALLED=5
+ERROR_PROGRAM_NOT_CONFIGURED=6
+
+
+RETVAL=0
+SLEEP_TIME=5
+PROC_NAME="${PROC_NAME:-java}"
+
+DAEMON="$DAEMON"
+DESC="$DESC"
+EXEC_PATH="$EXEC_PATH"
+SVC_USER="$SVC_USER"
+DAEMON_FLAGS="$DAEMON_FLAGS"
+CONF_DIR="$CONF_DIR"
+CONF_FILE="$CONF_FILE"
+LOGFILE="$LOGFILE"
+PIDFILE="$PIDFILE"
+LOCKDIR="/var/lock/subsys"
+LOCKFILE="\$LOCKDIR/$DAEMON"
+WORKING_DIR="${WORKING_DIR:-~/}"
+
+install -d -m 0755 -o $SVC_USER -g $SVC_USER $(dirname $PIDFILE) 1>/dev/null 2>&1 || :
+[ -d "\$LOCKDIR" ] || install -d -m 0755 \$LOCKDIR 1>/dev/null 2>&1 || :
+__EOT__
+
+generate_functions
+generate_start
+generate_stop
+
+cat <<'__EOT__'
+restart() {
+  stop
+  start
+}
+
+checkstatusofproc(){
+  pidofproc -p $PIDFILE $PROC_NAME > /dev/null
+}
+
+checkstatus(){
+  checkstatusofproc
+  status=$?
+  case "$status" in
+    $STATUS_RUNNING)
+      log_success_msg "${DESC} is running"
+      ;;
+    $STATUS_DEAD)
+      log_failure_msg "${DESC} is dead and pid file exists"
+      ;;
+    $STATUS_DEAD_AND_LOCK)
+      log_failure_msg "${DESC} is dead and lock file exists"
+      ;;
+    $STATUS_NOT_RUNNING)
+      log_failure_msg "${DESC} is not running"
+      ;;
+    *)
+      log_failure_msg "${DESC} status is unknown"
+      ;;
+  esac
+  return $status
+}
+
+condrestart(){
+  [ -e $LOCKFILE ] && restart || :
+}
+
+check_for_root() {
+  if [ $(id -ur) -ne 0 ]; then
+    echo 'Error: root user required'
+    echo
+    exit 1
+  fi
+}
+
+service() {
+  case "$1" in
+    start)
+      check_for_root
+      start
+      ;;
+    stop)
+      check_for_root
+      stop
+      ;;
+    status)
+      checkstatus
+      RETVAL=$?
+      ;;
+    restart|force-reload)
+      check_for_root
+      restart
+      ;;
+    condrestart|try-restart)
+      check_for_root
+      condrestart
+      ;;
+__EOT__
+
+generate_extra_commands
+
+cat <<'__EOT__'
+  esac
+}
+
+service "$@"
+
+exit $RETVAL
+__EOT__
diff --git a/hbase-assembly/rpm-build/sources/install_hbase.sh b/hbase-assembly/rpm-build/sources/install_hbase.sh
new file mode 100755
index 00000000000..9c9dd3b1fcf
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/install_hbase.sh
@@ -0,0 +1,181 @@
+#!/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 -ex
+
+usage() {
+  echo "
+usage: $0 <options>
+  Required not-so-options:
+     --mvn-target-dir=DIR        path to the output of the mvn assembly
+     --prefix=PREFIX             path to install into
+
+  Optional options:
+     --doc-dir=DIR               path to install docs into [/usr/share/doc/hbase]
+     --lib-dir=DIR               path to install hbase home [/usr/lib/hbase]
+     --installed-lib-dir=DIR     path where lib-dir will end up on target system
+     --bin-dir=DIR               path to install bins [/usr/bin]
+     --examples-dir=DIR          path to install examples [doc-dir/examples]
+     ... [ see source for more similar options ]
+  "
+  exit 1
+}
+
+OPTS=$(getopt \
+  -n $0 \
+  -o '' \
+  -l 'prefix:' \
+  -l 'doc-dir:' \
+  -l 'lib-dir:' \
+  -l 'installed-lib-dir:' \
+  -l 'bin-dir:' \
+  -l 'examples-dir:' \
+  -l 'conf-dir:' \
+  -l 'mvn-target-dir:' -- "$@")
+
+if [ $? != 0 ] ; then
+    usage
+fi
+
+eval set -- "$OPTS"
+while true ; do
+    case "$1" in
+        --prefix)
+        PREFIX=$2 ; shift 2
+        ;;
+        --mvn-target-dir)
+        MVN_TARGET_DIR=$2 ; shift 2
+        ;;
+        --doc-dir)
+        DOC_DIR=$2 ; shift 2
+        ;;
+        --lib-dir)
+        LIB_DIR=$2 ; shift 2
+        ;;
+        --bin-dir)
+        BIN_DIR=$2 ; shift 2
+        ;;
+        --examples-dir)
+        EXAMPLES_DIR=$2 ; shift 2
+        ;;
+        --conf-dir)
+        CONF_DIR=$2 ; shift 2
+        ;;
+        --)
+        shift ; break
+        ;;
+        *)
+        echo "Unknown option: $1"
+        usage
+        exit 1
+        ;;
+    esac
+done
+
+for var in PREFIX MVN_TARGET_DIR ; do
+  if [ -z "$(eval "echo \$$var")" ]; then
+    echo Missing param: $var
+    usage
+  fi
+done
+
+MAN_DIR=${MAN_DIR:-/usr/share/man/man1}
+DOC_DIR=${DOC_DIR:-/usr/share/doc/hbase}
+LIB_DIR=${LIB_DIR:-/usr/lib/hbase}
+
+BIN_DIR=${BIN_DIR:-/usr/lib/hbase/bin}
+ETC_DIR=${ETC_DIR:-/etc/hbase}
+CONF_DIR=${CONF_DIR:-${ETC_DIR}/conf.dist}
+THRIFT_DIR=${THRIFT_DIR:-${LIB_DIR}/include/thrift}
+
+EXTRACT_DIR=extracted
+rm -rf $EXTRACT_DIR
+mkdir $EXTRACT_DIR
+
+version_part=$SET_VERSION
+if [ -z "$version_part" ]; then
+  version_part=$HBASE_VERSION
+fi
+
+tar -C $EXTRACT_DIR --strip-components=1 -xzf $MVN_TARGET_DIR/hbase-$version_part-bin.tar.gz
+
+install -d -m 0755 $PREFIX/$LIB_DIR
+install -d -m 0755 $PREFIX/$LIB_DIR/lib
+install -d -m 0755 $PREFIX/$DOC_DIR
+install -d -m 0755 $PREFIX/$BIN_DIR
+install -d -m 0755 $PREFIX/$ETC_DIR
+install -d -m 0755 $PREFIX/$MAN_DIR
+install -d -m 0755 $PREFIX/$THRIFT_DIR
+
+cp -ra $EXTRACT_DIR/lib/* ${PREFIX}/${LIB_DIR}/lib/
+cp $EXTRACT_DIR/lib/hbase*.jar $PREFIX/$LIB_DIR
+
+# We do not currently run "mvn site", so do not have a docs dir.
+# Only copy contents if dir exists
+if [ -n "$(ls -A $EXTRACT_DIR/docs 2>/dev/null)" ]; then
+  cp -a $EXTRACT_DIR/docs/* $PREFIX/$DOC_DIR
+  cp $EXTRACT_DIR/*.txt $PREFIX/$DOC_DIR/
+else
+  echo "Doc generation is currently disabled in our RPM build. If this is an issue, it should be possible to enable them with some work. See https://git.hubteam.com/HubSpot/apache-hbase/blob/hubspot-2/rpm/sources/do-component-build#L17-L24 for details." > $PREFIX/$DOC_DIR/README.txt
+fi
+
+#cp -a $EXTRACT_DIR/hbase-webapps $PREFIX/$LIB_DIR
+
+cp -a $EXTRACT_DIR/conf $PREFIX/$CONF_DIR
+cp -a $EXTRACT_DIR/bin/* $PREFIX/$BIN_DIR
+# Purge scripts that don't work with packages
+for file in rolling-restart.sh graceful_stop.sh local-regionservers.sh \
+            master-backup.sh regionservers.sh zookeepers.sh hbase-daemons.sh \
+            start-hbase.sh stop-hbase.sh local-master-backup.sh ; do
+  rm -f $PREFIX/$BIN_DIR/$file
+done
+
+cp $EXTRACT_DIR/../hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift $PREFIX/$THRIFT_DIR/hbase1.thrift
+cp $EXTRACT_DIR/../hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift $PREFIX/$THRIFT_DIR/hbase2.thrift
+
+ln -s $ETC_DIR/conf $PREFIX/$LIB_DIR/conf
+
+# Make a symlink of hbase.jar to hbase-version.jar
+pushd `pwd`
+cd $PREFIX/$LIB_DIR
+for i in `ls hbase*jar | grep -v tests.jar`
+do
+    ln -s $i `echo $i | sed -n 's/\(.*\)\(-[0-9].*\)\(.jar\)/\1\3/p'`
+done
+popd
+
+wrapper=$PREFIX/usr/bin/hbase
+mkdir -p `dirname $wrapper`
+cat > $wrapper <<EOF
+#!/bin/bash
+
+DEFAULTS_DIR=\${DEFAULTS_DIR-/etc/default}
+[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/hbase ] && . \${DEFAULTS_DIR}/hbase
+[ -n "\${DEFAULTS_DIR}" -a -r \${DEFAULTS_DIR}/hadoop ] && . \${DEFAULTS_DIR}/hadoop
+
+export HADOOP_CONF_DIR=\${HADOOP_CONF_DIR:-/etc/hadoop/conf}
+export HBASE_CLASSPATH=\$HADOOP_CONF_DIR:\$HBASE_CLASSPATH
+
+exec /usr/lib/hbase/bin/hbase "\$@"
+EOF
+chmod 755 $wrapper
+
+install -d -m 0755 $PREFIX/usr/bin
+
+rm -f $PREFIX/$CONF_DIR/*.cmd
+rm -f $PREFIX/$BIN_DIR/*.cmd
+
diff --git a/hbase-assembly/rpm-build/sources/regionserver-init.d.tpl b/hbase-assembly/rpm-build/sources/regionserver-init.d.tpl
new file mode 100644
index 00000000000..dedfa526c51
--- /dev/null
+++ b/hbase-assembly/rpm-build/sources/regionserver-init.d.tpl
@@ -0,0 +1,446 @@
+#! /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 file is used to run multiple instances of certain HBase daemons using init scripts.
+# It replaces the local-regionserver.sh and local-master.sh scripts for Bigtop packages.
+# By default, this script runs a single daemon normally. If offsets are provided, additional
+# daemons are run, identified by the offset in log and pid files, and listening on the default
+# port + the offset. Offsets can be provided as arguments when invoking init scripts directly:
+#
+#     /etc/init.d/hbase-@HBASE_DAEMON@ start 1 2 3 4
+#
+# or you can list the offsets to run in /etc/init.d/@HBASE_DAEMON@_offsets:
+#
+#    echo "@HBASE_DAEMON@_OFFSETS='1 2 3 4' >> /etc/default/hbase"
+#    sudo service hbase-$HBASE_DAEMON@ start
+#
+# Offsets specified on the command-line always override the offsets file. If no offsets are
+# specified on the command-line when stopping or restarting daemons, all running instances of the
+# daemon are stopped (regardless of the contents of the offsets file).
+
+# chkconfig: @CHKCONFIG@
+# description: Summary: HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware.
+# processname: HBase
+#
+### BEGIN INIT INFO
+# Provides:          hbase-@HBASE_DAEMON@
+# Required-Start:    $network $local_fs $remote_fs
+# Required-Stop:     $remote_fs
+# Should-Start:      $named
+# Should-Stop:
+# Default-Start:     @INIT_DEFAULT_START@
+# Default-Stop:      @INIT_DEFAULT_STOP@
+# Short-Description: Hadoop HBase @HBASE_DAEMON@ daemon
+### END INIT INFO
+
+DEFAULTS_DIR=${DEFAULTS_DIR-/etc/default}
+[ -n "${DEFAULTS_DIR}" -a -r ${DEFAULTS_DIR}/hadoop ] && . ${DEFAULTS_DIR}/hadoop
+[ -n "${DEFAULTS_DIR}" -a -r ${DEFAULTS_DIR}/hbase ] && . ${DEFAULTS_DIR}/hbase
+
+# Our default HBASE_HOME, HBASE_PID_DIR and HBASE_CONF_DIR
+export HBASE_HOME=${HBASE_HOME:-/usr/lib/hbase}
+export HBASE_PID_DIR=${HBASE_PID_DIR:-/var/run/hbase}
+export HBASE_LOG_DIR=${HBASE_LOG_DIR:-/var/log/hbase}
+
+install -d -m 0755 -o hbase -g hbase ${HBASE_PID_DIR}
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON_SCRIPT=$HBASE_HOME/bin/hbase-daemon.sh
+NAME=hbase-@HBASE_DAEMON@
+DESC="Hadoop HBase @HBASE_DAEMON@ daemon"
+PID_FILE=$HBASE_PID_DIR/hbase-hbase-@HBASE_DAEMON@.pid
+CONF_DIR=/etc/hbase/conf
+
+DODTIME=3                   # Time to wait for the server to die, in seconds
+                            # If this value is set too low you might not
+                            # let some servers to die gracefully and
+                            # 'restart' will not work
+
+UPPERCASE_HBASE_DAEMON=$(echo @HBASE_DAEMON@ | tr '[:lower:]' '[:upper:]')
+
+ALL_DAEMONS_RUNNING=0
+NO_DAEMONS_RUNNING=1
+SOME_OFFSET_DAEMONS_FAILING=2
+INVALID_OFFSETS_PROVIDED=3
+
+# These limits are not easily configurable - they are enforced by HBase
+if [ "@HBASE_DAEMON@" == "master" ] ; then
+    FIRST_PORT=60000
+    FIRST_INFO_PORT=60010
+    OFFSET_LIMIT=10
+elif [ "@HBASE_DAEMON@" == "regionserver" ] ; then
+    FIRST_PORT=60200
+    FIRST_INFO_PORT=60300
+    OFFSET_LIMIT=100
+fi
+
+validate_offsets() {
+    for OFFSET in $1; do
+        if [[ ! $OFFSET =~ ^((0)|([1-9][0-9]{0,2}))$ ]]; then
+            echo "ERROR: All offsets must be positive integers (no leading zeros, max $OFFSET_LIMIT)"
+            exit $INVALID_OFFSETS_PROVIDED
+        fi
+        if [ ${OFFSET} -lt 0 ] ; then
+            echo "ERROR: Cannot start @HBASE_DAEMON@ with negative offset" >&2
+            exit $INVALID_OFFSETS_PROVIDED
+        fi
+        if [ ${OFFSET} -ge ${OFFSET_LIMIT} ] ; then
+            echo "ERROR: Cannot start @HBASE_DAEMON@ with offset higher than $OFFSET_LIMIT" >&2
+            exit $INVALID_OFFSETS_PROVIDED
+        fi
+    done
+}
+
+offset_pidfile() {
+    echo $HBASE_PID_DIR/hbase-hbase-$1-@HBASE_DAEMON@.pid
+}
+
+OFFSETS_FROM_CLI="${*:2}"
+validate_offsets "$OFFSETS_FROM_CLI"
+if [ -n "$(eval echo \${${UPPERCASE_HBASE_DAEMON}_OFFSETS})" ] ; then
+    OFFSETS_FROM_DEFAULT="$(eval echo \${${UPPERCASE_HBASE_DAEMON}_OFFSETS})"
+    validate_offsets "$OFFSETS_FROM_DEFAULT"
+fi
+OFFSET_PID_FILES="`ls $HBASE_PID_DIR/hbase-hbase-*-@HBASE_DAEMON@.pid 2>/dev/null`"
+if [ -n "$OFFSET_PID_FILES" ] ; then
+    OFFSETS_FROM_PIDS=`echo "$OFFSET_PID_FILES" | sed "s#$HBASE_PID_DIR/hbase-hbase-##" | sed "s#-.*##" | tr '\n' ' '`
+fi
+
+multi_hbase_daemon_check_pidfiles() {
+  if [ -z "$OFFSETS_FROM_PIDS" ] ; then
+    return $NO_DAEMONS_RUNNING
+  fi
+  if [ -n "$OFFSETS_FROM_CLI" ] ; then
+    OFFSETS="$OFFSETS_FROM_CLI"
+  else
+    OFFSETS="$OFFSETS_FROM_PIDS"
+  fi
+
+  RESULT=$ALL_DAEMONS_RUNNING
+  for OFFSET in $OFFSETS; do
+    echo -n "HBase @HBASE_DAEMON@ $OFFSET: "
+    if hbase_check_pidfile `offset_pidfile $OFFSET` ; then
+      echo "running"
+    else
+      echo "not running"
+      RESULT=$SOME_OFFSET_DAEMONS_FAILING
+    fi
+  done
+  return $RESULT
+}
+
+multi_hbase_daemon_stop_pidfiles() {
+  if [ -z "$OFFSETS_FROM_PIDS" ] ; then
+    return $NO_DAEMONS_RUNNING
+  fi
+  if [ -n "$OFFSETS_FROM_CLI" ] ; then
+    OFFSETS="$OFFSETS_FROM_CLI"
+  else
+    OFFSETS="$OFFSETS_FROM_PIDS"
+  fi
+
+  RESULT=$NO_DAEMONS_RUNNING
+  for OFFSET in $OFFSETS; do
+    echo -n "Forcefully stopping HBase @HBASE_DAEMON@ $OFFSET: "
+    PID_FILE=`offset_pidfile $OFFSET`
+    hbase_stop_pidfile $PID_FILE
+    if hbase_check_pidfile $PID_FILE ; then
+      echo "ERROR."
+    else
+      echo "OK."
+      rm -f $PID_FILE
+    fi
+  done
+  return $RESULT
+}
+
+# Starts and stops multiple instances of HBase daemons
+multi_hbase_daemon() {
+    COMMAND=$1
+    OFFSETS="$OFFSETS_FROM_CLI"
+    if [ "$COMMAND" == "start" ] ; then
+        ACTION="Starting"
+        RUNNING="OK"
+        STOPPED="ERROR"
+        if [ -z "$OFFSETS_FROM_CLI" ] ; then
+            OFFSETS="$OFFSETS_FROM_DEFAULT"
+        fi
+    elif [ "$COMMAND" == "stop" ] ; then
+        ACTION="Stopping"
+        RUNNING="ERROR"
+        STOPPED="OK"
+        if [ -z "$OFFSETS_FROM_CLI" ] ; then
+            OFFSETS="$OFFSETS_FROM_PIDS"
+        fi
+    else
+        echo "ERROR: Illegal command: $COMMAND"
+        exit 1
+    fi
+
+    for OFFSET in ${OFFSETS} ; do
+
+        export HBASE_${UPPERCASE_HBASE_DAEMON}_OPTS=" "
+
+        echo -n "$ACTION @HBASE_DAEMON@ daemon $OFFSET: "
+        export HBASE_IDENT_STRING="hbase-${OFFSET}"
+        LOG_FILE="$HBASE_LOG_DIR/hbase-$HBASE_IDENT_STRING-@HBASE_DAEMON@-$HOSTNAME.pid"
+        PID_FILE="$HBASE_PID_DIR/hbase-$HBASE_IDENT_STRING-@HBASE_DAEMON@.pid"
+        HBASE_MULTI_ARGS="-D hbase.regionserver.port=`expr ${FIRST_PORT} + $OFFSET` \
+                          -D hbase.regionserver.info.port=`expr ${FIRST_INFO_PORT} + ${OFFSET}`"
+
+        if [ "x$JAVA_TMP_DIR" == "x" ] ; then
+            JAVA_TMP_DIR="/tmp/java_tmp_dir"
+        fi
+        HBASE_TMP_DIR=" -Djava.io.tmpdir=${JAVA_TMP_DIR}/${OFFSET}"
+
+        if [ "x$JMXPORT" != "x" ] ; then
+            HBASE_JMX_PORT=" -Dcom.sun.management.jmxremote.port=`expr ${JMXPORT} + ${OFFSET}`"
+        fi
+        export HBASE_${UPPERCASE_HBASE_DAEMON}_OPTS="`eval '$'HBASE_${UPPERCASE_HBASE_DAEMON}_OPTS`$HBASE_TMP_DIR$HBASE_JMX_PORT"
+
+        hbase_check_pidfile $PID_FILE
+        STATUS=$?
+        if [[ "$STATUS" == "0" && "$COMMAND" == "start" ]] ; then
+            echo "Already running"
+            continue
+        elif [[ "$STATUS" != "0" && "$COMMAND" == "stop" ]] ; then
+            rm -f $PID_FILE
+            echo "Already stopped"
+            continue
+        fi
+        runuser -s /bin/bash hbase -c "${DAEMON_SCRIPT} ${COMMAND} regionserver ${HBASE_MULTI_ARGS} >> ${LOG_FILE}"
+        if [[ "$COMMAND" == "stop" ]] ; then
+            rm -f $PID_FILE
+        fi
+        if hbase_check_pidfile $PID_FILE ; then
+            echo "$RUNNING"
+        else
+            echo "$STOPPED"
+        fi
+    done
+    return 0
+}
+
+# Checks if the given pid represents a live process.
+# Returns 0 if the pid is a live process, 1 otherwise
+hbase_is_process_alive() {
+  local pid="$1"
+  ps -fp $pid | grep $pid | grep @HBASE_DAEMON@ > /dev/null 2>&1
+}
+
+# Check if the process associated to a pidfile is running.
+# Return 0 if the pidfile exists and the process is running, 1 otherwise
+hbase_check_pidfile() {
+  local pidfile="$1" # IN
+  local pid
+
+  pid=`cat "$pidfile" 2>/dev/null`
+  if [ "$pid" = '' ]; then
+    # The file probably does not exist or is empty.
+    return 1
+  fi
+
+  set -- $pid
+  pid="$1"
+
+  hbase_is_process_alive $pid
+}
+
+# Kill the process associated to a pidfile
+hbase_stop_pidfile() {
+   local pidfile="$1" # IN
+   local pid
+
+   pid=`cat "$pidfile" 2>/dev/null`
+   if [ "$pid" = '' ]; then
+      # The file probably does not exist or is empty. Success
+      return 0
+   fi
+
+   set -- $pid
+   pid="$1"
+
+   # First try the easy way
+   if hbase_process_kill "$pid" 15; then
+      rm $pidfile
+      return 0
+   fi
+
+   # Otherwise try the hard way
+   if hbase_process_kill "$pid" 9; then
+      rm $pidfile
+      return 0
+   fi
+
+   return 1
+}
+
+hbase_process_kill() {
+    local pid="$1"    # IN
+    local signal="$2" # IN
+    local second
+
+    kill -$signal $pid 2>/dev/null
+
+   # Wait a bit to see if the dirty job has really been done
+    for second in 0 1 2 3 4 5 6 7 8 9 10; do
+        if hbase_is_process_alive "$pid"; then
+         # Success
+            return 0
+        fi
+
+        sleep 1
+    done
+
+   # Timeout
+    return 1
+}
+
+start() {
+    if [ -n "${OFFSETS_FROM_CLI}${OFFSETS_FROM_DEFAULT}" ] ; then
+        if hbase_check_pidfile $PID_FILE ; then
+            echo "$NAME has already been started - cannot start other @HBASE_DAEMON@ daemons."
+            return 1
+        fi
+        multi_hbase_daemon "start"
+        return $?
+    fi
+    multi_hbase_daemon_check_pidfiles > /dev/null
+    if [ "$?" != "$NO_DAEMONS_RUNNING" ] ; then
+      echo "Cannot start $NAME - other @HBASE_DAEMON@ daemons have already been started."
+      return 1
+    fi
+    echo -n "Starting $DESC: "
+    runuser -s /bin/bash hbase -c "$DAEMON_SCRIPT start @HBASE_DAEMON@"
+    if hbase_check_pidfile $PID_FILE ; then
+        echo "$NAME."
+        return $ALL_DAEMONS_RUNNING
+    else
+        echo "ERROR."
+        return $NO_DAEMONS_RUNNING
+    fi
+}
+stop() {
+    if [ -n "${OFFSETS_FROM_CLI}${OFFSETS_FROM_PIDS}" ] ; then
+        multi_hbase_daemon "stop"
+        return "$?"
+    fi
+
+    echo -n "Stopping $DESC: "
+    runuser -s /bin/bash hbase -c "$DAEMON_SCRIPT stop @HBASE_DAEMON@"
+    if hbase_check_pidfile $PID_FILE ; then
+        echo "ERROR."
+        return 1
+    else
+        echo "$NAME."
+        return 0
+    fi
+}
+
+force_stop() {
+    MULTI_HBASE_DAEMON_STATUS_TEXT=`multi_hbase_daemon_check_pidfiles`
+    MULTI_HBASE_DAEMON_STATUS=$?
+    if [ "$MULTI_HBASE_DAEMON_STATUS" == "$NO_DAEMONS_RUNNING" ] ; then
+        echo -n "Forcefully stopping $DESC: "
+        hbase_stop_pidfile $PID_FILE
+        if hbase_check_pidfile $PID_FILE ; then
+            echo " ERROR."
+        else
+            echo "$NAME."
+        fi
+    else
+        multi_hbase_daemon_stop_pidfiles
+    fi
+}
+
+force_reload() {
+  # check wether $DAEMON is running. If so, restart
+  hbase_check_pidfile $PID_FILE && $0 restart $OFFSETS_FROM_CLI
+}
+
+restart() {
+    echo -n "Restarting $DESC: "
+    $0 stop
+    [ -n "$DODTIME" ] && sleep $DODTIME
+    $0 start $OFFSETS_FROM_CLI
+}
+
+status() {
+    MULTI_HBASE_DAEMON_STATUS_TEXT=`multi_hbase_daemon_check_pidfiles`
+    MULTI_HBASE_DAEMON_STATUS=$?
+    if [ "$MULTI_HBASE_DAEMON_STATUS" == "$NO_DAEMONS_RUNNING" ] ; then
+        echo -n "$NAME is "
+        if hbase_check_pidfile $PID_FILE ;  then
+            echo "running"
+        else
+            echo "not running."
+            return $NO_DAEMONS_RUNNING
+        fi
+    else
+        IFS=''
+        echo $MULTI_HBASE_DAEMON_STATUS_TEXT
+        return $MULTI_HBASE_DAEMON_STATUS
+    fi
+}
+
+condrestart(){
+    status $@ >/dev/null 2>/dev/null
+    DAEMON_STATUS=$?
+    if [ "$DAEMON_STATUS" == "$ALL_DAEMONS_RUNNING" -o "$DAEMON_STATUS" == "$SOME_OFFSET_DAEMONS_FAILING" ] ; then
+        restart $@
+    fi
+}
+
+RETVAL=0
+
+case "$1" in
+  start)
+        start
+        RETVAL=$?
+  ;;
+  stop)
+        stop
+        RETVAL=$?
+  ;;
+  force-stop)
+        force_stop
+        RETVAL=$?
+  ;;
+  force-reload)
+        force_reload
+        RETVAL=$?
+  ;;
+  restart)
+        restart
+        RETVAL=$?
+    ;;
+  condrestart)
+        condrestart
+        RETVAL=$?
+  ;;
+  status)
+        status
+        RETVAL=$?
+    ;;
+  *)
+  N=/etc/init.d/$NAME
+  echo "Usage: $N {start|stop|restart|force-reload|status|force-stop|condrestart}" >&2
+  RETVAL=1
+  ;;
+esac
+
+exit ${RETVAL}
diff --git a/hbase-assembly/src/main/assembly/hadoop-three-compat.xml b/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
index e5422f39e5f..959c0046ca5 100644
--- a/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
+++ b/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
@@ -28,118 +28,7 @@
   <componentDescriptors>
     <componentDescriptor>src/main/assembly/components.xml</componentDescriptor>
   </componentDescriptors>
-  <moduleSets>
-    <moduleSet>
-      <useAllReactorProjects>true</useAllReactorProjects>
-      <includes>
-        <!-- Keep this list sorted by name -->
-        <include>org.apache.hbase:hbase-annotations</include>
-        <include>org.apache.hbase:hbase-asyncfs</include>
-        <include>org.apache.hbase:hbase-client</include>
-        <include>org.apache.hbase:hbase-common</include>
-        <include>org.apache.hbase:hbase-endpoint</include>
-        <include>org.apache.hbase:hbase-examples</include>
-        <include>org.apache.hbase:hbase-external-blockcache</include>
-        <include>org.apache.hbase:hbase-hadoop-compat</include>
-        <include>org.apache.hbase:hbase-hadoop2-compat</include>
-        <include>org.apache.hbase:hbase-http</include>
-        <include>org.apache.hbase:hbase-it</include>
-        <include>org.apache.hbase:hbase-logging</include>
-        <include>org.apache.hbase:hbase-mapreduce</include>
-        <include>org.apache.hbase:hbase-metrics</include>
-        <include>org.apache.hbase:hbase-metrics-api</include>
-        <include>org.apache.hbase:hbase-procedure</include>
-        <include>org.apache.hbase:hbase-protocol</include>
-        <include>org.apache.hbase:hbase-protocol-shaded</include>
-        <include>org.apache.hbase:hbase-replication</include>
-        <include>org.apache.hbase:hbase-rest</include>
-        <include>org.apache.hbase:hbase-rsgroup</include>
-        <include>org.apache.hbase:hbase-server</include>
-        <include>org.apache.hbase:hbase-shell</include>
-        <include>org.apache.hbase:hbase-testing-util</include>
-        <include>org.apache.hbase:hbase-thrift</include>
-        <include>org.apache.hbase:hbase-zookeeper</include>
-      </includes>
-      <!-- Binaries for the dependencies also go in the hbase-jars directory -->
-      <binaries>
-        <outputDirectory>lib</outputDirectory>
-        <unpack>false</unpack>
-        <dependencySets>
-          <dependencySet>
-            <excludes>
-            <!-- Exclude J2EE libraries that get pulled in when building on JDK11 -->
-              <exclude>com.sun.activation:javax.activation</exclude>
-              <!-- The following artifacts are transitive dependencies of com.sun.xml.ws:jaxws-ri:pom
-                   They are needed to be included in lib/jdk11 to be added to classpath during
-                   Java 11 runtime hence excluding from main lib.
-              -->
-              <exclude>com.sun.xml.ws:*</exclude>
-              <exclude>jakarta.annotation:jakarta.annotation-api</exclude>
-              <exclude>org.glassfish.jaxb:*</exclude>
-              <exclude>com.sun.istack:istack-commons-runtime</exclude>
-              <exclude>org.glassfish.gmbal:gmbal</exclude>
-              <exclude>org.glassfish.external:management-api</exclude>
-              <exclude>org.glassfish.pfl:*</exclude>
-              <exclude>org.jvnet.staxex:stax-ex</exclude>
-              <exclude>com.sun.xml.stream.buffer:streambuffer</exclude>
-              <exclude>org.jvnet.mimepull:mimepull</exclude>
-              <exclude>com.sun.xml.fastinfoset:FastInfoset</exclude>
-              <exclude>org.glassfish.ha:ha-api</exclude>
-              <exclude>com.sun.xml.messaging.saaj:saaj-impl</exclude>
-              <exclude>jakarta.activation:jakarta.activation-api</exclude>
-              <exclude>com.sun.xml.bind:jaxb-xjc</exclude>
-              <exclude>com.sun.xml.bind:jaxb-jxc</exclude>
-              <exclude>jakarta.mail:jakarta.mail-api</exclude>
-              <exclude>jakarta.persistence:jakarta.persistence-api</exclude>
-              <exclude>org.eclipse.persistence:*</exclude>
-              <exclude>jakarta.xml.ws:jakarta.xml.ws-api</exclude>
-              <exclude>jakarta.xml.bind:jakarta.xml.bind-api</exclude>
-              <exclude>jakarta.xml.soap:jakarta.xml.soap-api</exclude>
-              <exclude>jakarta.jws:jakarta.jws-api</exclude>
-            <!-- Exclude libraries that we put in their own dirs under lib/ -->
-              <exclude>org.jruby:jruby-complete</exclude>
-              <exclude>com.sun.jersey:*</exclude>
-              <exclude>com.sun.jersey.contribs:*</exclude>
-              <exclude>jline:jline</exclude>
-              <exclude>org.apache.hbase:hbase-shaded-client</exclude>
-              <exclude>org.apache.hbase:hbase-shaded-client-byo-hadoop</exclude>
-              <exclude>org.apache.hbase:hbase-shaded-mapreduce</exclude>
-              <exclude>com.github.stephenc.findbugs:findbugs-annotations</exclude>
-              <exclude>commons-logging:commons-logging</exclude>
-              <exclude>log4j:log4j</exclude>
-              <exclude>org.apache.htrace:htrace-core4</exclude>
-              <exclude>org.apache.htrace:htrace-core</exclude>
-              <exclude>org.apache.yetus:audience-annotations</exclude>
-              <exclude>org.slf4j:slf4j-api</exclude>
-              <exclude>org.slf4j:slf4j-log4j12</exclude>
-            </excludes>
-          </dependencySet>
-        </dependencySets>
-      </binaries>
-    </moduleSet>
-    <!-- Include shaded clients in their own directory -->
-    <moduleSet>
-      <useAllReactorProjects>true</useAllReactorProjects>
-      <includes>
-        <include>org.apache.hbase:hbase-shaded-client</include>
-        <include>org.apache.hbase:hbase-shaded-mapreduce</include>
-        <include>org.apache.hbase:hbase-shaded-client-byo-hadoop</include>
-      </includes>
-      <binaries>
-        <outputDirectory>lib/shaded-clients</outputDirectory>
-        <unpack>false</unpack>
-        <dependencySets>
-          <dependencySet>
-            <includes>
-              <include>org.apache.hbase:hbase-shaded-client</include>
-              <include>org.apache.hbase:hbase-shaded-mapreduce</include>
-              <include>org.apache.hbase:hbase-shaded-client-byo-hadoop</include>
-            </includes>
-          </dependencySet>
-        </dependencySets>
-      </binaries>
-    </moduleSet>
-  </moduleSets>
+
   <!-- Include the generated LICENSE and NOTICE files -->
   <files>
     <file>
@@ -163,6 +52,71 @@
   </files>
 
   <dependencySets>
+   <!--
+     The following 2 dependencySet's are converted from the moduleSets in the original upstream implementation .
+     ModuleSets do not work in non-reactor builds, like we use in Blazar. This produces the same result as long as
+     we add all of the desired modules (previously indicated as <includes>) as dependencies in the hbase-assembly pom.xml.
+     -->
+    <dependencySet>
+      <outputDirectory>lib</outputDirectory>
+      <excludes>
+        <!-- exclude these because we will explicitly put them in a subdir next. these 3 excludes are custom to our impl -->
+        <exclude>org.apache.hbase:hbase-shaded-client</exclude>
+        <exclude>org.apache.hbase:hbase-shaded-mapreduce</exclude>
+        <exclude>org.apache.hbase:hbase-shaded-client-byo-hadoop</exclude>
+
+        <!-- the remaining excludes should stay in sync with hadoop-three-compat.xml -->
+        <exclude>com.sun.activation:javax.activation</exclude>
+        <exclude>com.sun.xml.ws:*</exclude>
+        <exclude>jakarta.annotation:jakarta.annotation-api</exclude>
+        <exclude>org.glassfish.jaxb:*</exclude>
+        <exclude>com.sun.istack:istack-commons-runtime</exclude>
+        <exclude>org.glassfish.gmbal:gmbal</exclude>
+        <exclude>org.glassfish.external:management-api</exclude>
+        <exclude>org.glassfish.pfl:*</exclude>
+        <exclude>org.jvnet.staxex:stax-ex</exclude>
+        <exclude>com.sun.xml.stream.buffer:streambuffer</exclude>
+        <exclude>org.jvnet.mimepull:mimepull</exclude>
+        <exclude>com.sun.xml.fastinfoset:FastInfoset</exclude>
+        <exclude>org.glassfish.ha:ha-api</exclude>
+        <exclude>com.sun.xml.messaging.saaj:saaj-impl</exclude>
+        <exclude>jakarta.activation:jakarta.activation-api</exclude>
+        <exclude>com.sun.xml.bind:jaxb-xjc</exclude>
+        <exclude>com.sun.xml.bind:jaxb-jxc</exclude>
+        <exclude>jakarta.mail:jakarta.mail-api</exclude>
+        <exclude>jakarta.persistence:jakarta.persistence-api</exclude>
+        <exclude>org.eclipse.persistence:*</exclude>
+        <exclude>jakarta.xml.ws:jakarta.xml.ws-api</exclude>
+        <exclude>jakarta.xml.bind:jakarta.xml.bind-api</exclude>
+        <exclude>jakarta.xml.soap:jakarta.xml.soap-api</exclude>
+        <exclude>jakarta.jws:jakarta.jws-api</exclude>
+        <exclude>org.jruby:jruby-complete</exclude>
+        <exclude>com.sun.jersey:*</exclude>
+        <exclude>com.sun.jersey.contribs:*</exclude>
+        <exclude>jline:jline</exclude>
+        <exclude>org.apache.hbase:hbase-shaded-client</exclude>
+        <exclude>org.apache.hbase:hbase-shaded-client-byo-hadoop</exclude>
+        <exclude>org.apache.hbase:hbase-shaded-mapreduce</exclude>
+        <exclude>com.github.stephenc.findbugs:findbugs-annotations</exclude>
+        <exclude>commons-logging:commons-logging</exclude>
+        <exclude>log4j:log4j</exclude>
+        <exclude>org.apache.htrace:htrace-core4</exclude>
+        <exclude>org.apache.htrace:htrace-core</exclude>
+        <exclude>org.apache.yetus:audience-annotations</exclude>
+        <exclude>org.slf4j:slf4j-api</exclude>
+        <exclude>org.slf4j:slf4j-log4j12</exclude>
+      </excludes>
+    </dependencySet>
+
+    <dependencySet>
+      <outputDirectory>lib/shaded-clients</outputDirectory>
+      <includes>
+        <include>org.apache.hbase:hbase-shaded-client</include>
+        <include>org.apache.hbase:hbase-shaded-mapreduce</include>
+        <include>org.apache.hbase:hbase-shaded-client-byo-hadoop</include>
+      </includes>
+    </dependencySet>
+
     <!-- Add jruby-complete to hbase_home/lib/ruby.
          Update JRUBY_PACKAGED_WITH_HBASE in bin/hbase and hbase.cmd if you would like to update outputDirectory below -->
     <dependencySet>
diff --git a/hbase-asyncfs/.blazar.yaml b/hbase-asyncfs/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-asyncfs/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-build-configuration/.blazar.yaml b/hbase-build-configuration/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-build-configuration/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-checkstyle/.blazar.yaml b/hbase-checkstyle/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-checkstyle/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-client/.blazar.yaml b/hbase-client/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-client/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-common/.blazar.yaml b/hbase-common/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-common/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-common/pom.xml b/hbase-common/pom.xml
index 5a099f3b913..3f29afdec8a 100644
--- a/hbase-common/pom.xml
+++ b/hbase-common/pom.xml
@@ -31,6 +31,10 @@
   <name>Apache HBase - Common</name>
   <description>Common functionality for HBase</description>
 
+  <properties>
+    <hubspot.build.version>${project.version}</hubspot.build.version>
+  </properties>
+
   <build>
     <resources>
       <resource>
@@ -76,7 +80,7 @@
             <configuration>
               <target>
                 <replace file="${project.build.outputDirectory}/hbase-default.xml"
-                  token="@@@VERSION@@@" value="${project.version}" />
+                  token="@@@VERSION@@@" value="${hubspot.build.version}" />
               </target>
             </configuration>
             <goals>
@@ -92,7 +96,7 @@
                             <property name="generated.sources" location="${project.build.directory}/generated-sources"/>
 
                             <exec executable="bash" failonerror="true">
-                                <arg line="${basedir}/src/saveVersion.sh ${project.version} ${generated.sources}/java"/>
+                                <arg line="${basedir}/src/saveVersion.sh ${hubspot.build.version} ${generated.sources}/java"/>
                             </exec>
                         </target>
                     </configuration>
diff --git a/hbase-endpoint/.blazar.yaml b/hbase-endpoint/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-endpoint/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-examples/.blazar.yaml b/hbase-examples/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-examples/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-external-blockcache/.blazar.yaml b/hbase-external-blockcache/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-external-blockcache/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-hadoop-compat/.blazar.yaml b/hbase-hadoop-compat/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-hadoop-compat/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-hadoop2-compat/.blazar.yaml b/hbase-hadoop2-compat/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-hadoop2-compat/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-hbtop/.blazar.yaml b/hbase-hbtop/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-hbtop/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-http/.blazar.yaml b/hbase-http/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-http/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-it/.blazar.yaml b/hbase-it/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-it/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-logging/.blazar.yaml b/hbase-logging/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-logging/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-mapreduce/.blazar.yaml b/hbase-mapreduce/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-mapreduce/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-metrics-api/.blazar.yaml b/hbase-metrics-api/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-metrics-api/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-metrics/.blazar.yaml b/hbase-metrics/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-metrics/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-procedure/.blazar.yaml b/hbase-procedure/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-procedure/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-protocol-shaded/.blazar.yaml b/hbase-protocol-shaded/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-protocol-shaded/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-protocol/.blazar.yaml b/hbase-protocol/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-protocol/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-replication/.blazar.yaml b/hbase-replication/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-replication/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-resource-bundle/.blazar.yaml b/hbase-resource-bundle/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-resource-bundle/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-rest/.blazar.yaml b/hbase-rest/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-rest/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-rsgroup/.blazar.yaml b/hbase-rsgroup/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-rsgroup/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-server/.blazar.yaml b/hbase-server/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-server/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/.blazar.yaml b/hbase-shaded/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-check-invariants/.blazar.yaml b/hbase-shaded/hbase-shaded-check-invariants/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-check-invariants/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-client-byo-hadoop/.blazar.yaml b/hbase-shaded/hbase-shaded-client-byo-hadoop/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-client-byo-hadoop/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-client/.blazar.yaml b/hbase-shaded/hbase-shaded-client/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-client/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-mapreduce/.blazar.yaml b/hbase-shaded/hbase-shaded-mapreduce/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-mapreduce/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-testing-util-tester/.blazar.yaml b/hbase-shaded/hbase-shaded-testing-util-tester/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-testing-util-tester/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-testing-util/.blazar.yaml b/hbase-shaded/hbase-shaded-testing-util/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-testing-util/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shaded/hbase-shaded-with-hadoop-check-invariants/.blazar.yaml b/hbase-shaded/hbase-shaded-with-hadoop-check-invariants/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shaded/hbase-shaded-with-hadoop-check-invariants/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-shell/.blazar.yaml b/hbase-shell/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-shell/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-testing-util/.blazar.yaml b/hbase-testing-util/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-testing-util/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-thrift/.blazar.yaml b/hbase-thrift/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-thrift/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/hbase-zookeeper/.blazar.yaml b/hbase-zookeeper/.blazar.yaml
new file mode 100644
index 00000000000..770a30af8e8
--- /dev/null
+++ b/hbase-zookeeper/.blazar.yaml
@@ -0,0 +1,18 @@
+# Note: this blazar yaml has been copied to all of the maven submodules (EXCEPT hbase-assembly) so
+# that they can be properly configured. If you make changes to this, you will need to make sure all
+# submodules are also updated accordingly. If you added a new submodule, you'll need to make sure
+# it gets a copy of this .blazar.yaml. In either case, use copy_blazar_yaml.sh to copy to all
+# subdirs containing a pom.xml.
+# Make sure to also check hbase-assembly/.blazar.yaml to see if any changes should be added there as well.
+# Prefer making changes to prepare_environment.sh instead, if possible.
+
+buildpack:
+  host: git.hubteam.com
+  organization: HubSpotProtected
+  repository: Blazar-Buildpack-Java
+  branch: v2
+
+before:
+  - description: "Prepare build environment"
+    commands:
+      - $WORKSPACE/build-scripts/prepare_environment.sh
diff --git a/pom.xml b/pom.xml
index 40f29de5c3d..84b5d4ff1d2 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1605,6 +1605,11 @@
         <type>test-jar</type>
         <!--Was test scope only but if we want to run hbase-it tests, need the annotations test jar-->
       </dependency>
+      <dependency>
+        <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-annotations</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-common</artifactId>