代碼如下,不需要配置文件
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.filter.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; /*todo 查hbase數據條數 */ public class HBaseLocalTest { public static Configuration conf; public static Connection conn; static { conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.property.clientPort", "2181"); conf.set("hbase.zookeeper.quorum", "*"); try { conn = ConnectionFactory.createConnection(conf); } catch (IOException e) { e.printStackTrace(); } } //將傳入的日期參數轉換成rowkey的反轉 public static String Fdate(String s) { char[] array = s.toCharArray(); String reverse = ""; //倒敘拿出 for (int i = array.length - 1; i >= 0; i--) reverse += array[i]; return reverse; } //補齊傳入的字符串 public static String Complement(String busNo) {//預先定義一個6位0 StringBuilder zero =new StringBuilder("000000"); String result = zero.substring(0, zero.length() - busNo.length()) + busNo; return result; } /** * 根據startRowKey和endRowKey篩選出區間,然后根據regxKey正則匹配和num查出最終的結果 * @param tableName 表名 * @param startRowKey 開始的范圍 * @param endRowKey 結束的范圍 * @param regxKey 正則匹配 * @param num 查詢的條數 * @return List<Result> */ public static List<Result> getNumRegexRow(String tableName,String startRowKey,String endRowKey, String regxKey,int num) { HTableInterface table = null; List<Result> list = null; try { table = new HTable(conf, tableName); //創建一個過濾器容器,並設置其關系(AND/OR) FilterList fl = new FilterList(FilterList.Operator.MUST_PASS_ALL); //設置正則過濾器 RegexStringComparator rc = new RegexStringComparator(regxKey); RowFilter rf = new RowFilter(CompareFilter.CompareOp.EQUAL, rc); //過濾獲取的條數 if (num != 0) { Filter filterNum = new PageFilter(num);//展示條數 fl.addFilter(filterNum); } //過濾器的添加 fl.addFilter(rf); Scan scan = new Scan(); //設置取值范圍 scan.setStartRow(startRowKey.getBytes());//開始的key scan.setStopRow(endRowKey.getBytes());//結束的key scan.setFilter(fl);//為查詢設置過濾器的list ResultScanner scanner = table.getScanner(scan) ; list = new ArrayList<Result>() ; for (Result rs : scanner) { list.add(rs) ; } } catch (Exception e) { e.printStackTrace() ; } finally { try { table.close() ; } catch (IOException e) { e.printStackTrace(); } } return list; } public static void main(String[] args) throws Exception { String startDate= "181017"; String endDate ="181017"; String tablename = "Table"; String zao="00"; //這里是根據一天24小時匹配查詢 String wan="23"; String wei = "000000001"; String wei2= "999999999"; String startRowkey = Fdate(startDate)+zao+wei; String endRowkey = Fdate(endDate)+wan+wei2; List<Result> list = getNumRegexRow(tablename,startRowkey,endRowkey,"[^\\\\\\/\\^]",0); //后面的0,是查詢所有符合的。如果改為5,只會打印符合條件的前5條數據 for (int j = 0; j < list.size(); j++) { // System.out.print("PROID:"); //下面是打印字段的值 // System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("YB"),Bytes.toBytes("PROID")))); // System.out.print(" ORIDATA:"); // System.out.println(Bytes.toString(list.get(j).getValue(Bytes.toBytes("YB"),Bytes.toBytes("ORIDATA")))); //// System.out.print(" SITE_TIME:"); //// System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("SITE_TIME")))); //// System.out.print(" DOWN:"); //// System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("IS_UP+DOWN")))); //// System.out.print(" LAT:"); //// System.out.print(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("LAT")))); //// System.out.print(" LNG:"); //// System.out.println(Bytes.toString(list.get(j).getValue(Bytes.toBytes("f"),Bytes.toBytes("LNG")))); } System.out.println("數據量:"+list.size()); conn.close(); } }