Hbase client tool & Util 오픈소스 프로젝트 소개

2011. 5. 20. 09:50프로그래밍일반

현재 제가 진행하고 있는 Hbase용 오픈소스 입니다. HBase 적응에 힘드신분들은
한번 Try 해보시는것도 좋습니다.

http://code.google.com/p/hbase-jdo/

에서 진행하고 있습니다.(소스까지 모두 오픈되어있습니다.)

===============
What is HBase-util?

HBase-util is open source module that enables it to store bean class directly into HBase tables (http://hbase.org/) running on the Hadoop Distributed FileSystem (http://hadoop.apache.org/core/)

this project contributed apache hbase(http://wiki.apache.org/hadoop/Hbase)

This is not JDO (persistence api). just simple module for hbase

hbase-util can make to handle the hbase more easily

Features

  • can handle like java data objects. (no persistence api)
  • sequence generator
  • search with index and paramter
  • querys to insert,update,select,delete
  • general util(upload big file)
  • HTable Pool by using apache pool.
  • Bean class with anotation

Release Notes

  • 2011-01-21 ver0.1 release for hbase 0.90
  • 2011-01-25 ver0.11 release for hbase 0.20.6

Next

  • Hbase-Tool will be released. (sample screenshot)

Dependency

- hbase libraries. (http://hbase.apache.org)

- commons-beanutils.jar (http://commons.apache.org/)

- commons-pool-1.5.5.jar (http://commons.apache.org/)

- hbase-transactionl.jar

(https://github.com/hbase-trx/hbase-transactional-tableindexed)

Example source

  • HBaseExample.java
    package com.apache.hadoop.hbase.client.jdo.examples; 
     
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.InputStream; 
    import java.util.Hashtable; 
     
    import org.apache.hadoop.fs.Path; 
    import org.apache.hadoop.hbase.client.tableindexed.IndexedTable; 
     
    import com.apache.hadoop.hbase.client.jdo.AbstractHBaseDBO; 
    import com.apache.hadoop.hbase.client.jdo.HBaseBigFile; 
    import com.apache.hadoop.hbase.client.jdo.HBaseDBOImpl; 
    import com.apache.hadoop.hbase.client.jdo.query.DeleteQuery; 
    import com.apache.hadoop.hbase.client.jdo.query.HBaseOrder; 
    import com.apache.hadoop.hbase.client.jdo.query.HBaseParam; 
    import com.apache.hadoop.hbase.client.jdo.query.InsertQuery; 
    import com.apache.hadoop.hbase.client.jdo.query.QSearch; 
    import com.apache.hadoop.hbase.client.jdo.query.SelectQuery; 
    import com.apache.hadoop.hbase.client.jdo.query.UpdateQuery; 
     
    /**
     * Hbase JDO Example.
     *  
     * dependency library.
     * - commons-beanutils.jar
     * - commons-pool-1.5.5.jar
     * - hbase0.90.0-transactionl.jar
     *  
     * you can expand Delete,Select,Update,Insert Query classes.
     * @author ncanis
     *
     */
     
    public class HBaseExample { 
           
    public static void main(String[] args) throws Exception { 
                   
    AbstractHBaseDBO dbo = new HBaseDBOImpl(); 
                     
                   
    //*drop if table is already exist.* 
                   
    if(dbo.isTableExist("user")){ 
                            dbo
    .deleteTable("user"); 
                   
    } 
                     
                   
    //*create table* 
                    dbo
    .createTableIfNotExist("user",HBaseOrder.DESC,"account"); 
                   
    //dbo.createTableIfNotExist("user",HBaseOrder.ASC,"account"); 
                     
                   
    //create index. 
                   
    String[] cols={"id","name"}; 
                    dbo
    .addIndexExistingTable("user","account",cols); 
                     
                   
    //insert 
                   
    InsertQuery insert = dbo.createInsertQuery("user"); 
                   
    UserBean bean = new UserBean(); 
                    bean
    .setFamily("account"); 
                    bean
    .setAge(20); 
                    bean
    .setEmail("ncanis@gmail.com"); 
                    bean
    .setId("ncanis"); 
                    bean
    .setName("ncanis"); 
                    bean
    .setPassword("1111"); 
                    insert
    .insert(bean); 
                     
                   
    //select 1 row 
                   
    SelectQuery select = dbo.createSelectQuery("user"); 
                   
    UserBean resultBean = (UserBean)select.select(bean.getRow(),UserBean.class); 
                     
                   
    // select column value. 
                   
    String value = (String)select.selectColumn(bean.getRow(),"account","id",String.class); 
                     
                   
    // search with option (QSearch has EQUAL, NOT_EQUAL, LIKE) 
                   
    // select id,password,name,email from account where id='ncanis' limit startRow,20 
                   
    HBaseParam param = new HBaseParam(); 
                    param
    .setPage(bean.getRow(),20); 
                    param
    .addColumn("id","password","name","email"); 
                    param
    .addSearchOption("id","ncanis",QSearch.EQUAL); 
                   
    select.search("account", param, UserBean.class); 
                     
                   
    // search column value is existing. 
                   
    boolean isExist = select.existColumnValue("account","id","ncanis".getBytes()); 
                     
                   
    // update password. 
                   
    UpdateQuery update = dbo.createUpdateQuery("user"); 
                   
    Hashtable<String, byte[]> colsTable = new Hashtable<String, byte[]>(); 
                    colsTable
    .put("password","2222".getBytes()); 
                    update
    .update(bean.getRow(),"account",colsTable); 
                     
                   
    //delete 
                   
    DeleteQuery delete = dbo.createDeleteQuery("user"); 
                   
    delete.deleteRow(resultBean.getRow()); 
             
                   
    //////////////////////////////////// 
                   
    // etc 
                     
                   
    // HTable pool with apache commons pool 
                   
    // borrow and release. HBasePoolManager(maxActive, minIdle etc..) 
                   
    IndexedTable table = dbo.getPool().borrow("user"); 
                    dbo
    .getPool().release(table); 
                     
                   
    // upload bigFile by hadoop directly. 
                   
    HBaseBigFile bigFile = new HBaseBigFile(); 
                   
    File file = new File("doc/movie.avi"); 
                   
    FileInputStream fis = new FileInputStream(file); 
                   
    Path rootPath = new Path("/files/"); 
                   
    String filename = "movie.avi"; 
                    bigFile
    .uploadFile(rootPath,filename,fis,true); 
                     
                   
    // receive file stream from hadoop. 
                   
    Path p = new Path(rootPath,filename); 
                   
    InputStream is = bigFile.path2Stream(p,4096); 
                     
                     
           
    } 
    }
  • UserBean .java
package com.apache.hadoop.hbase.client.jdo.examples; 
import com.apache.hadoop.hbase.client.jdo.AbstractHBaseBean; 
 
 
/**
 * Test UserBean
 * @author ncanis
 *
 */
 
public class UserBean extends AbstractHBaseBean{ 
       
@Column@Index 
       
private String id; 
       
@Column 
       
private String password; 
       
@Column@Index 
       
private String name; 
       
@Column 
       
private String email; 
       
@Column 
       
private int age; 
         
       
public String getId() { 
               
return id; 
       
} 
       
public void setId(String id) { 
               
this.id = id; 
       
} 
       
public String getPassword() { 
               
return password; 
       
} 
       
public void setPassword(String password) { 
               
this.password = password; 
       
} 
       
public String getName() { 
               
return name; 
       
} 
       
public void setName(String name) { 
               
this.name = name; 
       
} 
       
public String getEmail() { 
               
return email; 
       
} 
       
public void setEmail(String email) { 
               
this.email = email; 
       
} 
       
public int getAge() { 
               
return age; 
       
} 
       
public void setAge(int age) { 
               
this.age = age; 
       
} 
         
         
}
  • 프로필사진
    김재현2011.05.12 13:40

    안녕하세요.
    http://code.google.com/p/hbase-jdo/ 에서 개발자 ID를 확인해서 이 블로그에 오게됐는데요.
    저는 HBase 0.90.1버전을 쓰고있어서 그런지 HBase Tool 0.2.1을 키면 quorum IP와 포트를 확인하라고 뜨는데 HBase Tool 0.2.1이 HBase 0.90.x버전을 지원하지 않는건가요?

    참고로 로그에는 Loading: org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.h
    dfs.protocol.ClientProtocol version mismatch. (client = 41, server = 42)
    이것과 Loading: org.apache.hadoop.hbase.MasterNotRunningException: Server02:60000라는 에러가 표시되어있습니다.

    • 프로필사진
      Favicon of https://ncanis.tistory.com BlogIcon -TED-2011.05.13 08:41 신고

      안녕하세요.
      현재 최신버전은 0.20.6 버전으로만 접속이 될껍니다.
      클라이언트와 서버의 버전이 맞지 않으면 위와같은 에러가 나올꺼에요.
      0.90.2 버전용도 빌드해서 올려드릴께요.
      (0.90 버전 초기에 버그가 많아서)

      qurom 에러는 서버 주소와 port를 한번 확인해보세요.
      기본 포트와는 다릅니다.

  • 프로필사진
    김재현2011.05.13 15:08

    감사합니다^^
    0.90.2버전용 올라오면 받아서 해봐야겠네요.
    그리고 주키퍼 clientPort설정이 2181인데 그러면 qurom 포트도 2181아닌가요?

    • 프로필사진
      Favicon of https://ncanis.tistory.com BlogIcon -TED-2011.05.19 09:47 신고

      계속 다른일이 생겨서 못하고 있네요. :(
      빨리는 안될것 같습니다.

  • 프로필사진
    김재현2011.05.23 22:18

    괜찮습니다^^
    제가 능력이 된다면 어떻게 해볼텐데, 그냥 lib폴더 안에 있는 HBase 0.20.6버전 jar파일을 0.90.2으로 바꾼후 실행하는걸론 안되네요..ㅠ

  • 프로필사진
    Favicon of http://www.thesispaperswriting.com/management_thesis.htm BlogIcon Management Thesis2012.04.25 01:54

    very nice blog and I really appreciate your hard work .. and I hope you update your blog daily

1 2 3 4 5 6 7 ··· 24