大数据

Java访问HBase数据库

时间:2010-10-22 0:02:32  作者:solgle  来源:www.solgle.com  查看:471  评论:1
内容摘要:Java访问HBase数据库package my_test;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apach...
Java访问HBase数据库
package my_test;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTableInterface;
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.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
 
import java.io.IOException;  
import java.util.ArrayList;  
import java.util.List;  
 //HTablePool 已经过时  
 
public class Talk {  
  
//hbase 连接对象
private static HConnection conn;
 
    public static Configuration configuration;  
    static {  
        configuration = HBaseConfiguration.create();  
        configuration.set("hbase.zookeeper.property.clientPort", "2181");  
        configuration.set("hbase.zookeeper.quorum", "127.0.0.1");  
        configuration.set("hbase.master", "127.0.0.1:600000");         
    }  
  
    public static synchronized HConnection getHConnection() throws ZooKeeperConnectionException
    {
      if(conn == null)
      {
        conn = HConnectionManager.createConnection(configuration);
      }      
      //System.out.println("HBase连接成功!");
      return conn;      
    }      
    
    public static void main(String[] args) {  
        createTable("solgleDB");  
        insertData("solgleDB");  
        QueryAll("solgleDB");  
        QueryByCondition1("solgleDB");  
        QueryByCondition2("solgleDB");  
        QueryByCondition3("solgleDB");  
        deleteRow("solgleDB","row2");  
        deleteByCondition("solgleDB");  
        try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
    }  
    
  
    /**
     * 创建表
     */
    public static void createTable(String tableName) {  
        System.out.println("开始建表 ......");  
        try {  
            HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);  
            if (hBaseAdmin.tableExists(tableName)) { //判断表是否存在,否则删除重建
                hBaseAdmin.disableTable(tableName);  
                hBaseAdmin.deleteTable(tableName);  
                System.out.println(tableName + "已经存在,开始删除......");  
            }  
            HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);  
            tableDescriptor.addFamily(new HColumnDescriptor("info"));    //增加列簇信息
            tableDescriptor.addFamily(new HColumnDescriptor("nark"));             
            
            hBaseAdmin.createTable(tableDescriptor);  
            
