在ARM架构服务器上使用docker部署hbase常常遇到挑战。本文分析了这种不兼容性问题,并提供了解决方案。
核心问题在于尝试在ARM架构的Docker容器中运行为x86架构编译的HBase。即使更换了JDK版本(从JDK11到JDK8),并使用了arm64架构的JDK,也无法解决问题。根本原因是下载的HBase源码包(例如hbase-2.4.17-src.tar.gz)是为x86架构编译的,无法在ARM架构上直接运行。 Java.lang.ClassNotFoundException: org.apache.hadoop.hbase.master.HMaster 错误信息也证实了这一点。 使用预编译的HBase Docker镜像(例如harisekhon/hbase)也会因架构不匹配而失败,提示 The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)。 最终,python脚本连接HBase时出现的TTransportException: TSocket read 0 bytes错误,也是由于HBase服务器端启动失败导致的网络连接问题。
解决方法是使用针对ARM架构编译的HBase版本。 直接编译HBase源码并构建一个包含ARM架构兼容HBase版本的Docker镜像是有效的解决方案。这需要选择合适的ARM架构JDK版本,并确保所有依赖项都与ARM架构兼容。仅仅更换基础镜像和JDK版本是不够的,HBase本身需要重新编译以适应ARM架构。