Drill JDBC和Zookeeper抛出UnresolvedAddressException

时间:2018-05-23 18:06:44

标签: java docker mesos apache-drill dcos

我尝试使用JDBC驱动程序在外部连接到DC / OS上的容器化分布式apache钻取设置,如下所示

https://drill.apache.org/docs/using-the-jdbc-driver/#example-of-connecting-to-drill-programmatically

但是,当在集群外部运行以从我的机器连接时,zookeeper连接完成,然后它尝试以

的形式解析Drillbit地址

2d7f7217340c:31010

其中2d7f7217340c是钻取Web控制台

中显示的内部钻头ID

当然会抛出

java.nio.channels.UnresolvedAddressException

直到我在本地/etc/hosts文件中输入内容 将2d7f7217340c解析为钻取节点的公共IP。

我已经在这个主题上搜索了很多,没找到任何东西。 有没有办法配置Zookeeper或Drill返回IP而不是钻头ID,以便主机文件不需要手动更新?

1 个答案:

答案 0 :(得分:1)

我注意到地址字符串2d7f7217340c是由部署期间生成的容器ID定义的。即使通过

修改容器的主机名也是如此

lsns

nsenter --target <container_pid> --uts hostname <public_ip>

并在容器中重新启动钻取,zookeeper仍然返回2d7f7217340c地址。

一个可行的解决方案是修改DRILL_HOSTNAMEapache-drill/conf/drill-env.sh变量的最新添加,以通过AWS元数据服务获取公共主机名

export DRILL_HOSTNAME=`curl -s http://169.254.169.254/latest/meta-data/public-hostname`

公共主机名现在由Drill公布,并且可以在外部和内部解析