如何将accumulo tablet服务器名称更改为从远程客户端访问?

hivapdat  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(379)

我一直在运行一个单节点accumulo应用程序,只要客户端应用程序在同一台机器上运行,它就一直运行良好。现在,我需要将客户端迁移到另一台计算机,但运行应用程序会发出以下警告,不允许程序继续:

WARN  [client.impl.ServerClient] Failed to find an available server in the list of servers: [localhost.localdomain:9997 (120000)]

我可以通过编辑 localhost.localdomain 进入 /etc/hosts 但还是想知道正确的解决方法。我可以从客户机连接到accumulo服务器,并验证它是否被称为 localhost.localdomain:9997
现在一切看起来都就绪了,如果我能找到一种从客户端引用tablet服务器的方法,而不调用它的话 localhost.localdomain ,我会重新上网。有什么建议吗?

mwyxok5s

mwyxok5s1#

accumulo服务将在zookeeper中公布它们正在运行的服务器的地址。他们使用的服务地址通常是 InetAddress.getLocalHost().getHostName() .
最好的解决方案是确保在accumulo及其客户机运行的任何位置都正确配置了dns,以便accumulo能够检测并公布外部客户机也知道的主机名。您还可以使用另一个名称服务实现(通过配置 /etc/nsswitch.conf 适当地;看到了吗 man nsswitch.conf )所以 InetAddress.getLocalHost().getHostName() 返回将由外部客户端识别的内容。例如,您可以依赖 files 的选项 hosts: 指令而不是 dns ,但您需要确保 /etc/hosts 在accumulo服务器和客户机上为任何ip地址提供一致的条目。
而不是依赖 InetAddress.getLocalHost().getHostName() 当服务启动时,可以通过设置 -a, --address 服务启动时的命令行选项。这也会影响服务侦听的地址(默认情况下,它侦听的地址) 0.0.0.0 ).
在accumulo的某些版本提供的一些方便脚本中 -a 尝试根据从中返回的内容自动设置选项 ifconfig 和/或 conf/slaves 文件。在大多数场景中,这些脚本的行为与 InetAddress.getLocalHost().getHostName() ,所以使用dns或 /etc/hosts 因为你的名字服务将是最好的。

相关问题