            hBaseAdmin.setBalancerRunning(true, true);            
            hBaseAdmin.close();
        } catch (MasterNotRunningException e) {  
            e.printStackTrace();  
        } catch (ZooKeeperConnectionException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } 
        System.out.println("HBase表创建成功!");  
    }  
    
       
  
    /** 
     * 插入数据 
     */  
    public static void insertData(String tableName) {  
        System.out.println("用循环插入数据 ......");      
        try {          
        conn=getHConnection();
            HTableInterface hinterface = conn.getTable(tableName);
            Put put=null;
            //List<Put> list = new ArrayList<Put>();                  
       
            for(int i=1;i<=2000;i++){
            put=new Put(Bytes.toBytes("row"+i));     // rowkey    
           put.setDurability(Durability.SYNC_WAL);                      
           
           put.add(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("aa"+i)); //第一列              
           put.add(Bytes.toBytes("info"),Bytes.toBytes("ip"),Bytes.toBytes("bb"+i));   //第二列
           put.add(Bytes.toBytes("nark"),Bytes.toBytes("date"),Bytes.toBytes("cc"+i));  //第三列 
           put.add(Bytes.toBytes("nark"),Bytes.toBytes("desc"),Bytes.toBytes("dd"+i));  //第四列    
                               
           //list.add(put);  
           System.out.println("the times is : "+ i +"=>" + put.heapSize());
           hinterface.put(put);
                         
           put=null;
            }
            //hinterface.put(list);
            hinterface.flushCommits();
            hinterface.close();            
        } catch (IOException e) {  
            e.printStackTrace();  
        }
        System.out.println("数据插入完毕 !");  
    }  
  
    /** 
     * 删除一张表 
     * @param tableName 
     */  
    public static void dropTable(String tableName) {  
        try {  
            HBaseAdmin admin = new HBaseAdmin(configuration);  
            admin.disableTable(tableName);  
            admin.deleteTable(tableName);  
            admin.close();
        } catch (MasterNotRunningException e) {  
            e.printStackTrace();  
        } catch (ZooKeeperConnectionException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        System.out.println("表删除完毕");  
    }  
    
    /** 
     * 根据 rowkey删除一条记录 
     * @param tablename 
     * @param rowkey 
     */  
     public static void deleteRow(String tablename, String rowkey)  {  
        try {  
        conn=getHConnection();
        HTableInterface hinterface=conn.getTable(tablename);
       
            Delete d1 = new Delete(rowkey.getBytes());               
            
            hinterface.delete(d1);
        
            hinterface.close();           
            System.out.println(rowkey+"删除行成功!");  
            
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        
    }  
  
     /** 
      * 组合条件删除 
      * @param tablename  
      */  
     public static void deleteByCondition(String tablename)  {      
    /* 查出符合条件的记录,然后删除  */
    List<String> list=new ArrayList<String>();
   
    list=QueryByCondition3("solgleDB");    
                 
         for(int i = 0;i < list.size(); i++){
        System.out.println("条件删除"+list.get(i));
        deleteRow("solgleDB",list.get(i));             
         }          
    }  
  
  
    /** 
     * 查询所有数据 
     * @param tableName 
     */  
    public static void QueryAll(String tableName) {  
        try {
        conn=getHConnection();
            HTableInterface hinterface = conn.getTable(tableName);  
            Scan scan=new Scan();
            ResultScanner rs =hinterface.getScanner(scan);
            for (Result r : rs) {  
                System.out.println("RowKey:" + Bytes.toString(r.getRow()));  
                for (KeyValue keyValue : r.raw()) {  
                    System.out.println("Col:" + Bytes.toString(keyValue.getFamily())+"->"  
                            + Bytes.toString(keyValue.getQualifier())+"=>" + Bytes.toString(keyValue.getValue()));                                        
                }  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 单条件查询,根据rowkey查询唯一一条记录 
     * @param tableName 
     */  
    public static void QueryByCondition1(String tableName) {  
  
        try {  
        conn=getHConnection();
            HTableInterface hinterface = conn.getTable(tableName);          
            Get scan = new Get("row1".getBytes());  //根据rowkey查询  
            Result r = hinterface.get(scan);
            System.out.println("RowKey:" + Bytes.toString(r.getRow())); 
            for (KeyValue keyValue : r.raw()) {  
                System.out.println("Col:" + Bytes.toString(keyValue.getFamily())+"->"  
                        + Bytes.toString(keyValue.getQualifier())+"=>" + Bytes.toString(keyValue.getValue()));  
            }  
            
            hinterface.close();
            
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 单条件按查询,查询多条记录 
     * @param tableName 
     */  
    public static void QueryByCondition2(String tableName) {  
  
        try {  
        conn=getHConnection();
            HTableInterface hinterface = conn.getTable(tableName);
            
            Filter filter = new SingleColumnValueFilter(Bytes  
                    .toBytes("info"),Bytes.toBytes("name"), CompareOp.EQUAL, Bytes  
                    .toBytes("aa1")); //筛选列info.name的值为aa1的记录  
            Scan s = new Scan();  
            s.setFilter(filter);  
            ResultScanner rs = hinterface.getScanner(s);
            
            for (Result r : rs) {  
            System.out.println("RowKey:" + Bytes.toString(r.getRow())); 
                for (KeyValue keyValue : r.raw()) {  
                    System.out.println("Col:" + Bytes.toString(keyValue.getFamily())+"->"  
                            + Bytes.toString(keyValue.getQualifier())+"=>" + Bytes.toString(keyValue.getValue()));  
                }  
            }  
            hinterface.close();
            
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
    }  
  
    /** 
     * 组合条件查询 
     * @param tableName 
     */  
    public static List<String> QueryByCondition3(String tableName) {  
  
        try {    
        conn=getHConnection();
            HTableInterface hinterface = conn.getTable(tableName);
            
            List<Filter> list = new ArrayList<Filter>();    
            Filter filter1 = new SingleColumnValueFilter(Bytes  
                    .toBytes("info"), Bytes.toBytes("name"), CompareOp.EQUAL, Bytes  
                    .toBytes("aa3"));               
  
            Filter filter2 = new SingleColumnValueFilter(Bytes  
                    .toBytes("info"), Bytes.toBytes("ip"), CompareOp.EQUAL, Bytes  
                    .toBytes("bb3"));               
  
            Filter filter3 = new SingleColumnValueFilter(Bytes  
                    .toBytes("mark"), Bytes.toBytes("date"), CompareOp.EQUAL, Bytes  
                    .toBytes("cc3"));  
            
            list.add(filter1); 
            list.add(filter2); 
            list.add(filter3);  
  
            FilterList filterList = new FilterList(list);  
  
            Scan scan = new Scan();  
            scan.setFilter(filterList);  
            
            ResultScanner rs = hinterface.getScanner(scan);
            
            List<String> listrow=new ArrayList<String>();
            
            for (Result r : rs) {  
            System.out.println("RowKey:" + Bytes.toString(r.getRow())); 
            listrow.add(Bytes.toString(r.getRow()));
                for (KeyValue keyValue : r.raw()) {  
                    System.out.println("Col:" + Bytes.toString(keyValue.getFamily())+"->"  
                            + Bytes.toString(keyValue.getQualifier())+"=>" + Bytes.toString(keyValue.getValue()));  
                }  
            }  
            rs.close();  
            hinterface.close();
            //conn.close();  /* 如果后面还有操作,则不能关闭连接   */
            
            return listrow;
        } catch (Exception e) {  
            e.printStackTrace();  
        }
return null;    
    }    
}  
 
 
标签:Java访问hbase数据库 hbase 

solgle.com 版权所有,欢迎分享!!!

上一篇:HBase参数文件hbase-site.xml配置说明
下一篇:没有了
相关评论
   Copyright © 2013-2020 solgle.com,All rights reserved.[solgle.com] 公安机关备案号:51010802000219
Email:solgle@solgle.com; weixin:cd1008610000 ICP:蜀ICP备14011070号-1