java 调用 docker 中的 HBase 服务 卡死 不报错 不报异常 卡着不动 但 服务ip是能ping通
确定 HBase 实际运行的linux环境,并且获取该环境的 hostname。将该 hostname 添加到系统 hosts 文件中。尤其是,对于docker中的 HBase 服务,则是容器内的 hostname,而非外层虚拟机系统的。
问题现象
最近接了一个需求,要在本地(win)环境运行位于虚拟机中搭建的伪分布 HBase 服务(linux)
在 win 环境中,浏览器 打开 HBase 的 16010 web页面是没有问题的,这说明网络连通正常
我在本地Java代码中使用了以下方式去连接 HBase 服务,
static {
try {
if (conf == null) {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "192.168.137.90"); // hbase 服务地址
conf.set("hbase.zookeeper.property.clientPort", "2181"); // 端口号
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
问题来了:
程序启动后,卡在HBase这里不动了,不报错,不报异常,没有任何输出,
参考网上的教程,说是要将 linux 的 hostname 配置到本机的 hosts 文件中,我也试过了,并不起作用。
运行环境
在分析这个问题之前,我先简要介绍一下我的运行环境
宿主机:
系统:windown 10
IP:192.168.137.80
用于启动编程环境
HBase 服务端:
VMware 虚拟机中安装 docker,在docker中启动 HBase 容器
虚拟机:
系统:ubuntu 20.04 LTS
IP:192.168.137.90
hostname:ubuntu
docker 容器;
HBase镜像:harisekhon/hbase
容器内 hostname :47werx09g7s
端口转发:2181,16010,16030
问题分析
HBase 的启动时,
会将其本身所在的环境中的hostname绑定到服务端口上。
例如,
虚拟机中直接安装,那么服务端口绑定到 ubuntu 上
使用docker镜像安装,那么服务端口绑定到 47werx09g7s 上
本地程序需要通过正确的 hostname 进行访问
因此 网络通不代表配置通,要配置 hosts 才算完全通
解决办法
一定,一定,一定 确定 HBase 实际运行的linux环境,并且获取该环境的 hostname
将该 hostname 添加到系统 hosts 文件中
尤其是,对于docker中的 HBase 服务,则是容器内的 hostname,而非外层虚拟机系统的。
例如:
我本机的 hosts 文件配置如下:
192.168.137.90 47werx09g7s
总结
自己被这个问题困扰了两天,学艺不精,反受其累,实在不应该啊。
更多推荐
所有评论(0)