0

我在伪分布式模式下运行一个 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>

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

4

4 回答 4

1

您需要将 $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。

于 2012-05-06T16:48:27.083 回答
1
  • 首先,您需要确保您的 hbase 主节点正在运行,您可以使用jps来检查。

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

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

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

  • 三、检查系统配置,例如ssh等。
于 2012-05-01T21:01:34.797 回答
1

当我在配置中看到 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>
于 2012-05-07T01:34:08.980 回答
0

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

于 2012-05-01T15:33:04.973 回答