Точно такая же проблема здесь с HBase 1.1.3.
2 виртуальные машины (Ubuntu) в одной сети. Журналы показывают, что клиент может связаться с Zookeeper, но не с сервером HBase.
TL; DR: удалить следующую строку в /etc/hosts
на сервере ( server_hostame ):
127.0.1.1 server_hostname server_hostname
И добавьте это с 127.x.y.z
ip вашего сервера в (локальной) сети:
192.x.y.z server_hostname
Я перепробовал множество комбинаций на стороне клиента и сервера. В автономном режиме я не думаю, что есть лучший подход.
Не очень горжусь этим. Обидно иметь дело с конфигурацией сети и даже не предоставлять клиента оболочки HBase, способного удаленно подключаться к серверу (добро пожаловать в мир иллюзий Java ...)
На стороне сервера оставьте файлы conf/hbase-site.xml
пустыми. Вам не нужно помещать здесь конфигурацию Zookeeper, по умолчанию все в порядке.
То же самое для etc/regionservers
. Оставьте это с записью по умолчанию ( localhost ), потому что я не думаю, что в автономном режиме это действительно волнует (и я попытался вставить в нее server_hostname
и, конечно, это не работает).
На стороне клиента. Он должен знать сервер по имени хоста, если вы хотите разрешить его, поэтому снова добавьте запись в ваш /etc/hosts
файл клиента для сервера.
В качестве бонуса я даю вам свою sbt
конфигурацию и некоторый полный рабочий код для клиента, так как команда HBase, похоже, потратила бюджет на документацию в Вегасе за последние 4 года (опять же, добро пожаловать «Готовый бизнес» мир Java / Scala).
build.sbt
libraryDependencies ++= Seq(
...
"org.apache.hadoop" % "hadoop-core" % "1.2.1",
"org.apache.hbase" % "hbase" % "1.1.2",
"org.apache.hbase" % "hbase-client" % "1.1.2",
)
some_client_code.scala
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.{HTable, Put, HBaseAdmin}
import org.apache.hadoop.hbase.util.Bytes
val hbaseConf = HBaseConfiguration.create()
hbaseConf.set("hbase.zookeeper.quorum", "server_hostname")
HBaseAdmin.checkHBaseAvailable(hbaseConf)
val table = new HTable(hbaseConf, "my_hbase_table")
val put = new Put(Bytes.toBytes("row_key"))
put.add(Bytes.toBytes("cf"), Bytes.toBytes("colId1"), Bytes.toBytes("foo"))