我尝试使用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控制台
当然会抛出
java.nio.channels.UnresolvedAddressException
直到我在本地/etc/hosts
文件中输入内容
将2d7f7217340c
解析为钻取节点的公共IP。
我已经在这个主题上搜索了很多,没找到任何东西。 有没有办法配置Zookeeper或Drill返回IP而不是钻头ID,以便主机文件不需要手动更新?
答案 0 :(得分:1)
我注意到地址字符串2d7f7217340c
是由部署期间生成的容器ID定义的。即使通过
lsns
nsenter --target <container_pid> --uts hostname <public_ip>
并在容器中重新启动钻取,zookeeper仍然返回2d7f7217340c
地址。
一个可行的解决方案是修改DRILL_HOSTNAME
中apache-drill/conf/drill-env.sh
变量的最新添加,以通过AWS元数据服务获取公共主机名
export DRILL_HOSTNAME=`curl -s http://169.254.169.254/latest/meta-data/public-hostname`
公共主机名现在由Drill公布,并且可以在外部和内部解析