Ошибка HBase - назначение ошибки -ROOT- - PullRequest
13 голосов
/ 15 мая 2011

Я только что установил hadoop и hbase из cloudera (3), но когда я пытаюсь перейти на http://localhost:60010, он просто постоянно загружается.

Я могу нормально добраться до сервера региона -http://localhost:60030... Глядя на журналы главного сервера hbase, я вижу следующее.

Похоже, проблема с корневой областью.

Все это установлено в разделе ext4 емкостью 1 ТБ, работающем под управлением Ubuntu (Natty) 11. Нет кластера / других блоков).

Любая помощь будет отличной!

11/05/15 19:58:27 WARN master.AssignmentManager: Failed assignment of -ROOT-,,0.70236052 to serverName=localhost,60020,1305452402149, load=(requests=0, regions=0, usedHeap=24, maxHeap=995), trying to assign elsewhere instead; retry=0
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to /127.0.0.1:60020 after attempts=1
    at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:355)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:957)
    at org.apache.hadoop.hbase.master.ServerManager.getServerConnection(ServerManager.java:606)
    at org.apache.hadoop.hbase.master.ServerManager.sendRegionOpen(ServerManager.java:541)
    at org.apache.hadoop.hbase.master.AssignmentManager.assign(AssignmentManager.java:901)
    at org.apache.hadoop.hbase.master.AssignmentManager.assign(AssignmentManager.java:730)
    at org.apache.hadoop.hbase.master.AssignmentManager.assign(AssignmentManager.java:710)
    at org.apache.hadoop.hbase.master.AssignmentManager$TimeoutMonitor.chore(AssignmentManager.java:1605)
    at org.apache.hadoop.hbase.Chore.run(Chore.java:66)
Caused by: java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:408)
    at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:328)
    at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:883)
    at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:750)
    at org.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:257)
    at $Proxy6.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:419)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:393)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:444)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:349)
    ... 8 more
11/05/15 19:58:27 WARN master.AssignmentManager: Unable to find a viable location to assign region -ROOT-,,0.70236052

Ответы [ 7 ]

15 голосов
/ 30 июня 2011

Исправлена ​​эта проблема для всех, кто находит это.Была проблема с файлом хоста (/ etc / hosts).Необходимо удалить записи, относящиеся к 127.0.1.1 COMPNAME - просто поместите хеш (#) перед этой строкой, а затем перезапустите все службы hadoop и hbase.

Подробнее о решении здесь: http://blog.nemccarthy.me/?p=110

5 голосов
/ 17 апреля 2012

Согласно @Manav:

Если вы окажетесь в ситуации, когда вы не можете редактировать / etc / hosts, следующий > обходной путь также будетработа:

в conf / hadoop-env.sh добавьте следующую строку:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

Я использую Ubuntu 11.10 (Oneiric) и HBase 0.92.1.Эти шаги исправили мою проблему для установки на одном сервере:

  1. Измените /etc/hosts: измените IP-адрес, связанный с именем хоста, чтобы он использовал IP-адрес вашей локальной сети вместо 127.0.0.1
  2. Открыть <HBASE_DIR>/conf/hbase-env.sh
  3. изменить HBASE_OPTS, добавить -Djava.net.preferIPv4Stack=true.Строка должна выглядеть следующим образом:

    export HBASE_OPTS = "- XX: + UseConcMarkSweepGC -Djava.net.preferIPv4Stack = true"

  4. Перезапустить HBase

3 голосов
/ 07 сентября 2011

Если вы оказались в ситуации, когда вы не можете редактировать / etc / hosts, то также будет работать следующий обходной путь:

в conf / hadoop-env.sh добавьте следующую строку:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

(удалено редактирование, перенесено как отдельный ответ)

1 голос
/ 10 апреля 2013

Уловка с подынтерфейсом сработала для меня, но я использовал интерфейс обратной связи, а не eth0, потому что eth0 не всегда доступен на моей машине (внешний адаптер), и я хочу, чтобы он управлялся NetworkManager (который отказывается управлять eth0, если eth0.1 определяется в / etc / network / interfaces на Ubuntu 13.04)

Соответствующий фрагмент:

auto lo:0
iface lo:0 inet static
address 127.0.1.1
netmask 255.255.255.0

в дополнение к обычному

auto lo
iface lo inet loopback  

, конечно

1 голос
/ 13 марта 2013

Вот еще один обходной путь, который работает для меня, если вы не хотите изменять /etc/hosts (поскольку Ubuntu поместила эту запись туда по причине ).

Как объясняет этот пост , основная проблема заключается в том, что к интерфейсу обратной связи привязано несколько IP-адресов, в то время как hbase предполагает, что будет только один. Полученное несоответствие заставляет мастера думать, что у сервера региона есть один IP (127.0.0.1), когда он действительно прослушивает другой (127.0.1.1, IP, связанный с объявленным полным доменным именем хоста).

Удаление записи /etc/hosts является одним из способов восстановления предположения «один интерфейс - один IP». Замена 127.0.1.1 в /etc/hosts на «реальный» постоянный IP - это другое. Наконец, еще один способ - создать новый интерфейс: поместите это внизу /etc/network/interfaces:

# Bind an interface solely for the default host FQDN IP, to fix reverse dns
auto eth0.1
iface eth0.1 inet static
pre-up ip link add eth0.1 name eth0.1 type bridge
address 127.0.1.1
netmask 255.255.255.0

После этого вы сможете sudo ifup eth0.1 и увидеть его в ifconfig. Перезапустите hbase, и у вас все получится.

Если вы уже используете eth0.1 для выбора другого слота (т.е. eth0.2), это не должно иметь значения.

РЕДАКТИРОВАТЬ : @ bcolyn Использование lo:0 также работает для меня, и лучше, так как петля всегда будет доступна. В этом случае строка pre-up также представляется ненужной.

1 голос
/ 25 сентября 2011

Ваш файл hosts должен выглядеть следующим образом

#127.0.0.1  localhost
#127.0.1.1  ubuntu.ubuntu-domain    ubuntu
192.168.2.100   ubuntu
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Этот файл находится в / etc / hosts

С уважением Шуя

0 голосов
/ 09 июля 2014

В вашем файле hosts изменить адрес хоста с 127.0.1.1 на 127.0.0.1

...