zoukankan      html  css  js  c++  java
  • hBase官方文档以及HBase基础操作封装类

    HBase 官方文档 0.97 http://abloz.com/hbase/book.html

    HBase基本操作封装类(以课堂爬虫为例)

    package cn.crxy.spider.utils;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.KeyValue;
    import org.apache.hadoop.hbase.client.Delete;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.HTableInterface;
    import org.apache.hadoop.hbase.client.HTablePool;
    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.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.util.Bytes;
    
    public class HbaseUtils {
    
        /**
         * HBASE 表名称
         */
        public static final String TABLE_NAME = "spider";
        /**
         * 列簇1 商品信息
         */
        public static final String COLUMNFAMILY_1 = "goodsinfo";
        /**
         * 列簇1中的列
         */
        public static final String COLUMNFAMILY_1_DATA_URL = "data_url";
        public static final String COLUMNFAMILY_1_PIC_URL = "pic_url";
        public static final String COLUMNFAMILY_1_TITLE = "title";
        public static final String COLUMNFAMILY_1_PRICE = "price";
        /**
         * 列簇2 商品规格
         */
        public static final String COLUMNFAMILY_2 = "spec";
        public static final String COLUMNFAMILY_2_PARAM = "param";
    
        HBaseAdmin admin = null;
        Configuration conf = null;
    
        /**
         * 构造函数加载配置
         */
        public HbaseUtils() {
            conf = new Configuration();
            conf.set("hbase.zookeeper.quorum", "192.168.1.177:2181");
            conf.set("hbase.rootdir", "hdfs://192.168.1.177:9000/hbase");
            try {
                admin = new HBaseAdmin(conf);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws Exception {
            HbaseUtils hbase = new HbaseUtils();
            // 创建一张表
            // hbase.createTable("stu","cf");
            // //查询所有表名
            // hbase.getALLTable();
            // //往表中添加一条记录
            // hbase.addOneRecord("stu","key1","cf","name","zhangsan");
            // hbase.addOneRecord("stu","key1","cf","age","24");
            // //查询一条记录
            // hbase.getKey("stu","key1");
            // //获取表的所有数据
            // hbase.getALLData("stu");
            // //删除一条记录
            // hbase.deleteOneRecord("stu","key1");
            // //删除表
            // hbase.deleteTable("stu");
            // scan过滤器的使用
            // hbase.getScanData("stu","cf","age");
            // rowFilter的使用
            // 84138413_20130313145955
        }
    
        /**
         * rowFilter的使用
         * 
         * @param tableName
         * @param reg
         * @throws Exception
         */
        public void getRowFilter(String tableName, String reg) throws Exception {
            HTable hTable = new HTable(conf, tableName);
            Scan scan = new Scan();
            // Filter
            RowFilter rowFilter = new RowFilter(CompareOp.NOT_EQUAL,
                    new RegexStringComparator(reg));
            scan.setFilter(rowFilter);
            ResultScanner scanner = hTable.getScanner(scan);
            for (Result result : scanner) {
                System.out.println(new String(result.getRow()));
            }
        }
    
        public void getScanData(String tableName, String family, String qualifier)
                throws Exception {
            HTable hTable = new HTable(conf, tableName);
            Scan scan = new Scan();
            scan.addColumn(family.getBytes(), qualifier.getBytes());
            ResultScanner scanner = hTable.getScanner(scan);
            for (Result result : scanner) {
                if (result.raw().length == 0) {
                    System.out.println(tableName + " 表数据为空!");
                } else {
                    for (KeyValue kv : result.raw()) {
                        System.out.println(new String(kv.getKey()) + "	"
                                + new String(kv.getValue()));
                    }
                }
            }
        }
    
        private void deleteTable(String tableName) {
            try {
                if (admin.tableExists(tableName)) {
                    admin.disableTable(tableName);
                    admin.deleteTable(tableName);
                    System.out.println(tableName + "表删除成功!");
                }
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println(tableName + "表删除失败!");
            }
    
        }
    
        /**
         * 删除一条记录
         * 
         * @param tableName
         * @param rowKey
         */
        public void deleteOneRecord(String tableName, String rowKey) {
            HTablePool hTablePool = new HTablePool(conf, 1000);
            HTableInterface table = hTablePool.getTable(tableName);
            Delete delete = new Delete(rowKey.getBytes());
            try {
                table.delete(delete);
                System.out.println(rowKey + "记录删除成功!");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println(rowKey + "记录删除失败!");
            }
        }
    
        /**
         * 获取表的所有数据
         * 
         * @param tableName
         */
        public void getALLData(String tableName) {
            try {
                HTable hTable = new HTable(conf, tableName);
                Scan scan = new Scan();
                ResultScanner scanner = hTable.getScanner(scan);
                for (Result result : scanner) {
                    if (result.raw().length == 0) {
                        System.out.println(tableName + " 表数据为空!");
                    } else {
                        for (KeyValue kv : result.raw()) {
                            System.out.println(new String(kv.getKey()) + "	"
                                    + new String(kv.getValue()));
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        // 读取一条记录
        /*
         * @SuppressWarnings({ "deprecation", "resource" }) public Article
         * get(String tableName, String row) { HTablePool hTablePool = new
         * HTablePool(conf, 1000); HTableInterface table =
         * hTablePool.getTable(tableName); Get get = new Get(row.getBytes());
         * Article article = null; try {
         * 
         * Result result = table.get(get); KeyValue[] raw = result.raw(); if
         * (raw.length == 4) { article = new Article(); article.setId(row);
         * article.setTitle(new String(raw[3].getValue())); article.setAuthor(new
         * String(raw[0].getValue())); article.setContent(new
         * String(raw[1].getValue())); article.setDescribe(new
         * String(raw[2].getValue())); } } catch (IOException e) {
         * e.printStackTrace(); } return article; }
         */
    
        // 添加一条记录
        public void put(String tableName, String row, String columnFamily,
                String column, String data) throws IOException {
            HTablePool hTablePool = new HTablePool(conf, 1000);
            HTableInterface table = hTablePool.getTable(tableName);
            Put p1 = new Put(Bytes.toBytes(row));
            p1.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),
                    Bytes.toBytes(data));
            table.put(p1);
            System.out.println("put'" + row + "'," + columnFamily + ":" + column
                    + "','" + data + "'");
        }
    
        /**
         * 查询所有表名
         * 
         * @return
         * @throws Exception
         */
        public List<String> getALLTable() throws Exception {
            ArrayList<String> tables = new ArrayList<String>();
            if (admin != null) {
                HTableDescriptor[] listTables = admin.listTables();
                if (listTables.length > 0) {
                    for (HTableDescriptor tableDesc : listTables) {
                        tables.add(tableDesc.getNameAsString());
                        System.out.println(tableDesc.getNameAsString());
                    }
                }
            }
            return tables;
        }
    
        /**
         * 创建一张表
         * 
         * @param tableName
         * @param column
         * @throws Exception
         */
        public void createTable(String tableName, String column) throws Exception {
            if (admin.tableExists(tableName)) {
                System.out.println(tableName + "表已经存在!");
            } else {
                HTableDescriptor tableDesc = new HTableDescriptor(tableName);
                tableDesc.addFamily(new HColumnDescriptor(column.getBytes()));
                admin.createTable(tableDesc);
                System.out.println(tableName + "表创建成功!");
            }
        }
    }
  • 相关阅读:
    运算符和表达式详解
    超实用的Java web面试题
    80道最新java基础部分面试题(七)
    80道最新java基础部分面试题(六)
    80道最新java基础部分面试题(五)
    12道算法与编程面试题
    javaee和javase的区别
    2019年最新50道java基础部分面试题(四)
    2019年最新50道java基础部分面试题(三)
    2019年最新50道java基础部分面试题(二)
  • 原文地址:https://www.cnblogs.com/cxzdy/p/4941200.html
Copyright © 2011-2022 走看看