gpt4 book ai didi

scala - 无法连接到 Docker 实例中的 HBase

转载 作者:行者123 更新时间:2023-12-04 17:55:22 25 4
gpt4 key购买 nike

我已经创建了一个在 Docker 容器上运行的 HBase 实例。我已经能够使用 docker 容器的 bash shell 从 HBase Shell 在其中创建一个表,并且还能够从 HBase Rest API 访问它。

但是我无法使用 Scala 从 Play Framework 访问它,我经常收到以下异常。

MasterNotRunningException |com.google.protobuf.ServiceException: java.net.UnknownHostException: unknown host: 238b057263fb

这是抛出异常的 Scala 代码。

val config = HBaseConfiguration.create()
var hbaseRunning = false;

config.clear
config.set("hbase.zookeeper.quorum", "172.18.0.2"); // This ip Address was retrieved by doing a docker inspect on the docker container
config.set("hbase.zookeeper.property.clientPort","2181")
config.set("hbase.master", "172.18.0.2:60000");
config.setInt("timeout", 25000);

try{
println(" Check if HBase is Running")
HBaseAdmin.checkHBaseAvailable(config); // This line throws the exception
println(" HBase is Running") // Because this line doesnt print.
hbaseRunning = true
}catch{
case ex: MasterNotRunningException => {
println(" MasterNotRunningException |" + ex.getMessage) // This is the exception I get
}
}
finally println(" HBase is NOT Running")

这里是Hbase-Site.xml

<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>file:///opt/hbasedata</value>
</property>

编辑:我的 Docker 文件是更大的 docker compose 的一部分,我正在发布 docker 端口。我在 docker-compose 中的端口部分如下

    ports:
- 2181:12181
- 60000:60000
- 60010:60010
- 60020:60020
- 60030:60030
- 2471:2471 // this is for the rest API

我能够从 Shell 和 Rest API 访问 HBase 和操作数据,只有使用 Java API 从 Play Framework 访问失败。我哪里出错了?

最佳答案

看起来您的 Dockerized 集群正在通过 Docker 网络内的主机名跟踪主机。

您要么需要:

  1. 在该网络的容器中运行您的 Play 应用(以便它可以解析主主机名)

  1. -h <hostname> 启动你的容器(或等效的撰写标记)并确保您的 Play 服务器将该主机名映射到正确的 ip(通过 /etc/hosts 或 DNS)。 -h选项将使您的集群报告主服务器的内部(到 Docker 网络)fqdn,并且 Play 端的映射会将您的 Play 应用程序从内部 fqdn 指向真实地址。

关于scala - 无法连接到 Docker 实例中的 HBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com