복붙노트

[HADOOP] HBase를 연결하는 자바 API를 사용할 때 박히

HADOOP

HBase를 연결하는 자바 API를 사용할 때 박히

내 지역 환경 :

OS X 10.9.2, HBase를-0.94.17, 자바 1.6

내 HBase를 모드 : 독립

나는 쉘에서 작업을 할 수 있었다,하지만 난 자바 API를 사용하는 경우, 그것은 작동하지 않았다.

내 자바 코드 :

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;


public class MyLittleHBaseClient {
  public static void main(String[] args) throws IOException {

    Configuration config = HBaseConfiguration.create();
    config.addResource("/Users/apple/Documents/tools/hbase-0.94.17/conf/hbase-site.xml");

    HTable table = new HTable(config, "myLittleHBaseTable");

    Put p = new Put(Bytes.toBytes("myLittleRow"));

    p.add(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"),
      Bytes.toBytes("Some Value"));

    table.put(p);

    Get g = new Get(Bytes.toBytes("myLittleRow"));
    Result r = table.get(g);
    byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"),
      Bytes.toBytes("someQualifier"));

    String valueStr = Bytes.toString(value);
    System.out.println("GET: " + valueStr);

    Scan s = new Scan();
    s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
    ResultScanner scanner = table.getScanner(s);
    try {

      for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
        // print out the row we found and the columns we were looking for
        System.out.println("Found row: " + rr);
      }

    } finally {

      scanner.close();
    }
  }
}

여기 내 conf의 문서 중 일부입니다 :

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///Users/apple/Documents/tools/hbase-0.94.17/hbase-rootdir/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/Users/apple/Documents/tools/hbase-0.94.17/hbase-zookeeper/zookeeper</value>
  </property>
</configuration>

나는 위의 자바 코드를 실행하면, 다음과 같은 정보를 가지고 :

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2014-03-31 13:20:15.037 java[873:1003] Unable to load realm info from SCDynamicStore

다음 콘솔은 여기에 멈추지 않았다 그리고 아무것도주지 않았다. (더 이상 응답)

또한 여기 내 /Users/apple/Documents/tools/hbase-0.94.17/logs/hbase-apple...local.log를 첨부 :

https://docs.google.com/file/d/0BxtBre5A8J61Y2k3SXNtNGs1WXM/edit

당신의 환자 주셔서 감사합니다, 당신의 대답은 나에게 큰 도움이 될 것입니다 :)

해결법

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

    1.당신의 conf 파일에서 "hbase-env.sh" 대신 당신이 가지고있는 라인 : 수출 HBASE_OPTS = "- XX : + UseConcMarkSweepGC" 추가 : -Djava.security.krb5.realm = -Djava.security.krb5.kdc = 라인이 될 것입니다 그래서 수출 HBASE_OPTS = "- XX : + UseConcMarkSweepGC -Djava.security.krb5.realm = -Djava.security.krb5.kdc =" "SCDynamicStore에서 영역 정보를로드 할 수 없습니다"OSX에 하둡 : 컨텍스트 여기를 봐

    당신의 conf 파일에서 "hbase-env.sh" 대신 당신이 가지고있는 라인 : 수출 HBASE_OPTS = "- XX : + UseConcMarkSweepGC" 추가 : -Djava.security.krb5.realm = -Djava.security.krb5.kdc = 라인이 될 것입니다 그래서 수출 HBASE_OPTS = "- XX : + UseConcMarkSweepGC -Djava.security.krb5.realm = -Djava.security.krb5.kdc =" "SCDynamicStore에서 영역 정보를로드 할 수 없습니다"OSX에 하둡 : 컨텍스트 여기를 봐

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

    2.당신은 필요가 없습니다

    당신은 필요가 없습니다

    Configuration config = HBaseConfiguration.create();
    config.addResource("/Users/apple/Documents/tools/hbase-0.94.17/conf/hbase-site.xml");
    

    당신은 HBase를-site.xml 파일이 추가합니다.

    당신의 HBase를-site.xml 파일이 추가 :

    <특성>         <이름> hbase.zookeeper.property.clientPort         <값> 2181  

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

    3.나는이 문제를 만났다. 나는, HBase를-site.xml 파일이 아닌 IP에서 설정 서버 이름을했다 내 자바 클라이언트는이 상황에 갇혀.

    나는이 문제를 만났다. 나는, HBase를-site.xml 파일이 아닌 IP에서 설정 서버 이름을했다 내 자바 클라이언트는이 상황에 갇혀.

    그래서 서버 이름 내 클라이언트 시스템의 호스트를 설정하고, 나는이 사건을 해결했다.

  4. ==============================

    4.처음에는, 당신은 HBase를-site.xml 파일에 clientPort와를 확인 :

    처음에는, 당신은 HBase를-site.xml 파일에 clientPort와를 확인 :

    <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2222</value>
    </property>
    

    그리고 자바 프로그램 : 당신은 HBase를-site.xml 파일에로 clientPort와에게 동일하게 설정해야합니다 :

    Configuration config = HBaseConfiguration.create();
    config.set("hbase.zookeeper.property.clientPort", "2222");
    
  5. from https://stackoverflow.com/questions/22755912/get-stuck-when-using-java-api-to-connect-hbase by cc-by-sa and MIT license