Ошибка HBase - назначение -ROOT-failure
Я только что установил hadoop и hbase из cloudera (3), но когда я попытаюсь перейти на http://localhost:60010, он просто сидит там постоянная загрузка.
Я могу получить доступ к областному серверу отлично - http://localhost:60030... Посмотрев на журналы сервера master hbase, я вижу следующее.
Похож на проблему с корневым регионом.
Все это устанавливается на раздел ext4 1TB, на котором запущен 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
Ответы
Ответ 1
Исправлена ошибка для всех, кто это нашел. Возникла проблема с файлом хоста (/etc/hosts). Необходимо удалить записи, относящиеся к 127.0.1.1 COMPNAME - просто поместите хэш (#) перед этой строкой, а затем перезапустите все службы hadoop и hbase.
Подробнее о решении здесь: http://blog.nemccarthy.me/?p=110
Ответ 2
В соответствии с @Manav:
Если вы оказались в ситуации, когда вы не можете редактировать /etc/hosts, также будет работать следующее обходное решение:
в conf/hadoop-env.sh добавьте следующую строку:
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
Я использую Ubuntu 11.10 (Oneiric) и HBase 0.92.1. Эти шаги исправили мою проблему для установки моего сервера:
- Отредактируйте
/etc/hosts
: измените IP-адрес, связанный с именем хоста, чтобы он использовал ваш IP-адрес локальной сети вместо 127.0.0.1
- Открыть
<HBASE_DIR>/conf/hbase-env.sh
-
изменить HBASE_OPTS
, добавить -Djava.net.preferIPv4Stack=true
. Строка должна выглядеть так:
export HBASE_OPTS = "- XX: + UseConcMarkSweepGC -Djava.net.preferIPv4Stack = true"
-
Перезапустить HBase
Ответ 3
Если вы оказались в ситуации, когда вы не можете редактировать /etc/hosts, следующее
обходной путь также будет работать:
в conf/hadoop-env.sh добавьте следующую строку:
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
(удалено редактирование, перемещено как отдельный ответ)
Ответ 4
ваш файл 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
Отношения
Shuja
Ответ 5
Вот еще одна работа, которая работает для меня, если вы не хотите изменять /etc/hosts
(поскольку Ubuntu помещает туда там по какой-либо причине).
Как этот пост объясняет, основная проблема заключается в том, что интерфейс loopback имеет несколько привязанных к нему IP-адресов, в то время как hbase предполагает, что будет только один, Полученное несоответствие заставляет хозяина думать, что сервер региона имеет один IP (127.0.0.1), когда он действительно прослушивает другое (127.0.1.1, IP привязан к объявленному FQDN хосту.)
Удаление записи /etc/hosts
является одним из способов восстановления однофакторного подхода. Замена 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
), это не имеет значения.
EDIT: @bcolyn использование lo:0
также работает для меня и является превосходным, поскольку loopback всегда будет доступен. В этом случае строка pre-up
также не нужна.
Ответ 6
Трюк с subinterface работал у меня, но я использовал интерфейс loopback, а не 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
конечно
Ответ 7
В вашем файле hosts для изменения адреса хоста от 127.0.1.1 до 127.0.0.1