Drill JDBC 和 Zookeeper 抛出 UnresolvedAddressException

Drill JDBC and Zookeeper throws UnresolvedAddressException

我正在尝试使用 JDBC 驱动程序外部连接到 DC/OS 上的容器化分布式 Apache Drill 设置

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

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

的形式解析一个 Drillbit 地址

2d7f7217340c:31010

其中 2d7f7217340c 是钻头网络控制台中显示的内部钻头 ID

当然会抛出

java.nio.channels.UnresolvedAddressException

直到我在本地 /etc/hosts 文件中创建一个条目 将 2d7f7217340c 解析为 drill 节点的 public ip。

我已经围绕该主题进行了大量搜索,但没有找到任何内容。 有没有办法将 Zookeeper 或 Drill 配置为 return IP 而不是 drillbit ID,这样主机文件就不需要手动更新了?

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

修改容器的主机名

lsns

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

并在容器中重新启动 drill,zookeeper 仍然 returns 2d7f7217340c 地址。

一个可行的解决方案是修改最近在 apache-drill/conf/drill-env.sh 中添加的 DRILL_HOSTNAME 变量,以通过 AWS 元数据服务

获取 public 主机名
export DRILL_HOSTNAME=`curl -s http://169.254.169.254/latest/meta-data/public-hostname`

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