您好,登錄后才能下訂單哦!
package com.snglw.basic; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; 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.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.coprocessor.AggregationClient; import org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter.FilterList.Operator; import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.util.Bytes; import com.snglw.util.ConnectInit; public class BasicOperator { ConnectInit ci = new ConnectInit(); Configuration conf = ci.getConfiguration(); /*建表與刪表*/ public void createTable(){ String tableName = "user"; HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName)); HColumnDescriptor hcd = new HColumnDescriptor("info"); htd.addFamily(hcd); HBaseAdmin admin = null; try { admin = new HBaseAdmin(conf); if (admin.tableExists(tableName)){ admin.disableTable(tableName); admin.deleteTable(tableName); }else{ admin.createTable(htd); System.out.println("Table Created!"); } }catch(IOException e){ e.printStackTrace(); } finally{ if(admin != null){ try{ admin.close(); }catch(IOException e){ e.printStackTrace(); } } } } /*修改表(注意:修改表或者列時,只有表的Enabled屬性為false時才能生效)*/ public void modifyTable(){ //指定表名 String tableName = "user"; //指定列族名 byte[] familyName = Bytes.toBytes("education"); HBaseAdmin admin = null; try{ //實例化HBaseAdmin對象 admin = new HBaseAdmin(conf); //獲取表描述信息對象 HTableDescriptor htd = admin.getTableDescriptor(Bytes.toBytes(tableName)); //修改前,判斷表是否有指定列族 if(!htd.hasFamily(familyName)){ //創建列描述信息 HColumnDescriptor hcd = new HColumnDescriptor(familyName); htd.addFamily(hcd); //修改表前,需要disable表,使其下線 admin.disableTable(tableName); //提交modifyTable請求 admin.modifyTable(tableName, htd); //修改完成之后,使表上線 admin.enableTable(tableName); } }catch(IOException e){ e.printStackTrace(); }finally{ if(admin != null){ try { admin.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*插入數據*/ public void put(){ //指定表名 String tableName = "user"; //指定列族名 byte[] familyName = Bytes.toBytes("info"); //指定列名 byte[][] qualifiers = {Bytes.toBytes("name"),Bytes.toBytes("gender"), Bytes.toBytes("age"),Bytes.toBytes("address")}; HTable table = null; try{ //實例化一個HTable對象 table = new HTable(conf,tableName); List<Put> puts = new ArrayList<Put>(); //實例化一個Put對象 Put put = new Put(Bytes.toBytes("012005000201")); put.addImmutable(familyName, qualifiers[0],Bytes.toBytes("張三")); put.addImmutable(familyName, qualifiers[1],Bytes.toBytes("男")); put.addImmutable(familyName, qualifiers[2],Bytes.toBytes(new Long(19))); put.addImmutable(familyName, qualifiers[3],Bytes.toBytes("廣東省深圳市")); puts.add(put); put = new Put(Bytes.toBytes("012005000202")); put.addImmutable(familyName, qualifiers[0],Bytes.toBytes("李")); put.addImmutable(familyName, qualifiers[1],Bytes.toBytes("女")); put.addImmutable(familyName, qualifiers[2],Bytes.toBytes(new Long(23))); put.addImmutable(familyName, qualifiers[3],Bytes.toBytes("山西省大同市")); puts.add(put); put = new Put(Bytes.toBytes("012005000203")); put.addImmutable(familyName, qualifiers[0],Bytes.toBytes("王")); put.addImmutable(familyName, qualifiers[1],Bytes.toBytes("男")); put.addImmutable(familyName, qualifiers[2],Bytes.toBytes(new Long(26))); put.addImmutable(familyName, qualifiers[3],Bytes.toBytes("浙江省寧波市")); puts.add(put); //提交put數據請求 table.put(puts); }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try{ //關閉HTable對象 table.close(); }catch(IOException e){ e.printStackTrace(); } } } } /*刪除數據*/ public void delete(){ String tableName = "user"; //指定rowKey值,即編號為012005000201 byte[] rowKey = Bytes.toBytes("012005000201"); HTable table = null; try{ table = new HTable(conf,tableName); Delete delete = new Delete(rowKey); //提交一次delete數據請求 table.delete(delete); }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*使用Get讀取數據*/ public void get(){ String tableName = "user"; //指定列族名 byte[] familyName = Bytes.toBytes("info"); //指定列名 byte[][] qualifier = {Bytes.toBytes("name"),Bytes.toBytes("address")}; //指定rowKey值 byte[] rowKey = Bytes.toBytes("012005000202"); HTable table = null; try{ table = new HTable(conf,tableName); //實例化get對象 Get get = new Get(rowKey); //設置列族和列名 get.addColumn(familyName,qualifier[0]); get.addColumn(familyName,qualifier[1]); //提交請求 Result result = table.get(get); for(Cell cell:result.rawCells()){ System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + ":" + Bytes.toString(CellUtil.cloneFamily(cell)) + ":" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ":" + Bytes.toString(CellUtil.cloneValue(cell))); } }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*使用scan讀取數據*/ public void scan(){ String tableName = "webPage"; HTable table = null; try{ table = new HTable(conf,tableName); Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("webPageInfo"),Bytes.toBytes("doc")); //設置緩存大小 scan.setCaching(5000); scan.setBatch(2); //實例化一個ResultScanner對象 ResultScanner rScanner = null; //提交請求 rScanner = table.getScanner(scan); for(Result r = rScanner.next();r != null;r = rScanner.next()){ for(Cell cell:r.rawCells()){ System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + ":" + Bytes.toString(CellUtil.cloneFamily(cell)) + ":" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ":" + Bytes.toString(CellUtil.cloneValue(cell))); } } }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*使用過濾器*/ public void singleColumnValueFilter(){ String tableName = "user"; HTable table = null; try{ table = new HTable(conf,tableName); //實例化一個Scan對象 Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name")); //設置過濾條件 SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("name"), CompareOp.EQUAL,Bytes.toBytes("王")); scan.setFilter(filter); //實例化ResultScanner對象 ResultScanner rScanner = null; rScanner = table.getScanner(scan); for(Result r = rScanner.next();r != null;r = rScanner.next()){ for(Cell cell:r.rawCells()){ System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + ":" + Bytes.toString(CellUtil.cloneFamily(cell)) + ":" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ":" + Bytes.toString(CellUtil.cloneValue(cell))); } } }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*使用FilterList過濾器*/ public void filterList(){ String tableName = "user"; HTable table = null; try{ table = new HTable(conf,tableName); //實例化一個Scan對象 Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name")); //實例化FilterList對象,里各個filter的是"and"關系 FilterList list = new FilterList(Operator.MUST_PASS_ALL); //設置過濾條件(age>20的數據) list.addFilter(new SingleColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("age"), CompareOp.GREATER_OR_EQUAL,Bytes.toBytes(new Long(20)))); //獲取age<=29的數據 list.addFilter(new SingleColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("age"), CompareOp.GREATER_OR_EQUAL,Bytes.toBytes(new Long(29)))); scan.setFilter(list); //實例化ResultScanner對象 ResultScanner rScanner = null; rScanner = table.getScanner(scan); for(Result r = rScanner.next();r != null;r = rScanner.next()){ for(Cell cell:r.rawCells()){ System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + ":" + Bytes.toString(CellUtil.cloneFamily(cell)) + ":" + Bytes.toString(CellUtil.cloneQualifier(cell)) + ":" + Bytes.toString(CellUtil.cloneValue(cell))); } } }catch(IOException e){ e.printStackTrace(); }finally{ if(table != null){ try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } /*聚合函數Aggregate*/ public void aggregate(){ //指定表名 byte[] tableName = Bytes.toBytes("user"); //指定列族名 byte[] family = Bytes.toBytes("info"); AggregationClient aggregationClient = new AggregationClient(conf); //實例化scan對象 Scan scan = new Scan(); scan.addFamily(family); scan.addColumn(family,Bytes.toBytes("age")); try{ //獲取行數 long rowCount = aggregationClient.rowCount(TableName.valueOf(tableName),null,scan); System.out.println("row count is "+rowCount); //獲取最大值 long max = aggregationClient.max(TableName.valueOf(tableName),new LongColumnInterpreter(),scan); System.out.println("max number is "+max); //獲取最小值 long min = aggregationClient.min(TableName.valueOf(tableName),new LongColumnInterpreter(),scan); System.out.println("min number is "+min); }catch(Throwable e){ e.printStackTrace(); } } public static void main(String[] args){ BasicOperator bo = new BasicOperator(); bo.aggregate(); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。