У меня есть HBase и HDFS, настроенные и работающие в псевдораспределенном режиме (на Mac OSX). У меня также есть простое приложение Java. Это работает, когда используется локально.
Я хотел бы сделать это удаленно. Сервер скрыт за маршрутизатором, все необходимые порты переадресованы.
Когда я пытаюсь подключиться удаленно, я получаю:
...
12/01/25 23:21:15 INFO zookeeper.ClientCnxn: Session establishment complete on server
remote.host.com/remoteip:53058, sessionid = 0x13516f179a30005, negotiated timeout = 40000
12/01/25 23:21:36 INFO client.HConnectionManager$HConnectionImplementation: getMaster attempt
0 of 10 failed; retrying after sleep of 1000
java.net.SocketTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=192.168.52.53/192.168.52.53:58023]
Что для меня означает, что Zookeeper подключается, но дает клиенту неправильный адрес:
1) потому что его местный
2) потому что он не на том порту
Я попытался исправить проблему # 1, установив удаленный адрес в файле HDFS core-site.xml (fs.default.name) и в hbase-site.xml (hbase.rootdir).
HDFS не будет привязываться к удаленному адресу. Если HDFS привязана к локальной и работает, hbase не будет подключаться, если ей предоставлен удаленный в hbase-site (ip и port forward работают наверняка, проверено с помощью telnet).
Я поиграл с / etc / hosts - независимо от того, возвращает ли ping -c 1 $(hostname)
локальный или удаленный адрес, HDFS и HBase запускаются только при привязке к локальному.
Я также попытался исправить проблему №2, установив hbase.master.port в hbase-site.xml - не имеет значения, что я установил, главный сервер HBase привязывается к случайному порту.
Я потратил кучу времени, пытаясь понять это правильно, проверил все возможные источники и перепробовал все возможные комбинации.