问题现象
最近接了一个需求,要在本地(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
总结????????自己被这个问题困扰了两天,学艺不精,反受其累,实在不应该啊。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |