Доступ к HBase, работающему в ВМ, с клиентом в хост-системе - PullRequest
6 голосов
/ 07 сентября 2011

Я пытаюсь записать некоторые данные в hbase с помощью клиентской программы

HBase @ Hadoop запускается в предварительно настроенной виртуальной машине из Cloudera @ ubuntu.

Клиент работает в системе, в которой размещена виртуальная машина, иработает клиент прямо в виртуальной машине.

Так что теперь я хочу использовать клиент вне виртуальной машины для доступа к серверам виртуальной машины

Я использую NAT.Чтобы иметь возможность доступа к серверам, таким как HBase Master, HUE..running на виртуальной машине, я настроил перенаправление портов в виртуальном окне: enter image description here

Таким образом, я могу получить доступ к обзорным сайтам HBase Master, HUE ..

Чтобы запустить клиент на серверах виртуальной машины, я создал hbase-site.xml с содержимым:

<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>9997</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>localhost:9999</value>
    </property>
</configuration>

Поэтому я ожидал, что переадресация работает:

Ошибкасообщения в журнале при запуске клиента выглядят так:

11/09/07 17:48:00 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
11/09/07 17:48:00 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181
11/09/07 17:48:01 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused: no further information
    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)
11/09/07 17:48:01 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181
11/09/07 17:48:01 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.SocketException: Address family not supported by protocol family: connect
    at sun.nio.ch.Net.connect(Native Method)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:500)
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077)
11/09/07 17:48:03 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181
11/09/07 17:48:04 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused: no further information
    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)
11/09/07 17:48:04 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181
11/09/07 17:48:04 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.SocketException: Address family not supported by protocol family: connect
    at sun.nio.ch.Net.connect(Native Method)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:500)
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077)
11/09/07 17:48:05 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181

Правильный журнал подключений (при запуске клиента непосредственно в виртуальной машине) выглядит так:

11/09/07 09:05:29 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
11/09/07 09:05:29 INFO zookeeper.ClientCnxn: Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x132449d36df0006, negotiated timeout = 40000

Так я вижу толькотеперь в строке журнала перед первой проблемой, что URL-адрес соединения не корректен, так как порт правильно перенаправлен, но IP-адрес все еще является локальным, а не 10.0.2.15, как настроено в настройках переадресации портов:

Opening socket connection to server localhost/127.0.0.1:2181

Единственный совет, который я обнаружил, это отключение IPV6 -> отключено в host (win7) и vm (Ubuntu) и проверка порта -> они корректно перенаправлены

Кто-нибудь знает?

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

Просто для того, чтобы придать дополнительную ценность пользователям, читающим это, вот решение:

Could not resolve the DNS name of cloudera-vm

Чтобы исправить это, я просто добавил в C: \ Windows \ System32 \ drivers \ etc \ hosts:

192.168.56.101  cloudera-vm

Таким образом, всякий раз, когда используется cloudera-vm, он преобразуется в соответствующий IP.Виртуальная машина теперь работает в режиме Host-Only-Network и назначена для 192.168.56.101.Так что переадресация портов не требуется.

Только для сравнения:

hbase-site.xml

<configuration>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>cloudera-vm</value>
  </property>
</configuration>

persistence.xml

<persistence
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">

    <persistence-unit name="hbase-addressbook"
        transaction-type="RESOURCE_LOCAL">

        <properties>
            <property name="datanucleus.ConnectionURL" value="hbase:cloudera-vm" />
            <property name="datanucleus.ConnectionUserName" value="" />
            <property name="datanucleus.ConnectionPassword" value="" />
            <property name="datanucleus.autoCreateSchema" value="true" />
            <property name="datanucleus.validateTables" value="false" />
            <property name="datanucleus.Optimistic" value="false" />
            <property name="datanucleus.validateConstraints" value="false" />
        </properties>
    </persistence-unit>
</persistence>

Послечто я получил другую ошибку (соединение было отклонено, хотя все строки подключения были правильными), поэтому я искал причину в течение нескольких дней.

Решением было отключить IPV6 Ubuntu, работающего на виртуальной машине, добавив в файл следующее:/etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

После перезагрузки все подключается и работает правильно:)

0 голосов
/ 20 марта 2012

Вы пробовали простое:

<property name="connectionURL" value="hbase:master.standalone.hostname:60000"/>
0 голосов
/ 18 ноября 2011

Я думаю, что вы можете четко настроить конфигурацию в коде, например, HbaseConfiguration conf = HbaseConfiguration.create ();conf.set ("hbase.zookeeper.quorum", "ubuntu1, ubuntu2");... может быть, поможет вам ..

...