2012-08-30 2 views
4

HTablePool의 올바른 사용 패턴은 무엇입니까? 제 말은, HTablePool의 인스턴스로 초기화되는 DAO를 가지고 있다고 가정합니다. 이 DAO는 Stateless Session Bean의 멤버 인스턴스이므로 호출간에 재사용됩니다.HBase HTablePool : 올바른 사용법

다음 중 올바른 사용법은 무엇입니까? 그것은 HTable 이후 Datasource처럼 때문에

private HTableInterface aTable; 

public XYZDAO(final HTablePool pool) 
{ 
    this.aTable = pool.getTable(...); 
} 

public void doSomething(...) 
{ 
    aTable.get(...) 
} 

또는 HTablePool 데이터 소스처럼 사용할 수 있어야하고이

private HTablePool datasource; 

public XYZDAO(final HTablePool pool) 
{ 
    this.datasource = pool; 
} 

public void doSomething(...) 
{ 
    HTableInterface aTable = datasource.getTable(...); 
    aTable.get(...); 
    aTable.close(); 
} 
+0

HTablePool가 HBase를 0.98에서 중단된다 http://apache-hbase.679495.n3.nabble.com/Heads-up-HTablePool-will-be-deprecated-in-0- ([링크]을 참조 94-0-95-0-96-and-removed-0-98-td4048783.html) – Jack47

답변

4

같은 사용은 두 번째 방법이 가장 좋은, 당신은 HTablePool을 사용해야한다 더 적합 클래스는 스레드로부터 안전하지 않습니다. close 메서드를 호출하면 HTableInterface이라는 메서드가 자동으로 테이블을 풀로 반환합니다.

최신 HBase 버전에서는 더 이상 지원되지 않는 HTablePool을 대신하는 HConnection 인터페이스가 있습니다.

1

네 번째 방법은 가 아니라 테이블을 닫는 것보다 풀에 다시 넣어해야 더 :

public void createUser(String username, String firstName, String lastName, String email, String password, String roles) throws IOException { 
    HTable table = rm.getTable(UserTable.NAME); 
    Put put = new Put(Bytes.toBytes(username)); put.add(UserTable.DATA_FAMILY, UserTable.FIRSTNAME, 
    Bytes.toBytes(firstName)); 
    put.add(UserTable.DATA_FAMILY, UserTable.LASTNAME, Bytes.toBytes(lastName)); 
    put.add(UserTable.DATA_FAMILY, UserTable.EMAIL, Bytes.toBytes(email)); 
    put.add(UserTable.DATA_FAMILY, UserTable.CREDENTIALS, 
    Bytes.toBytes(password)); 
    put.add(UserTable.DATA_FAMILY, UserTable.ROLES, Bytes.toBytes(roles)); table.put(put); 
    table.flushCommits(); 
    rm.putTable(table); 
} 

예제 코드는 책에서 가져온 "HBase를 : 확실한 가이드."

편집 : 내가 잘못 v0.92 상태 후 문서 해요 :

이 방법은 더 이상 필요하지 않습니다

, 클라이언트가 HTableInterface.close을 (호출해야합니다)보다는 풀 테이블을 반환을하면 모든 작업이 완료되면 그것과 함께 (deprecated) putTable (HTableInterface)을 사용하여 테이블을 풀에 반환하지 말고 HTableInterface.close()를 호출하여 HTableInterface의 인스턴스를 닫습니다.

+0

틀렸어 ... Javadoc http://hbase.apache.org/apidocs/org/apache/를 확인하십시오. hadoop/hbase/client/HTablePool.html –

+0

그래, 이미 편집 한 그들은 0.92 후에 그것을 수정했다. 나는 책을보고 있었고 HTable을 확장하는 PoolHTable 구현을 보지 못했다. – seb

관련 문제