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