it-swarm-id.com

Klien Hbase tidak dapat terhubung dengan server Hbase jauh

saya telah menulis kelas klien hbase berikut untuk server jauh:

System.out.println("Hbase Demo Application ");

            // CONFIGURATION

                // ENSURE RUNNING
            try {
                HBaseConfiguration config = new HBaseConfiguration();
                config.clear();
                config.set("hbase.zookeeper.quorum", "192.168.15.20");
                config.set("hbase.zookeeper.property.clientPort","2181");
                config.set("hbase.master", "192.168.15.20:60000");
                //HBaseConfiguration config = HBaseConfiguration.create();
    //config.set("hbase.zookeeper.quorum", "localhost");  // Here we are running zookeeper locally
                HBaseAdmin.checkHBaseAvailable(config);


                System.out.println("HBase is running!");
            //  createTable(config);    
                //creating a new table
                HTable table = new HTable(config, "mytable");
                System.out.println("Table mytable obtained ");  
                addData(table);
            } catch (MasterNotRunningException e) {
                System.out.println("HBase is not running!");
                System.exit(1);
            }catch (Exception ce){ ce.printStackTrace();

itu melemparkan beberapa pengecualian:

Oct 17, 2011 1:43:54 PM org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation getMaster
INFO: getMaster attempt 0 of 1 failed; no more retrying.
Java.net.ConnectException: Connection refused
    at Sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at Sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.Java:567)
    at org.Apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.Java:206)
    at org.Apache.hadoop.net.NetUtils.connect(NetUtils.Java:404)
    at org.Apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.Java:328)
    at org.Apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.Java:883)
    at org.Apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.Java:750)
    at org.Apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.Java:257)
    at $Proxy4.getProtocolVersion(Unknown Source)
    at org.Apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.Java:419)
    at org.Apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.Java:393)
    at org.Apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.Java:444)
    at org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.Java:359)
    at org.Apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.Java:89)
    at org.Apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.Java:1215)
    at com.ifkaar.hbase.HBaseDemo.main(HBaseDemo.Java:31)
HBase is not running!

dapatkah Anda memberi tahu saya mengapa ada pengecualian, apa yang salah dengan kode dan cara mengatasinya.

14
Ali Raza

Masalah ini terjadi karena Anda memiliki file host server Hbase. Anda hanya perlu mengedit file/etc/hosts server hbase Anda. Hapus entri localhost dari file itu dan letakkan entri localhost di depan hbase server ip.

Misalnya, file /etc/hosts server hbase Anda tampak seperti ini:

127.0.0.1 localhost
192.166.66.66 xyz.hbase.com hbase

Anda harus mengubahnya seperti ini dengan menghapus localhost:

# 127.0.0.1 localhost # line commented out
192.166.66.66 xyz.hbase.com hbase localhost # note: localhost added here

Ini karena ketika mesin jarak jauh menanyakan mesin server hbase di mana HMaster berjalan, ia memberitahukan bahwa mesin itu berjalan di localhost berarti pada mesin ini. Jadi jika kita terus menempatkan entri 127.0.01 maka server hbase mengembalikan alamat ini dan mesin jarak jauh mulai menemukan HMaster pada mesinnya sendiri. dan ketika kita mengubah dan menempatkannya di depan hbase ip maka semuanya akan menjadi sempurna :)

21
khan

Saya setuju .. HBase sangat sensitif terhadap konfigurasi/etc/hosts .. Saya harus mengatur properti binding zeekeeper di hbase-site.xml dengan benar agar kode Java yang disebutkan di atas berfungsi ... Sebagai contoh: Saya harus mengaturnya sebagai berikut:

