Hbase: как указать имя хоста для мастера Hbase - PullRequest
8 голосов
/ 08 марта 2012

Я изо всех сил пытаюсь настроить распределенный кластер Hbase с 2 узлами, один - моя машина, а другой - виртуальная машина с использованием адаптера «только для хоста» в VirtualBox.

Моя проблема в том, что региональный сервер (с компьютера с виртуальной машиной) не может подключиться к мастеру Hbase, работающему на хост-компьютере. Хотя в оболочке Hbase я могу перечислить, создать таблицу, ..., в regionserver на машине VM («ведомый»), журнал всегда показывает

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

Ранее я успешно настроил Hadoop, HDFS и MapReduce в этом кластере с двумя узлами, названными «master», и «slave», «master» в качестве master-узла, а «master» и «slave» работают в качестве slave узлы, эти имена связаны с интерфейсом vboxnet0 VirtualBox (имена хостов в / etc / hostname разные). Я также указываю свойство "slave.host.name" для каждого узла как "master" и "slave".

Кажется, что мастер Hbase на 'master' всегда запускается с именем хоста 'localhost', с подчиненного компьютера я не могу подключиться к мастеру hbase с hostname 'master'. Итак, есть ли способ указать имя хоста для Hbase master в качестве «master», я попытался указать некоторые свойства интерфейса DNS для ZooKeeper, Master, RegionServer, чтобы использовать внутренний интерфейс между master и slave, но он все равно не работает вообще .

/ 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

Ответы [ 4 ]

3 голосов
/ 25 мая 2016

Ответ, предоставленный @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

  • использовать элемент настройки, упомянутый выше.

2 голосов
/ 04 мая 2012

Мой файл хоста похож на

127.0.0.1 localhost

192.168.2.118 shashwat.machine.com shashwat

создайте файл хостов следующим образом:

127.0.0.1 localhost

Для Hadoop

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>

Если вы где-нибудь используете localhost, удалите его и замените на «master», который является именем для namenode в вашем хост-файле ....

еще одна вещь, которую вы можете сделать

sudo gedit / etc / hostname

это откроет файл имени хоста, по умолчанию там будет Ubuntu, поэтому сделайте его мастером. и перезагрузите вашу систему.

Для hbase укажите в файле "regionserver" внутри conf dir поместите эти записи

мастер ведомый

и перезапустите все.

0 голосов
/ 03 декабря 2015

В большинстве случаев ошибка исходит от Zookeeper, который отправляет неправильное имя хоста.

Вы можете проверить, что Zookeeper отправляет как главный хост HBase:

Найти папку Zookeeper bin:

bin/zkCli.sh -server 127.0.0.1:2181
get /hbase/master

Это должно дать вам главный IP HBase, который отвечает Zookeeper, поэтому этот IP должен быть доступен.

0 голосов
/ 02 октября 2013

Есть две вещи, которые исправляют этот класс проблем для меня:

1) Удалите все имена "localhost", только 127.0.0.1 указывает на имя узла hmaster.

2) запустите "hostname X" на вашем главном узле hbase, чтобы убедиться, что имя хоста совпадает с тем, что находится в /etc/hosts.

Не могу быть экспертом по сетям, я не могу сказатьпочему это важно, но это так :)

...