HBase错误 - 分配-ROOT-失败

时间:2011-05-15 10:05:53

标签: database nosql hadoop hbase cloudera

我刚刚从cloudera安装了hadoop和hbase(3)但是当我尝试去http://localhost:60010时,它只是坐在那里不断加载。

我可以很好地访问regionserver - http://localhost:60030 ...查看主hbase服务器日志,我可以看到以下内容。

看起来像是根区域的问题。

所有这些都安装在运行Ubuntu(Natty)的ext4 1TB分区上.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 个答案:

答案 0 :(得分:15)

修复了发现此问题的其他人的问题。主机文件(/ etc / hosts)有问题。需要删除与127.0.1.1 COMPNAME相关的条目 - 只需在此行前放置一个哈希(#),然后重新启动所有hadoop和hbase服务。

有关此解决方案的更多信息:http://blog.nemccarthy.me/?p=110

答案 1 :(得分:5)

根据@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地址,以便它使用您的LAN 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

答案 2 :(得分:3)

如果您发现自己处于无法编辑/ etc / hosts的情况,请执行以下操作 解决方法也有效:

在conf / hadoop-env.sh中

添加以下行:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

(删除编辑,作为单独的答案移动)

答案 3 :(得分:1)

您的主机文件应该如下所示

#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

中找到

此致 舒亚

答案 4 :(得分:1)

如果你不愿意改变/etc/hosts(因为Ubuntu放了entry there for a reason),这是另一个为我工作的解决办法。

正如this post所解释的,核心问题是环回接口有多个绑定到它的IP,而hbase假设只有一个。由此产生的不匹配导致主服务器认为区域服务器有一个IP(127.0.0.1),当它真正监听另一个(127.0.1.1,绑定到主机声明的FQDN的IP。)

删除/etc/hosts条目是恢复单接口一IP假设的一种方法。用“真正的”永久IP替换127.0.1.1中的/etc/hosts是另一个。最后,另一个是创建一个新界面:将其放在/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&amp;你应该好好去。

如果您恰好已经在使用eth0.1选择另一个广告位(即eth0.2),则无关紧要。

编辑@bcolyn使用lo:0也适用于我,因为环回始终可用,所以效果更好。在这种情况下,pre-up行似乎也没必要。

答案 5 :(得分:1)

带有子接口的技巧对我有用,但是我使用了loopback接口而不是eth0,因为eth0在我的机器(外部适配器)上并不总是可用,我希望它由NetworkManager管理(如果eth0,则拒绝管理eth0)。 1在ubuntu 13.04上的/ etc / network / interfaces中定义

相关摘要:

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

除常规

auto lo
iface lo inet loopback  

当然

答案 6 :(得分:0)

在主机文件中将主机地址从 127.0.1.1 更改为 127.0.0.1