13

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

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

看起来是根区域的问题。

所有这些都安装在运行 Ubuntu (Natty) 11 的 ext4 1TB 分区上。没有集群/其他盒子)。

任何帮助都会很棒!

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
4

7 回答 7

15

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

更多关于这里的解决方案:http: //blog.nemccarthy.me/ ?p=110

于 2011-06-30T13:19:39.173 回答
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。该行应如下所示:

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

  4. 重启 HBase

于 2012-04-17T14:38:24.953 回答
3

如果您发现自己处于无法编辑 /etc/hosts 的情况,以下解决方法也可以使用:

在 conf/hadoop-env.sh 添加以下行:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

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

于 2011-09-07T19:39:20.503 回答
1

如果您不愿意更改(因为 Ubuntu出于某种原因/etc/hosts将该条目放在那里 ),这是对我有用的另一种解决方法。

正如这篇文章所解释的,核心问题是环回接口绑定了多个 IP,而 hbase 假设只有一个。由此产生的不匹配导致主服务器认为区域服务器具有一个 IP (127.0.0.1),而实际上它正在侦听另一个 IP (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,您应该一切顺利。

如果您碰巧已经在使用eth0.1选择另一个插槽(即eth0.2),那应该没关系。

编辑@bcolyn的使用lo:0也适用于我,并且由于环回始终可用,因此非常出色。在这种情况下,该pre-up行也显得不必要。

于 2013-03-12T20:17:59.213 回答
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 中找到

问候舒佳

于 2011-09-25T11:09:41.207 回答
1

子接口的技巧对我有用,但我使用了环回接口而不是 eth0,因为 eth0 在我的机器(外部适配器)上并不总是可用,我希望它由 NetworkManager 管理(如果定义了 eth0.1,它将拒绝管理 eth0在 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  

当然

于 2013-04-10T19:23:09.573 回答
0

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

于 2014-07-09T13:10:22.540 回答