hbase псевдораспределенное удаленное соединение - PullRequest
3 голосов
/ 26 января 2012

У меня есть 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 привязывается к случайному порту.

Я потратил кучу времени, пытаясь понять это правильно, проверил все возможные источники и перепробовал все возможные комбинации.

1 Ответ

1 голос
/ 27 января 2012

Обычная проблема в этой ситуации состоит в том, что вы ожидаете, что сможете получить доступ к HBase через один IP-адрес за пределами брандмауэра NAT.Хотя это, вероятно, возможно, очень сложно настроить и почти наверняка не поддерживать.

Когда клиент подключается к HBase, первое, что происходит, - это подключается к ZooKeeper, чтобы определить, на каком компьютере размещены таблицы, которые он использует.ищите (или какой компьютер является текущим Master, если вы выполняете операции администратора, что, кажется, имеет место здесь).

Затем клиент подключается напрямую к удаленным машинам.Если удаленные машины (в частности, HBase RegionServers) находятся за NAT-маршрутизатором и сообщают о себе ZooKeeper, используя свои внутренние IP-адреса, то у машины вне маршрутизатора нет способа разрешить IP-адрес RegionServer внутри брандмауэра.

Единственный разумный способ заставить HBase работать через NAT - это направлять все внешние запросы через прокси.Для этого есть два варианта: экономия и отдых.Здесь вы найдете гораздо больше информации о прокси: http://ofps.oreilly.com/titles/9781449396107/clients.html

Кстати, вы почти никогда не хотите такой настройки - все клиентские машины должны иметь возможность напрямую связываться с RegionServers, чтобы у вас не возникало узкого места в вашей HBaseпрокси-сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...