ОШИБКА HBASE: Не удалось настроить интерфейс прокси org.apache.hadoop.hbase.ipc.HRegionInterface - PullRequest
3 голосов
/ 11 января 2012

Я сейчас пытаюсь работать на HDFS и HBASE.Hadoop и HBASE правильно установлены на машине, и мое приложение отлично работает, когда размещено на одной машине.

Но при размещении на другой машине.При первом обращении к HBASE я получаю сообщение об ошибке:

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [sitepulsewebsite] in context with path [/SitePulseWeb] threw exception [Request processing failed; nested exception is javax.jdo.JDODataStoreException
NestedThrowables:org.apache.hadoop.hbase.MasterNotRunningException: localhost:60000] with root cause
org.apache.hadoop.hbase.MasterNotRunningException: localhost:60000

И при втором обращении получаю исключение:

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [sitepulsewebsite] in context with path [/SitePulseWeb] threw exception [Request processing failed; nested exception is javax.jdo.JDODataStoreException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1
NestedThrowables: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1] with root cause
java.net.ConnectException: Connection refused

Мой файл hbase-site.xml выглядит следующим образом:

<configuration>
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:54310/hbase </value>
    <description>
        The directory shared by region servers. Should be
        fully-qualified to
        include the filesystem to use. E.g:
        hdfs://NAMENODE_SERVER:PORT/HBASE_ROOTDIR

    </description>

</property>

<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>The mode the cluster will be in. Possible values are
        false: standalone and pseudo-distributed setups with managed
        Zookeeper
        true: fully-distributed with unmanaged Zookeeper Quorum (see
        hbase-env.sh)
    </description>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>master</value>
    <description>Comma separated list of servers in the ZooKeeper Quorum.
        If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of
        servers which we will start/stop ZooKeeper on.
    </description>
</property>
<property>
    <name>hbase.master</name>
    <value>master:60010</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property></configuration>

ОБНОВЛЕННЫЕ ЛОГИ

Просматривая журналы (уровень отладки), созданные моим Java-приложением, я обнаружил следующие журналы:

1 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.ipc.HBaseClient - IPC Client (47) connection to localhost/127.0.0.1:60020 from an unknown user: closed
2 2012-01-12 17:12:13,328 INFO Thread-1320 org.apache.hadoop.ipc.HbaseRPC - Server at localhost/127.0.0.1:60020 could not be reached after 1 tries, giving up.
3 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - locateRegionInMeta parentTable=-ROOT-, metaLocation=address: localhost:60020, regioninfo: -ROOT-,,0.70236052, attempt=0 of 10 failed; retrying after sleep of 1000 because: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1
4 2012-01-12 17:12:13,328 DEBUG Thread-1320 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - Lookedup root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@9d1e83; hsa=localhost:60020
5 2012-01-12 17:12:13,736 DEBUG Thread-1268 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation - Lookedup root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@9d1e83; hsa=localhost:60020
6 2012-01-12 17:12:13,736 DEBUG Thread-1268 org.apache.hadoop.ipc.HBaseClient - Connecting to localhost/127.0.0.1:60020
7 2012-01-12 17:12:13,737 DEBUG Thread-1268 org.apache.hadoop.ipc.HBaseClient - closing ipc connection to localhost/127.0.0.1:60020: Connection refused
8 java.net.ConnectException: Connection refused

В файле / etc / hosts , когда отображение было изменено с

127.0.0.1 localhost

на

<my_server_IP> localhost

Мое приложение работало отлично.Следовательно, мне нужен какой-то способ сообщить приложению, чтобы оно подключалось к нужному имени хоста, а не к localhost.

Я попытался отладить его, но безуспешно.

Ответы [ 4 ]

6 голосов
/ 18 января 2012

Я не знаю, является ли это вашей проблемой, но обычно проблема заключается в использовании localhost, если вы не получаете доступ ко всему с одного хоста.

Так что не используйте localhost!

И вообще не меняйте определение localhost.Локальный хост по определению 127.0.0.1.

Вы определяете hbase.rootdir как hdfs: // master: 54310 / hbase и hbase.zookeeper.quorum как master.

Что такое master?Это действительно должно быть полное доменное имя основного интерфейса Ethernet вашего хоста.Обратный DNS IP-адреса этого интерфейса должен соответствовать тому же полному доменному имени, которое вы указали в этих полях.(Или просто используйте необработанный IP-адрес, если вы не можете управлять обратным днс)

Убедитесь, что ваши конфигурации HDFS также используют те же FQDN или IP-адреса или синхронизированные файлы / etc / hosts.Синхронизированные файлы / etc / hosts должны убедиться в том, что прямой и обратный DNS одинаковы, если все хосты (все HDFS и HBase и ваши клиенты) используют один и тот же / etc / hosts и не существует никаких компонентов ОС, перекрывающих / etc/ хостов.В общем, я не люблю ничего делать с / etc / hosts.Это в конечном итоге укусит вас.

Затем ваш удаленный клиент должен получить доступ к вашему мастеру HBase через то же полное доменное имя или IP-адрес.

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

Если вам нужна проверка на реальность, просто используйте IP-адреса везде, пока не заработаете.Затем поэкспериментируйте с полностью определенными доменными именами или синхронизированными файлами / etc / hosts.

4 голосов
/ 29 мая 2014

У меня было что-то подобное в /etc/hosts:

127.0.0.1   localhost
127.0.1.1   <hostname>

Я изменил его, чтобы решить <hostname> на 127.0.0.1, и это, похоже, решило проблему.

127.0.0.1   localhost <hostname>
1 голос
/ 14 марта 2012

Большое спасибо @Robert J Berger за то, что он привел меня к ответу на тот же вопрос.У меня не было проблемы № 1, но у меня была проблема № 2 с сообщением сервера:

Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1

Однако, его ответ был сосредоточен на стороне «мастера», поэтому я подумал, что я »Расширю его своим собственным ответом.Мой DNS (используемый всеми машинами в кластере) разрешает «master», поэтому клиентское подключение к серверу не было проблемой (работало независимо от того, что «master» было только именем хоста, а не FQDN).[Я согласен с Робертом в том, что избегание модификаций / etc / hosts в конечном итоге является наиболее приемлемым решением.]

Моя проблема заключалась в подключении сервера к клиенту.Hbase использует имя хоста компьютера, чтобы разрешить IP-адрес для привязки внутренних коммуникаций, и оказалось, что у меня был этот набор на главном, а не на узлах.

Это было связано с тем, как / etc / hostsфайл строился на узлах регион-сервера по мере их выпуска.Ошибки сервера hbase исчезли, когда я изменил / etc / hosts на каждом узле с:

127.0.0.1    node-hostname

на:

<actual ip>  node-hostname

Теперь сервер Hbase правильно видит узлы и может создавать прокси длякаждый.

0 голосов
/ 14 марта 2013

Выполнить следующую команду

имя хоста sudo thehostnameyouwanttogiveformachine

редактировать файл / etc / hosts

put

актуальный ip thehostnameyouwanttogiveformachine

перезагрузите машину

и проверьте

...