irpas技术客

java 调用 docker 中的 HBase 服务 卡死 不报错 不报异常 卡着不动 但 服务ip是能ping通_去山的那边看海啊_docker hbase

未知 4133

问题现象

最近接了一个需求,要在本地(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.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Docker #HBase #JAVA #确定 #hostname #将该