One*_*der 3 hbase scala docker playframework-2.2
我创建了一个在 Docker 容器上运行的 HBase 实例。我已经能够使用 docker 容器的 bash shell 从 HBase Shell 创建一个表,并且还能够从 HBase Rest API 访问它。
但是我无法使用 Scala 从 Play 框架访问它,我不断收到以下异常。
MasterNotRunningException |com.google.protobuf.ServiceException: java.net.UnknownHostException: unknown host: 238b057263fb
Run Code Online (Sandbox Code Playgroud)
这是抛出异常的 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")
Run Code Online (Sandbox Code Playgroud)
这是 Hbase-Site.xml
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>file:///opt/hbasedata</value>
</property>
Run Code Online (Sandbox Code Playgroud)
编辑:我的 Docker 文件是更大的 docker compose 的一部分,我正在发布 docker 端口。我在 docker-compose 中的 ports 部分如下
ports:
- 2181:12181
- 60000:60000
- 60010:60010
- 60020:60020
- 60030:60030
- 2471:2471 // this is for the rest API
Run Code Online (Sandbox Code Playgroud)
我能够访问 HBase 并操作来自 Shell 和 Rest API 的数据,只有使用 Java API 从 Play Framework 进行访问会失败。我哪里出错了?
看起来您的 Dockerized 集群正在通过 Docker 网络内的主机名来跟踪主节点。
您需要:
或者
-h <hostname>,并确保您的 Play 服务器将该主机名映射到正确的 IP(通过/etc/hosts或 DNS)。该-h选项将使您的集群报告主设备的内部(向 Docker 网络)fqdn,并且 Play 端的映射会将您的 Play 应用程序从内部 fqdn 指向真实地址。| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |