我竭力要建立一个HBase的分布式集群2个节点,一个是我的机器,一个是虚拟机,使用VirtualBox中的"仅主机"适配器.
我的问题是区域服务器(来自VM机器)无法连接到在主机上运行的Hbase主机.虽然在Hbase shell中我可以列出,创建表,...,在VM机器上的regionserver('slave'),日志总是显示
org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master. Retrying. Error was:
java.net.ConnectException: Connection refused
Run Code Online (Sandbox Code Playgroud)
以前,我已成功在此集群上设置Hadoop,HDFS和MapReduce,其中2个节点名为"master","slave","master"作为主节点,"master"和"slave"都作为从节点工作,这些绑定到VirtualBox的vboxnet0接口的名称(/ etc/hostname中的主机名不同).我还要为每个节点指定"slave.host.name"属性为"master"和"slave".
似乎'master'上的Hbase master始终使用'localhost'主机名运行,从slave机器,我无法使用'master'主机名telnet到hbase master.那么,有什么办法可以指定HBase的主人为"主"主机名的使用,我已经试过指定有关动物园管理员,硕士,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
Run Code Online (Sandbox Code Playgroud)
小智 5
@Infinity提供的答案似乎属于~0.9.4版本。
对于版本 1.1.4。
根据源代码
org.apache.hadoop.hbase.master.HMaster
Run Code Online (Sandbox Code Playgroud)
配置应该是:
<property>
<name>hbase.master.hostname</name>
<value>master.local</value>
<!-- master.local is the DNS name in my network pointing to hbase master -->
</property>
Run Code Online (Sandbox Code Playgroud)
设置该值后,Region Server就可以连接到HBase Master;但是,在我的环境中,区域服务器抱怨:
com.google.protobuf.ServiceException: java.net.SocketException: Invalid argument
Run Code Online (Sandbox Code Playgroud)
当我在所有节点上安装 oracle JDK 8 而不是 open-jdk-7 后,问题就消失了。
总之,这是我的解决方案:
使用 dns 名称服务器而不是设置 /etc/hosts,因为 hbase 对主机名非常挑剔,并且似乎需要 DNS 查找以及反向 DNS 查找。
将jdk升级到oracle 8
使用上面提到的设置项。
我的主机文件是这样的
127.0.0.1 本地主机
192.168.2.118 shashwat.machine.com shashwat
使您的主机文件如下:
127.0.0.1 本地主机
192.168.56.1 主控
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>
Run Code Online (Sandbox Code Playgroud)
如果您在任何地方使用 localhost,请将其删除并将其替换为“master”,这是主机文件中 namenode 的名称......
你还可以做一件事
sudo gedit /etc/主机名
默认情况下,这将打开 ubuntu 的主机名文件,因此将其设为 master。并重新启动您的系统。
对于 hbase 在conf目录中的“regionserver”文件中指定放置这些条目
主从
并重新启动一切。
| 归档时间: |
|
| 查看次数: |
19193 次 |
| 最近记录: |