Hbase:如何指定Hbase主机的主机名

我努力设置一个带有2个节点的Hbase分布式集群,一个是我的机器,另一个是虚拟机,使用VirtualBox中的“仅主机”适配器。

我的问题是区域服务器(来自VM机器)无法连接到主机上运行的Hbase主机。 虽然在Hbase shell中,我可以在VM机器('从属')上的regionserver中创建表,...,日志始终显示

org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master.      Retrying. Error was:
java.net.ConnectException: Connection refused

以前,我已经在这个集群上成功设置了Hadoop,HDFS和MapReduce,其中2个节点命名为'master','slave','master'为主节点,'master'和'slave'都作为从节点,这些节点名称绑定到VirtualBox的vboxnet0接口(/ etc / hostname中的主机名是不同的)。 我还将每个节点的“slave.host.name”属性指定为“主”和“从属”。

看起来,'master'上的Hbase master始终以'localhost'主机名从slave机器运行,我无法使用'master'主机名telnet到hbase主机。 那么是否有任何方法可以将Hbase master的主机名用作'master',我已经试过指定一些关于ZooKeeper,Master,RegionServer的DNS接口的属性来使用主从设备之间的内部接口,但它仍然不能工作。

/ etc / hosts都是这样的

127.0.0.1   localhost
127.0.0.1   ubuntu.mymachine

# For Hadoop
192.168.56.1 master
192.168.56.101 slave

# 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

我的主机文件就像

127.0.0.1 localhost

192.168.2.118 shashwat.machine.com shashwat

使您的主机文件如下所示:

127.0.0.1 localhost

对于Hadoop

主人

192.168.56.101奴隶

并在hbase conf中输入以下条目:

<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
<description>The host and port that the HBase master runs at.</description>
</property>
<property>
<name>hbase.regionserver.port</name>
<value>60020</value>
<description>The host and port that the HBase master runs at.</description>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/cluster/Hadoop/hbase-0.90.4/temp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.
</description>
</property>

如果您在任何地方使用localhost,请将其替换为您的主机文件中名称为namenode的“master”。

还有一件事你可以做

sudo gedit / etc / hostname

这将通过默认打开主机名文件ubuntu将在那里,使它成为主人。 并重新启动您的系统。

对于hbase,在conf目录下的“regionserver”文件中指定这些条目

主从

并重新启动一切。


@Infinity提供的答案似乎属于版本0.9.4。

对于1.1.4版本。

根据源代码

org.apache.hadoop.hbase.master.HMaster

配置应该是:

  <property>
    <name>hbase.master.hostname</name>
    <value>master.local</value>
    <!-- master.local is the DNS name in my network pointing to hbase master -->
  </property>

设置此值后,区域服务器可以连接到hbase主机; 然而,在我的环境中,该地区服务器抱怨:

com.google.protobuf.ServiceException: java.net.SocketException: Invalid argument

在我的所有节点上安装Oracle JDK 8而不是open-jdk-7后,问题消失了。

所以最后,这里是我的解决方案:

  • 使用DNS名称服务器而不是设置/ etc / hosts,因为hbase对主机名非常挑剔,似乎需要DNS查找以及反向DNS查找。

  • 升级jdk到oracle 8

  • 使用上面提到的设置项目。


  • 有两件事为我解决了这类问题:

    1)删除所有“localhost”名称,只有127.0.0.1指向hmaster节点的名称。

    2)在hbase主节点上运行“hostname X”,以确保主机名与/ etc / hosts中的内容匹配。

    不是网络专家,我不能说为什么这很重要,但它是:)

    链接地址: http://www.djcxy.com/p/58097.html

    上一篇: Hbase: How to specify hostname for Hbase master

    下一篇: how do I compute a weighted moving average using pandas