복붙노트

[HADOOP] Hbase 클라이언트가 원격 Hbase 서버에 연결할 수 없습니다.

HADOOP

Hbase 클라이언트가 원격 Hbase 서버에 연결할 수 없습니다.

원격 서버에 대해 다음 hbase 클라이언트 클래스를 작성했습니다.

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();

그것은 약간의 예외를 던지고있다 :

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!

예외를 던지는 이유와 코드의 문제점 및 해결 방법을 제게 말해 줄 수 있습니까?

해결법

  1. ==============================

    1.이 문제는 HBase 서버의 호스트 파일로 인해 발생합니다. HBase 서버의 / etc / hosts 파일을 편집하기 만하면됩니다. 해당 파일에서 localhost 항목을 제거하고 localhost 항목을 HBase 서버 IP 앞에 놓습니다.

    이 문제는 HBase 서버의 호스트 파일로 인해 발생합니다. HBase 서버의 / etc / hosts 파일을 편집하기 만하면됩니다. 해당 파일에서 localhost 항목을 제거하고 localhost 항목을 HBase 서버 IP 앞에 놓습니다.

    예를 들어, HBase 서버의 / etc / hosts 파일은 다음과 같습니다 :

    127.0.0.1 localhost
    192.166.66.66 xyz.hbase.com hbase
    

    localhost를 제거하여 다음과 같이 바꿔야합니다.

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

    이는 원격 시스템이 HMaster가 실행중인 hbase 서버 시스템에 요청할 때 localhost에서 실행 중임을 알리기 때문입니다. 따라서 항목이 127.0.0.1이면 HBase 서버가이 주소를 반환하고 원격 컴퓨터가 자신의 컴퓨터에서 HMaster를 찾기 시작합니다 (로컬). HBase 서버 IP로 변경하면 모든 것이 잘 작동합니다 :)

  2. ==============================

    2.나는 동의한다. HBase는 / etc / hosts 설정에 매우 민감하다. hiberation-site.xml에 zeekeeper bindings 속성을 올바르게 설정해야한다. 위에서 언급 한 Java 코드가 제대로 작동하려면 ... 예를 들어 : 다음과 같이 설정해야합니다.

    나는 동의한다. HBase는 / etc / hosts 설정에 매우 민감하다. hiberation-site.xml에 zeekeeper bindings 속성을 올바르게 설정해야한다. 위에서 언급 한 Java 코드가 제대로 작동하려면 ... 예를 들어 : 다음과 같이 설정해야합니다.

    {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}
    

    원격 GUI는 Binding Domains에 대한 명확한 그림을 제공합니다. 예를 들어, "GUI 웹 콘솔"의 [HBase Master] 속성은 다음과 같아야합니다. www.remoterg12.net:60010 (localhost가 아니어야합니다. : 60010) ... 그리고 예 !!! / etc / hosts를 가지고 놀아 보았습니다. 기존 Apache 구성을 엉망으로 만들고 싶지 않았기 때문에 :-)

  3. ==============================

    3.동일한 문제는 Hbase 디렉토리에 conf / regionservers 파일을 편집하여 Hbase 서버 (원격)를 추가함으로써 해결할 수 있습니다. 그런 다음 etc / hosts 파일을 변경할 필요가 없습니다.

    동일한 문제는 Hbase 디렉토리에 conf / regionservers 파일을 편집하여 Hbase 서버 (원격)를 추가함으로써 해결할 수 있습니다. 그런 다음 etc / hosts 파일을 변경할 필요가 없습니다.

    conf / regionservers를 편집 한 후 다음과 같이 표시됩니다 :

    localhost  
    ip address of the remote hbase server
    

    localhost              
    10.132.258.366
    
  4. ==============================

    4.HBase 1.1.3에서 정확히 같은 문제가 발생합니다. 2 개의 가상 머신 (Ubuntu)이 동일한 네트워크에 있습니다. 로그는 클라이언트가 사육사에게 접근 할 수 있지만 HBase 서버에는 접근 할 수 없음을 보여줍니다.

    HBase 1.1.3에서 정확히 같은 문제가 발생합니다. 2 개의 가상 머신 (Ubuntu)이 동일한 네트워크에 있습니다. 로그는 클라이언트가 사육사에게 접근 할 수 있지만 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 셸 클라이언트조차 제공하지 않는 것은 수치 스럽습니다 (자바 세계에 오신 것을 환영합니다 ...)

    서버 측에서는 conf / hbase-site.xml 파일을 비워 두십시오. Zookeeper 구성을 여기에 넣지 않아도됩니다. 기본값은 정상입니다. etc / regionservers와 동일합니다. 내가 standalone 모드에서 정말로 신경 쓰지 않기 때문에 기본 엔트리 (localhost)로 남겨 둡니다. (그리고 나는 server_hostname을 넣으려고했으나 물론 작동하지 않습니다).

    클라이언트 측에서는 호스트 이름으로 서버를 알아야만 해결할 수 있으므로 다시 서버의 / etc / hosts 클라이언트 파일에 항목을 추가하십시오.

    HBase 팀이 지난 4 년간 라스베가스에서 문서 예산을 소비 한 것으로 보인 보너스로 저는 고객에게 내 sbt 구성 및 일부 완전한 작업 코드를 제공합니다 (다시 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"))
    
  5. ==============================

    5.나는이 질문에 답하기에는 너무 늦었지만 비슷한 문제를 해결할 수있는 방법을 공유하고 싶습니다.

    나는이 질문에 답하기에는 너무 늦었지만 비슷한 문제를 해결할 수있는 방법을 공유하고 싶습니다.

    나는 같은 문제가 있었고 java 프로그램에서 동물원 정족수를 설정하려고 시도했지만 CLI를 통해 시도했지만 아무도 작동하지 않았습니다.

    HBase 버전 1.1.0에서 CDH 5.7.7을 사용하고 있습니다. 마지막으로, 문제를 해결하기 위해 Hadoop 클래스 패스에 몇 가지 configs를 보내야했습니다. 여기에 내 보낸 구성입니다.

    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
    

    희망이 도움이됩니다.

  6. from https://stackoverflow.com/questions/7791788/hbase-client-cant-connect-to-remote-hbase-server by cc-by-sa and MIT license