{property}
  {name}hbase.zookeeper.quorum{/name}
  {value}www.remoterg12.net{/value}      {!-- this is the externally accessible domain --}
{/property}
{property}
  {name}hbase.zookeeper.property.clientPort{/name}
  {value}2181{/value}              {!-- everything needs to be externally accessible --}
{/property}
{property}
  {name}hbase.master.info.port{/name}    {!--   http://www.remoterg12.net:60010/ --}
  {value}60010{/value}
{/property}
{property}
  {name}hbase.master.info.bindAddress{/name}
  {value}www.remoterg12.net{/value}      {!-- Use this to access the GUI console, --}
{/property}

Remote GUI akan memberi Anda gambaran yang jelas tentang Binding Domains .. Misalnya, properti [HBase Master] di "GUI Web console" harus seperti ini: www.remoterg12.net:60010 (Seharusnya TIDAK menjadi localhost : 60010) ... DAN YA !!, saya memang harus bermain-main dengan/etc/hosts tepat karena saya tidak ingin mengacaukan konfigurasi Apache yang ada :-)

2
Shawn Brito

Saya tahu sudah terlambat untuk menjawab pertanyaan ini, tetapi saya ingin berbagi cara menyelesaikan masalah yang sama.

Saya memiliki masalah yang sama dan saya mencoba untuk mengatur kuorum penjaga kebun binatang dari program Java dan juga mencoba melalui CLI tetapi tidak satupun dari mereka yang bekerja.

Saya menggunakan CDH 5.7.7 dengan HBase versi 1.1.0 Akhirnya saya harus mengekspor beberapa konfigurasi ke classpath Hadoop untuk memperbaiki masalah ini. Berikut adalah konfigurasi yang telah saya ekspor.

export HADOOP_CLASSPATH=/etc/hadoop/conf:/usr/share/cmf/lib/cdh5/hbase-protocol-0.98.1-cdh5.5.0.jar:/etc/hbase/conf:/driven/conf

Semoga ini membantu.

0

Persis masalah yang sama di sini dengan HBase 1.1.3. 2 mesin virtual (Ubuntu) di jaringan yang sama. Log menunjukkan bahwa klien dapat mencapai Zookeeper tetapi bukan server HBase.

TL; DR: hapus baris berikut di /etc/hosts pada server ( server_hostame ):

127.0.1.1 server_hostname server_hostname

Dan tambahkan yang ini dengan 127.x.y.z ip server Anda di jaringan (lokal):

192.x.y.z server_hostname

Saya mencoba banyak kombinasi di sisi klien dan server. Dalam mode mandiri saya tidak berpikir ada pendekatan yang lebih baik. Tidak terlalu bangga dengan itu. Sangat disayangkan harus mengacaukan konfigurasi jaringan dan bahkan tidak menyediakan klien HBase Shell yang dapat terhubung dari jarak jauh ke server (selamat datang di dunia ilusi Java ...)

Di sisi server, biarkan file conf/hbase-site.xml kosong. Anda tidak perlu meletakkan konfigurasi Zookeeper di sini, standarnya baik-baik saja. Sama untuk etc/regionservers. Biarkan dengan entri default ( localhost ) karena saya tidak berpikir dalam mode mandiri itu benar-benar peduli (dan saya mencoba memasukkan server_hostname di dalamnya dan tentu saja ini tidak berfungsi).

Di sisi klien, Ia harus mengetahui server dengan nama host jika Anda ingin mengatasinya jadi tambahkan lagi entri di file klien /etc/hosts Anda untuk server.

Sebagai bonus, saya memberikan Anda konfigurasi sbt saya dan beberapa kode complete working untuk klien karena tim HBase tampaknya telah menghabiskan anggaran dokumentasi di Vegas selama 4 tahun terakhir (sekali lagi, selamat datang di dunia «Bisnis siap» dari 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"))
0
Stan

Masalah yang sama dapat diselesaikan dengan mengedit file conf/regionservers di direktori hbase untuk menambahkan server Hbase (Remote) di dalamnya. Maka tidak perlu mengubah file etc/hosts

Setelah mengedit conf/regionservers akan terlihat seperti:

localhost  
ip address of the remote hbase server

misalnya

localhost              
10.132.258.366
0
Georgy B Abraham