暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

HBase技术社区 2021-01-26
793


  • 1. 摘要

  • 2. 开始安装

    • 2.1 准备工作

    • 2.2 安装部署

  • 3. 测试

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

  • 5. 总结

  • 6. 附件

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.xml
core-site.xml
到 HBase 安装目录的 conf 文件夹下。

backup-masters
regionservers
两个配置文件分别用来配置 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

- END -


文章转载自HBase技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论