跳转至

hbase

快速开始

点击这里下载Apache HBase 2.4.16。

hbase构建

版本

2.4.16

环境依赖

移植环境

NAME="Loongnix-Server Linux"
VERSION="8"
ID="loongnix-server"
ID_LIKE="rhel fedora centos"
VERSION_ID="8"
PLATFORM_ID="platform:lns8"
PRETTY_NAME="Loongnix-Server Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:loongnix-server:loongnix-server:8"
HOME_URL="http://www.loongnix.cn/"
BUG_REPORT_URL="http://bugs.loongnix.cn/"
CENTOS_MANTISBT_PROJECT="Loongnix-server-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
Linux b79f3dc579f0 4.19.190-2.1.lns8.loongarch64 #1 SMP Thu Sep 23 08:52:56 UTC 2021 loongarch64 loongarch64 loongarch64 GNU/Linux

软件依赖

yum install -y maven wget diffutils
除了上述直接通过yum安装的软件外,还需要安装protobuf-3.21.12以及protobuf-2.5.0
点击这里下载protobuf-3.21.12源码。
点击这里下载protobuf-2.5.0源码。
安装步骤如下:
yum install -y autoconf automake libtool curl make gcc-c++ unzip
tar -zxf protobuf-2.5.0-linux-loong64.tar.gz
tar -zxf protobuf-3.21.12-linux-loong64.tar.gz
cd protobuf-3.21.12
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
cd ../protobuf-2.5.0
./autogen.sh
./configure --libdir=/usr/local/lib64
make
make install
mv /usr/local/bin/protoc /usr/local/bin/protoc-2.5.0
测试是否安装成功:
protoc --version
>> libprotoc 3.21.12
protoc-2.5.0 --version
>> libprotoc 2.5.0

环境变量

export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-8.1.10.lns8.loongarch64"
export M2_HOME="/usr/share/maven"
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin:$JAVA_HOME/jre/bin
注意openjdk的版本。

快速构建

maven本地仓库

/usr/share/maven/conf/settings.xml文件中设置maven本地仓库目录:

<localRepository>/data/local_repo</localRepository>
点击这里下载maven本地仓库,解压至/data目录下。

hbase源码

点击这里下载hbase源码。

编译

mvn -Dhadoop.profile=3.0 -Dhadoop-three.version=3.3.4 clean package -DskipTests assembly:single
编译信息的含义参考这里

详细构建

点击这里下载hbase 2.4.16官方源码。
参考软件依赖章节完成多版本protoc的安装。maven本地仓库路径的修改与否不会影响到后续的构建。

hbase源码修改

hbase-2.4.16目录下的pom.xml以及hbase-protocol-shaded/pom.xml文件进行修改:

diff --git a/pom.xml b/pom.xml
index 11680c4..18a26f1 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1697,7 +1697,7 @@
           <artifactId>protobuf-maven-plugin</artifactId>
           <version>${protobuf.plugin.version}</version>
           <configuration>
-            <protocArtifact>${external.protobuf.groupid}:protoc:${external.protoc.version}:exe:${os.detected.classifier}</protocArtifact>
+            <protocExecutable>/usr/local/bin/protoc-2.5.0</protocExecutable>      
             <protoSourceRoot>${basedir}/src/main/protobuf/</protoSourceRoot>
             <clearOutputDirectory>false</clearOutputDirectory>
             <checkStaleness>true</checkStaleness>

diff --git a/hbase-protocol-shaded/pom.xml b/hbase-protocol-shaded/pom.xml
index be67445..30ca69c 100644
--- a/hbase-protocol-shaded/pom.xml
+++ b/hbase-protocol-shaded/pom.xml
@@ -95,8 +95,8 @@
               <goal>compile</goal>
             </goals>
             <phase>generate-sources</phase>
             <configuration>
