【问题标题】:HBase Error - assignment of -ROOT- failureHBase 错误 - 分配 -ROOT- 失败
【发布时间】:2011-08-25 20:23:25
【问题描述】:

我刚刚从 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

【问题讨论】:

标签: database nosql hadoop hbase cloudera


【解决方案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。这些步骤解决了我的单服务器安装问题:

  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

【讨论】:

  • +1 其他答案并没有真正起作用,这似乎是最理智的
  • 和道格一样。这为我在 macox.8 上用自制的 hbase 修复了它。
【解决方案3】:

如果您发现自己无法编辑 /etc/hosts,请执行以下操作 解决方法也可以:

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

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

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

【讨论】:

    【解决方案4】:

    您的主机文件应如下所示

    #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 中找到

    问候 舒加

    【讨论】:

      【解决方案5】:

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

      相关sn-p:

      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】:

        如果您不愿意更改 /etc/hosts(因为 Ubuntu 使用了 entry there for a reason),这是另一个适用于我的解决方法。

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

        删除/etc/hosts 条目是恢复一个接口一个IP 假设的一种方法。用“真实”永久 IP 替换 /etc/hosts 中的 127.0.1.1 是另一种方法。最后,还有一个是新建一个接口:把这个放到/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),这没关系。

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-17
            • 1970-01-01
            • 1970-01-01
            • 2015-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多