【问题标题】:hbase cannot connect to hadoophbase 无法连接到 hadoop
【发布时间】:2012-05-07 09:34:08
【问题描述】:

我在伪分布式模式下运行一个 hdfs 实例,并试图在同一台服务器上创建另一个 hbase 实例连接到它。 hadoop中的日志很好,但是我在hbase的日志中经常出现连接失败

================================================ ====================================

2012-05-01 10:49:07,212 INFO org.apache.zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181
2012-05-01 10:49:07,213 WARN org.apache.zookeeper.ClientCnxn: Session 0x13708dc552d0001 for server null, unexpected error, closing socket connection and attempting reconnect
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.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119)

2012-05-01 10:49:08,882 INFO org.apache.zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181
2012-05-01 10:49:08,882 WARN org.apache.zookeeper.ClientCnxn: Session 0x13708dc552d0001 for server null, unexpected error, closing socket connection and attempting reconnect
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.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119)

================================================ ====================================

core-site.xml@hadoop的配置

<configuration>

<property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
</property>

</configuration>

hbase-site.xml@hbase的配置

<configuration>
<property>
   <name>hbase.rootdir</name>
   <value>hdfs://localhost:9000/hbase</value>
</property>
<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>
</configuration>

我也尝试将 localhost 替换为服务器的实际 ip,但得到了同样的错误。

【问题讨论】:

  • 看起来 ZooKeeper 有问题。

标签: hadoop hbase


【解决方案1】:
  • 首先,您需要确保您的hbase主节点正在运行,您可以使用jps进行检查。

如果没有运行,可以通过start-hbase.sh命令或者hbase master start运行。 然后通过其他命令检查其状态,如netstat -an | grep 9000

  • 其次,如果前面的方法不行,检查一下你的防火墙配置比如iptables和SELinux。 使用 sudo iptables -L 检查您的 iptables 配置。您可以在基于 redhat 的 linux 系统下通过sudo service iptables stop 命令禁用 iptables。

使用getenforce 检查SElinux 是否处于enforcing 模式。

  • 第三,检查系统配置,例如ssh

【讨论】:

    【解决方案2】:

    您需要将 $HBASE_HOME/bin/lib/hadoop-{{version}}core.jar 中的核心 hadoop jar 替换为 $HADOOP_HOME/hadoop-{{version}}core.jar 中的那个 当我尝试从运行正常的 hbase 0.90-xxx 安装 hbase 0.92 时遇到了同样的问题,我将旧 hbase 中的 hbase-env.sh 和 hbase-site.xml 替换为新的但忘记复制hadoop核心jar。

    【讨论】:

    • 我想我尝试过更换hadoop核心jar,结果发现用这种方法hadoop和hbase不能愉快地对话。我最终使用了 hadoop 1.0.0 和 hbase 0.92,它们具有一致的 hadoop 核心 jar。
    • 不,我的意思是在运行 Hadoop 的系统上,如果它正在运行,那么同一个 jar 需要进入 Hbase lib,以避免版本不兼容。所以在我的系统上,我在同一个节点上运行 hadoop 和 hbase。因此我提到了这种方式。另外,我刚刚将自己切换到使用 hbase-0.95 的 hadoop-1.0.1,效果很好。
    【解决方案3】:

    当我在配置中看到 localhost 时,我总是很怀疑。此外,当您使用 localhost 时,从您正在运行的主机以外的主机访问伪分布式系统中的任何服务变得非常困难(甚至不可能)。

    您确实说过您尝试了 IP 地址,但您可能想确保它是节点真正认为的 IP 地址。

    检查 Zookeeper 启动时的日志,看看它“认为”的 IP 地址是什么。应该有这样一行:

    2012-01-31 09:32:46,083 - INFO  [main:Environment@97] - Server environment:host.name=ip-10-8-127-58.ec2.internal
    

    然后使用 host.name 的值作为所有 Hadodop、HBase、Hive、Zookeeper 等需要主机名的配置文件中所有位置的值(假设它们都在您所说的同一台机器上) -分布式模式)

    您也没有在 hbase-site.xml 中显示您的 hbase.zookeeper.quorum 设置。这就是 hbase 了解 zookeeper 地址的地方

      <property>
        <name>hbase.zookeeper.quorum</name>
        <value>ip-10-8-127-58.ec2.internal</value>
      </property>
    

    【讨论】:

    • 感谢您的 cmets!正如您的示例 hbase-site.xml 所建议的那样,您的建议通常发生在 Amazon EC2 机器上设置 hadoop/hbase 时:-) 我的情况不同。未能让 hadoop 和 hbase 愉快地相互交谈仅仅是因为它们不共享相同的 hadoop 核心 jar 文件。因此,我强烈建议使用 hadoop-1.0.0 和 hbase-0.92 来设置 hbase 集群。这样,如果您在让他们与其他人交谈时遇到问题,至少您知道这不是由于版本不一致:-)
    【解决方案4】:

    我认为 Hbase 找不到 zookeeper quorum,你必须在 hbase-site.xml 中设置 hbase.zookeeper.quorum 属性。还要检查类路径是否设置正确,请查看此文档http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/package-summary.html#classpath

    【讨论】:

    • 我认为默认情况下zookeeper quorum是localhost,所以我认为我确实将它设置为伪分布式模式很好。但无论如何,我明确地将 zookeeper quorum 设置为我的本地主机名并将客户端端口设置为 2222。通过这些设置,我仍然遇到“连接被拒绝”的相同问题 :-(
    • 即使设置了 Zk 参数,如果您在日志中看到它尝试连接到 localhost/127.0.0.1:2181,这表明 Hbase 无法看到您在配置文件中所做的更改。检查我放置的链接中的类路径设置。
    • 不是设置zookeeper。这是我的 0.90 HBase 使用的是分支版本的 hadoop jar,它与 0.20.2 hadoop 版本不兼容。谁遇到这个问题,请考虑参考这个:webcache.googleusercontent.com/…
    猜你喜欢
    • 2014-12-04
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多