-              <protocArtifact>com.google.protobuf:protoc:${internal.protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
+              <protocExecutable>/usr/bin/protoc</protocExecutable>
               <checkStaleness>true</checkStaleness>
             </configuration>
           </execution>
xml文件的修改,参考这里

寻找架构相关的jar包

关于架构相关jar包的寻找有两个方案:
方案一,直接下载其他架构的hbase-2.4.16-bin.tar.gz文件,解压后在lib目录下查找含有.so文件的jar包,逐个适配;方案二,直接编译,遇到阻塞的jar包进行适配,编译完成后在maven本地仓库中查找含有.so文件的jar包,逐个适配。
方案一适用于lib目录下架构相关的jar包来源于独立的项目与本项目无关,如只包含jna.jar
方案二适用于lib目录下架构相关的jar包是本项目生成的,无论其中的.so文件来源与项目自身编译产生的或是解压第三方jar包得到的,如本项目hbase-2.4.16/lib目录下的shaded-clients/hbase-shaded-mapreduce-2.4.16.jar等。
采用方案二统计出需要适配的jar包有:

os-maven-plugin 1.5.0.final.jar
snappy-java-1.1.8.2.jar
jruby-complete-9.2.13.0.jar
hbase-shaded-netty-4.1.4.jar
commons-crypto-1.0.0.jar
leveldbjni-all-1.8.jar
jline-2.11.jar
jffi-1.2.16-native.jar
jna-5.2.0.jar
其中,os-maven-plugin 1.5.0.final.jar是hbase编译时需要的jar包,从1.7.1版本开始支持loongarch。

适配os-maven-plugin 1.5.0.final.jar

点击这里跳转到os-maven-plugin项目。
点击这里查看修改。
修改后执行:

mvn clean package
mvn install

适配snappy-java-1.1.8.2.jar

点击这里跳转到snappy-java项目。
点击这里查看如何编译。

适配jruby-complete-9.2.13.0.jar

在适配jruby-complete-9.2.13.0.jar之前需要先适配以下项目,否则hbase在调用该jar包时会出错:

jffi 1.2.23
jnr-ffi 2.1.12
jnr-constants 0.9.15
jnr-posix 3.0.54

jffi

点击这里跳转到jffi项目。
点击这里查看修改。
点击这里查看如何编译。

jnr-ffi

点击这里跳转到jnr-ffi项目。
点击这里查看修改。
修改后执行:

./mvnw install -DskipTests=true

jnr-constants

点击这里跳转到jnr-constants项目。
点击这里查看修改。
点击这里查看如何编译。

jnr-posix

点击这里跳转到jnr-posix项目。
点击这里查看修改。
修改后执行:

mvn package -DskipTests=true
mvn install -DskipTests=true
以上4个项目编译完成后,开始构建jruby
点击这里跳转到jruby项目。
点击这里查看修改。
点击这里查看如何编译。

hbase-shaded-netty-4.1.4.jar

hbase-shaded-netty-4.1.4.jar中的.so文件来源于netty-transport-native-epoll-4.1.87.Final-linux-loongarch.jar。而在编译netty-transport-native-epoll-4.1.87.Final-linux-loongarch.jar前需要先编译netty-tcnative-linux-loongarch_64-2.0.56.Final.jar

netty-tcnative-linux-loongarch_64-2.0.56.Final.jar

参考netty-tcnative移植手册

netty-transport-native-epoll-4.1.87.Final-linux-loongarch.jar

参考netty移植手册
安装上述两个jar包后开始编译hbase-shaded-netty-4.1.4.jar点击这里跳转到hbase-thirdparty项目。
执行:

mvn clean install

commons-crypto-1.0.0.jar

点击这里跳转到commons-crypto项目。
卸载高版本的openssl-devel,安装1.0.2版本openssl-devel:

yum install compat-openssl10-devel
安装后执行:
mvn clean package
mvn install

leveldbjni-all-1.8.jar

点击这里跳转到leveldbjni项目。
点击这里查看修改。
点击这里查看如何编译。

jline-2.11.jar

点击这里跳转到jline2项目。
架构相关的.so文件来源于maven仓库中的jansi-1.11.jar。而jansi-1.11.jar中的.so文件来源于jansi-native-1.5-linux64.jar

jansi-native-1.5-linux64.jar

点击这里跳转到jansi-native项目。
执行:

mvn clean package
一般会出现autotools相关的问题,如果出现:
config.status: error: cannot find input file: `Makefile.in'
进入报错的configure.ac文件所在的位置,执行:
aclocal
autoconf
autoheader
automake --add-missing
生成Makefile.in后重新在根目录执行命令:
mvn clean package
mvn install

jansi-1.11.jar

点击这里跳转到jansi项目。
jansi/jansi目录下执行:

mvn clean package
mvn install
上述的jar包安装到本地仓库后,在jline2根目录下执行:
mvn clean package
mvn install

jffi-1.2.16-native.jar

参考上文jffi项目。

jna-5.2.0.jar

参考jna移植手册

hbase编译

mvn -Dhadoop.profile=3.0 -Dhadoop-three.version=3.3.4 clean package -DskipTests assembly:single