基于Java开发HBase篇

import java.io.File;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

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.Admin;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Delete;

import org.apache.hadoop.hbase.client.Get;

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.Table;

import org.apache.hadoop.hbase.filter.BinaryComparator;

import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;

import org.apache.hadoop.hbase.filter.FamilyFilter;

import org.apache.hadoop.hbase.filter.QualifierFilter;

import org.apache.hadoop.hbase.filter.RegexStringComparator;

import org.apache.hadoop.hbase.filter.RowFilter;

import org.apache.hadoop.hbase.filter.SubstringComparator;

import org.apache.hadoop.hbase.filter.ValueFilter;

import org.apache.hadoop.hbase.util.Bytes;

import com.clearspring.analytics.stream.membership.Filter;

public class HBaseSample {

private Configuration conf = null;

private Connection conn = null;

private Admin hbAdmin = null;

public void init() throws IOException {

        String proDir = System.getProperty("user.dir");

        System.out.println(proDir);

        String baseDir = proDir + File.separator + "conf";

        // 获取core-site.xml文件

        String corePath = baseDir + File.separator + "core-site.xml";

        // 获取hdfs-site.xml文件

        String hdfsPath = baseDir + File.separator + "hdfs-site.xml";

        // 获取hbase-site.xml文件

        String hbasePath = baseDir + File.separator + "hbase-site.xml";

        conf = new Configuration();

        conf.addResource(new Path(corePath));

        conf.addResource(new Path(hdfsPath));

        conf.addResource(new Path(hbasePath));

        //                conf.set("fs.defaultFS", "hdfs://hadoop:9000");

        conf.set("hbase.zookeeper.quorum", "hadoop:2181");

        // 创建链接

        conn = ConnectionFactory.createConnection(conf);

        hbAdmin = conn.getAdmin();

}

// 表创建

public void create() throws IOException {

TableName tableName = TableName.valueOf("mytest"); //定义表明

        if (!hbAdmin.tableExists(tableName)){

                //定义表对象

                HTableDescriptor tabledesc = new HTableDescriptor(tableName);

                // 定义列族对象

                HColumnDescriptor hbColumnDescriptor1 = new                HColumnDescriptor(Bytes.toBytes("info1"));// 定义列族对象

                // hbase数据类型只有Bytes类型 通过bytes.tobytes 方法进行封装 返回result 需要通过Bytes.toString()转化为String对象

                HColumnDescriptor hbColumnDescriptor2 = new                 HColumnDescriptor(Bytes.toBytes("info2"));

                // 列族是放到表中的,把两个列族添加到表中

                tabledesc.addFamily(hbColumnDescriptor1); // 在表中添加列族1

                tabledesc.addFamily(hbColumnDescriptor2); // 在表中添加列族2

                // 创建表

                hbAdmin.createTable(tabledesc);

        }

}

// 禁用表:可以通过listexists命令查看,但scan扫描不到它

public void disable() throws IOException {

        TableName tableName = TableName.valueOf("mytest");

        hbAdmin.disableTable(tableName);

}

// 启用表

public void enable() throws IOException {

        TableName tableName = TableName.valueOf("mytest");

        hbAdmin.enableTable(tableName);

}

// 删除表

public void drop() throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        hbAdmin.enableTable(tableName);

}

// 增加单元格

public void put() throws IOException {

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        // 定义行键

        Put put = new Put(Bytes.toBytes("aa"));

        // 定义列族

        put.addColumn(Bytes.toBytes("info2"), Bytes.toBytes("like"), Bytes.toBytes("apple"));

        table.put(put);

}

// 删除单元格

public void testDelete() throws IOException {

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Delete delete = new Delete(Bytes.toBytes("aa"));

        delete.addColumn(Bytes.toBytes("info1"), Bytes.toBytes("name"));

        table.delete(delete);

}

// 查询数据 get

public void testGet() throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Get get = new Get(Bytes.toBytes("aa")); // 指定行键

        get.addFamily(Bytes.toBytes("info1")); // 指定列族

        Result result = table.get(get);

        for (Cell cell : result.rawCells()) {

                System.out.print("行键"+Bytes.toString(CellUtil.cloneRow(cell))+"\t");

                System.out.print("列族"+Bytes.toString(CellUtil.cloneFamily(cell))+"\t");

                System.out.print("列名"+Bytes.toString(CellUtil.cloneQualifier(cell))+"\t");

                System.out.println("值"+Bytes.toString(CellUtil.cloneValue(cell))+"\t");

        }

}

// scan扫描

public void testScan() throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Scan scan = new Scan(); // 指定扫描region当中的对象

        ResultScanner scanner = table.getScanner(scan); // 返回resultScanner的对象

        this.showResult(scanner);

}

private void showResult(ResultScanner scanner){

        for(Result result:scanner){

                Cell[] cells = result.rawCells();

                for(Cell cell: cells){

                        System.out.print("行键"+Bytes.toString(CellUtil.cloneRow(cell))+"\t");

                        System.out.print("列族"+Bytes.toString(CellUtil.cloneFamily(cell))+"\t");

                        System.out.print("列名"+Bytes.toString(CellUtil.cloneQualifier(cell))+"\t");

                        System.out.println("值"+Bytes.toString(CellUtil.cloneValue(cell))+"\t");

                }

        }

}

// 过滤filter

// rowkey过滤器扫描

public void filterScan () throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Scan scan = new Scan();

        // 正则表达式匹配

        RowFilter filter = new RowFilter(CompareOp.EQUAL, new         RegexStringComparator("^[a]+$"));

        scan.setFilter(filter);

        // 过滤之后扫描输出

        this.showResult(table.getScanner(scan));

}

// CF列族过滤器

public void familyFilterScan() throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Scan scan = new Scan();

        FamilyFilter familyFilter = new FamilyFilter(CompareOp.EQUAL, new         BinaryComparator(Bytes.toBytes("info1")));

        scan.setFilter(familyFilter);

        this.showResult(table.getScanner(scan));

}

// 列标识过滤

public void qualifierScan() throws IOException{

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Scan scan = new Scan();

        QualifierFilter qualifierFilter = new QualifierFilter(CompareOp.EQUAL, new         BinaryComparator(Bytes.toBytes("name")));

        scan.setFilter(qualifierFilter);

        this.showResult(table.getScanner(scan));

}

// 值过滤

public void valueScan() throws IOException {

        TableName tableName = TableName.valueOf("mytest");

        Table table = conn.getTable(tableName);

        Scan scan = new Scan();

        ValueFilter valueFilter = new ValueFilter(CompareOp.EQUAL, new         SubstringComparator("18"));

        scan.setFilter(valueFilter);

        this.showResult(table.getScanner(scan));

}

public static void main(String[] args) throws IOException {

       // TODO Auto-generated method stub

        HBaseSample hbBaseSample = new HBaseSample();

        // 初始化

        hbBaseSample.init();

        // 创建表

        //                hbBaseSample.create();

        // 禁用表

        //                hbBaseSample.disable();

        // 启用表

        //                hbBaseSample.enable();

        // 添加单元格

        //                hbBaseSample.put();

        // 删除单元格

        //                hbBaseSample.testDelete();

        // 按行查询

        //                hbBaseSample.testGet();

        // 扫描

        //                hbBaseSample.testScan();

        // rowkey过滤器扫描

        //                hbBaseSample.filterScan();

        // CF列族过滤器

        //                hbBaseSample.familyFilterScan();

        // 列标识符过滤器

        //                hbBaseSample.qualifierScan();

        // 值过滤

        //                hbBaseSample.valueScan();

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值