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 公布,并且可以在外部和内部解析
我正在尝试使用 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 元数据服务
export DRILL_HOSTNAME=`curl -s http://169.254.169.254/latest/meta-data/public-hostname`
public 主机名现在由 Drill 公布,并且可以在外部和内部解析