首页 > 技术文章 > HBase运维篇 _ ZGC初体验——HBase1.4.8安装部署和测试

leojie 2021-07-17 13:11 原文

HBase运维篇 | ZGC初体验——HBase1.4.8安装部署和测试

1. 摘要

接上篇文章——HBase源码篇 | ZGC初体验——OpenJdk 15编译HBase 1.4.8,在上篇文章中,我为大家分享了open jdk 15编译hbase-1.4.8的详细过程,并且也得到了最终可安装的tar.gz包。

那么,这个安装包是否可以直接在分布式环境中部署和正常使用呢?在今天的这篇文章里,将继续为大家分享,jdk15编译的HBase安装包在完全分布式环境下的部署和功能测试。关于HBase的安装流程,网上有很多优秀的文章可以直接拿来借鉴和使用,因此,这里只记录一些需要特别注意的地方。

2. 开始安装

2.1 准备工作

  • 安装AdoptOpenJDK15,请自行下载centos7环境中的AdoptOpenJDK15安装包,安装后,先不要配置Java的环境变量
  • 安装Hadoop,最好是2.7.4,但我测试使用的是hadoop2.7.2
  • 用AdoptOpenJDK15编译好的hbase-1.4.8-bin.tar.gz

2.2 安装部署

HBase安装可以使用单独的jdk,而无需把hadoop和zookeeper等之类的基础组件也用jdk15编译一遍。

hbase-1.4.8-bin.tar.gz解压缩后,编辑其配置文件。

hbase-env.sh

该文件中需要重点修改的配置选项如下:

# 设置JDK的home
export JAVA_HOME=/usr/local/jdk15
# 修改HBASE_OPTS,默认的GC方式已不支持,需要修改为其他GC算法,不然HBase相关进程无法启动。这里使用的GC算法是ZGC --add-exports之类的配置不加的话,HMaster和RS进程也无法正常启动
export HBASE_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseZGC --add-exports=java.base/jdk.internal.access=ALL-UNNAMED --add-exports=java.base/jdk.internal=ALL-UNNAMED --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/sun.security.pkcs=ALL-UNNAMED --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED"
# 分别编辑MASTER和REGIONSERVER的JVM参数,为其开启ZGC
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx1g -Xms1G -XX:+UnlockExperimentalVMOptions -XX:+UseZGC"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmx2g -Xms2G -XX:+UnlockExperimentalVMOptions -XX:+UseZGC"
# 不使用HBase自带的zookeeper
export HBASE_MANAGES_ZK=false

# 请重点关注以上配置项,其他配置项可以按需进行调优配置

hbase-site.xml

该文件中需要重点关注的配置如下:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://leo/hbase148</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>是否是完全分布式</description>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>node1,node2,node3</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>
<property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase148</value>
</property>

请重点关注以上配置项,其他配置项可以按需进行配置,当然以上配置选项也可以按照你的集群情况自行配置。

上述配置完成之后,请移动Hadoop的两个配置文件hdfs-site.xmlcore-site.xml到HBase安装目录的conf文件夹下。

backup-mastersregionservers两个配置文件分别用来配置HBase的备主节点和RS节点,请按需配置。

上述配置完成之后,把HBase的安装目录,分发到其他的HBase节点,所需的环境变量,请自行设置,然后使用start-hbase.sh脚本启动各个节点的HBase进程。然后使用jps命令或访问HBase的web ui来检查HBase的进程是否正常启动。

hbase-web-ui

3. 测试

运行hbase shell,进入shell下,测试相关的命令,测试中可能会遇到如下异常,

shell-error

修改方式如下图:

recover

@max_width = Java::jline.Terminal.getTerminal().getTerminalWidth()
修改为
@max_width = Java.jline.TerminalFactory.get.getWidth

解决思路是,参考更高版本HBase的代码,如:hbase-2.2.3中hbase-shell模块相关rb文件的源码。

运行一些shell命令,是可以正常工作的,shell的功能测试通过后,再来测试提交hbase的MR任务,例如:RowCounter

hbase org.apache.hadoop.hbase.mapreduce.RowCounter leo_test

不能用新编译版本的hbase提交MR任务,因为,我们此版本中hbase相关的jar包是使用jdk15编译的,所以要在用jdk8版本编译的hbase-1.4.8目录中提交MR作业。

4. 补充一个编译时遇到的异常

修改代码后,重新对HBase源码进行编译,突然遇到如下异常。

compiler-error

这个异常说的是,我运行mvn命令时所依赖的jdk版本不满足我设置的最小java版本,是由项目pom文件中的这块配置控制的。

pom-settins

hadoop-profile-min-maven-min-java-banned-xerces

但实际上,我已经切换过了jdk,运行java -version命令,显示的java版本已经是jdk15了。最终的解决方案是,运行mvn命令时,先运行如下命令:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
# 然后再运行打包命令
mvn clean package -DskipTests -Dhadoop-two.version=2.7.4 assembly:single  

5. 总结

以上内容记录了在分布式环境中,我们用jdk15编译的HBase安装包,在测试环境中部署和体验的过程,这个环节基本没有什么坑,HBase的功能完整可用,只是不太建议立马在生产环境中使用。

后续会继续测试,在此版本中开启了ZGC的HBase的性能表现,并与G1的性能表现做对比,验证GC算法的升级和优化是否有助于改善查询延时的毛刺现象。

6. 附件

AdoptOpenJDK15安装包和编译好的HBase安装包的百度网盘地址:

(hbase-1.4.8-bin.tar.gz中已经修复了hbase-shell的bug)

链接:https://pan.baidu.com/s/1jgP8QtNK6IXQnvwot2kHPg  密码:2li6

推荐阅读