1. 通过HBaseAdmin维护表(创建,删除表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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.client.HBaseAdmin;
public  class  CreateHbaseTable {
     public  static  void  main(String[] args)  throws  Exception {
        String tbl =  "ericni_test" ;
         Configuration config = HBaseConfiguration. create();
         config.set(  "hbase.zookeeper.quorum" "xxxx"  );
         config.set(  "hbase.zookeeper.property.clientPort"  "2181"  );
         HBaseAdmin admin =  new  HBaseAdmin(config);
         HTableDescriptor[] tables = admin.listTables();
         for (HTableDescriptor t:tables){
             System. out.println(t.getNameAsString());
         }
         if  (admin.tableExists(tbl.getBytes( "utf8"  ))) {
            System. out.println( "table already exists!"  );
         else  {
             System. out.println( "table not already exists!create now!"  );
             creatTable(admin,tbl, new  String[]{  "info" });
        }
     }
     public  static  void  creatTable(HBaseAdmin admin,String tableName, String[] familys)  throws  Exception {
             HTableDescriptor tableDesc =  new  HTableDescriptor(tableName);
             for ( int  i= 0 ; i<familys.length; i++){
                 tableDesc.addFamily(  new  HColumnDescriptor(familys[i]));
             }
             try {
                admin.createTable(tableDesc);
                System. out.println( "create table "  + tableName +  " ok." );
             catch  (Exception err) {
               System. out.println( "create table "  + tableName +  " failed. Error log is "  +  err);
               err.printStackTrace();                                        
             }
     }
    
     public  static  void  deleteTable(HBaseAdmin admin,String tableName)  throws  Exception {
        try {
                      admin.disableTable(tableName);
                      admin.deleteTable(tableName);
                      System. out.println( "delete table "  + tableName +  " ok." );
        catch (Exception err){
                      System. out.println( "delete table "  + tableName +  " failed.Error log is "  + err);
                      err.printStackTrace();
        }
     }
    
}

2.通过Put写入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import  java.io.File;
import  java.io.BufferedReader;
import  java.io.FileReader;
import  java.io.IOException;
import  org.apache.hadoop.conf.Configuration;
import  org.apache.hadoop.hbase.HBaseConfiguration;
import  org.apache.hadoop.hbase.client.HBaseAdmin;
import  org.apache.hadoop.hbase.client.HTable;
import  org.apache.hadoop.hbase.client.Put;
import  org.apache.hadoop.hbase.util.Bytes;
public  class  LoadDataFromFile {
     public  static  void  main(String[] args)  throws  Exception {
        String tbl =  "ericni_test" ;
        String filename =  "/tmp/click.log" ;
        File file =  new  File(filename);  
        BufferedReader reader =  null ;
         reader =  new  BufferedReader( new  FileReader(file));
         Configuration config = HBaseConfiguration. create();
         config.set(  "hbase.zookeeper.quorum" "10.100.90.203"  );
         config.set(  "hbase.zookeeper.property.clientPort"  "2181"  );
         HTable table =  new  HTable(config, tbl);
         HBaseAdmin admin =  new  HBaseAdmin(config);
         if  (admin.tableExists(tbl.getBytes( "utf8"  ))) {
            System. out.println( "table already exists!"  );
            try  {
                try  {
                    String tmpString =  null ;
                    int  linex =  1 ;
                    while  ((tmpString = reader.readLine()) !=  null ) {
                            //System.out.println(tmpString.getClass());
                            String[] lines = tmpString.split(  "\\t" );
                            //String[] newlines = {lines[0],lines[1],lines[2],lines[3],lines[4]};  
                            //String row = StringUtils.join(new String[] {lines[0],lines[1],lines[2],lines[3],lines[4]}, "_");
                            StringBuffer sb =  new  StringBuffer();
                            String row = sb.append(lines[ 0 ]).append( "_"  ).append(lines[ 1 ]).append( "_" ).append(lines[ 2 ]).append(  "_" ).append(lines[ 3 ]).append( "_"  ).append(lines[ 4 ]).toString();
                            String valuex = lines[lines. length- 1 ];                      
                            System. out.println(row);
                            linex ++;
                               addRecord(table,tbl,row,  "Stat" "Click_cnt" , valuex);
                    }
                    reader.close();
            catch (IOException err){
                    err.printStackTrace();
            finally  {
                    try {
                            if (reader !=  null ) reader.close();
                    catch (IOException err){
                            err.printStackTrace();
                    }
            }
               
            catch (Exception err){
                  System. out.println( "load data error"  );
                  System. out.println( "error log: "  + err);
                  err.printStackTrace();
            }        
           
         else  {
             System. out.println( "table not already exists!"  );
             System. exit( 1 );
        }
         table.close();
         admin.close();
     }
      public  static  void  addRecord(HTable table,String tableName, String rowKey, String family, String qualifier, String value)  throws  Exception{
             Put put =  new  Put(Bytes.toBytes(rowKey));
             put.add(Bytes. toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
             table.put(put);
             System. out.println( "insert recored "  + rowKey +  " to table "  + tableName +  " ok."  );
         }
    
}

3.Scan的Filter操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import  java.io.IOException;
import  java.util.ArrayList;
import  java.util.List;      
import  org.apache.hadoop.conf.Configuration;
import  org.apache.hadoop.hbase.HBaseConfiguration;
import  org.apache.hadoop.hbase.KeyValue;
import  org.apache.hadoop.hbase.client.Get;
import  org.apache.hadoop.hbase.client.HTable;
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.FilterList;
import  org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import  org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import  org.apache.hadoop.hbase.util.Bytes;
public  class  FilterTest {
     private  static  Configuration config =  null ;
     private  static  HTable table;
     private  static  HTable table2;
     private  static  HTable table3;
     static  {
         try  {
             config = HBaseConfiguration.create();
             config.set( "hbase.zookeeper.quorum"  "xxxxx"  );    
             config.set( "hbase.zookeeper.property.clientPort"  "2181"  );
         catch  (Exception e){
             e.printStackTrace();
         }
     }
     public  static  void  selectByRowKey(String tablename,String rowKey)  throws  IOException{
         table =  new  HTable(config,tablename);
         Get g =  new  Get(Bytes.toBytes(rowKey));
         Result r = table.get(g);
         for (KeyValue kv:r.raw()){
             System. out.println( "row : "  + new  String(kv.getRow()));
             System. out.println( "column: "  + new  String(kv.getKey()));
             System. out.println( "value: "  + new  String(kv.getValue()));
         }
     }   
     public  static  void  selectByRowKeyColumn(String tablename,String rowKey,String column,String qualifier)  throws  IOException{
         table2 =  new  HTable(config,tablename);
         Get g =  new  Get(Bytes.toBytes(rowKey));
         g.addColumn(Bytes. toBytes(column),qualifier.getBytes( "utf8" ));
         Result r = table2.get(g);
         for (KeyValue kv:r.raw()){
             System. out.println( "row : "  + new  String(kv.getRow()));
             System. out.println( "column: "  + new  String(kv.getKey()));
             System. out.println( "value: "  + new  String(kv.getValue()));
         }
    
     public  static  void  selectByFilter(String tablename,List<String> arr)  throws  IOException{
         table3 =  new  HTable(config,tablename);
         FilterList filterList =  new  FilterList();
         Scan s1 =  new  Scan();
         for (String v:arr){
             String[] s = v.split(  "," );
             filterList.addFilter(  new  SingleColumnValueFilter(Bytes.toBytes(s[ 0 ]),
                                                              Bytes.toBytes(s[ 1 ]),
                                                              CompareOp.EQUAL,Bytes.toBytes(s[ 2 ])
                                                              )
             );
             s1.addColumn(Bytes. toBytes(s[ 0 ]), Bytes.toBytes(s[ 1 ]));
         }
         s1.setFilter(filterList);
         ResultScanner ResultScannerFilterList = table3.getScanner(s1);
         for (Result rr = ResultScannerFilterList.next();rr !=  null ;rr = ResultScannerFilterList.next()){
             for (KeyValue kv:rr.list()){
                 System. out.println( "row : "  + new  String(kv.getRow()));
                 System. out.println( "column : "  + new  String(kv.getKey()));
                 System. out.println( "value : "  + new  String(kv.getValue()));
             }
         }
     }    
     public  static  void  main(String[] args)  throws  IOException{          
        //selectByRowKey("ericni_test","102_2.94_1400342400_00426_01132");              
            //selectByRowKeyColumn("ericni_test","102_2.94_1400342400_00426_01132"," Stat","Click_cnt");             
         List<String> arr=  new  ArrayList<String>();
         arr.add(  "Stat,Click_cnt,1" );
         selectByFilter( "ericni_test"  ,arr);
     }    
}

本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1436095,如需转载请自行联系原作者