环境:centos7+hadoop3.0.3+hbase2.0.1+jdk8
HBase开发
测试代码准备
|
|
连接HBase
同步连接
12345678// 设置HBase配置信息conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","hadoop5:2181");conf.set("hbase.master.dns.interface","hadoop5");pool = Executors.newFixedThreadPool(10); // 创建线程池conn = ConnectionFactory.createConnection(conf,pool); // 创建连接池admin = conn.getAdmin(); // 创建表的管理类System.out.println("获取同步连接成功");异步连接
123456789101112131415161718//异步获取hbase连接方式@Testpublic void asynctest() throws Exception {// 设置HBase配置信息Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "hadoop5:2181");conf.set("hbase.master.dns.interface", "hadoop5");System.out.println("开始获取连接");// 获取异步连接对象CompletableFuture<AsyncConnection> aconn = ConnectionFactory.createAsyncConnection(conf);System.out.println("请等待");// 设置超时时长,单位为毫秒AsyncConnection conn = aconn.get(1000,TimeUnit.MILLISECONDS);System.out.println("获取异步连接成功");ExecutorService pool = Executors.newFixedThreadPool(2);AsyncAdmin admin = conn.getAdmin(pool);conn.close();}
命名空间
创建命名空间
123456789//创建命名空间@Testpublic void createNS() throws IOException {// 创建命名空间描述类的对象,并指定命名空间的名称NamespaceDescriptor des = NamespaceDescriptor.create("IMUT").build();// 通过表的管理类的对象创建命名空间admin.createNamespace(des);System.out.println("命名空间创建成功");}删除命名空间
12345678//删除命名空间@Testpublic void deleteNS() throws IOException {// 通过表的管理类的对象删除指定的命名空间// 需要先清空命名空间所有表admin.deleteNamespace("IMUT");System.out.println("命名空间删除成功");}
创建表
同步创建表
12345678910111213141516171819202122//同步创建表@Testpublic void createTBSync() throws Exception{// 创建表的描述类的Builder,HTableDescriptorBuilder// 设置表名TableDescriptorBuilder tbbuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("IMUT:employee_sync"));// 创建列族的描述类的Builder,ColumnFamilyDescriptorBuilder// 设置列族名ColumnFamilyDescriptorBuilder cfbuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("baseinfo"));// 设置该列族的属性=>最大版本数为10cfbuilder.setMaxVersions(10);// 通过建造者模式获取列族描述类的对象ColumnFamilyDescriptor cf = cfbuilder.build();// 将该列族组装到表的Bulider对象上tbbuilder.setColumnFamily(cf);// 通过建造者模式获取表的描述类的对象TableDescriptor td = tbbuilder.build();System.out.println("命令开始");// 通过表管理类的对象admin创建表并指定分区admin.createTable(td, new byte[][]{{10}, {20}});System.out.println("表创建完毕");}异步创建表
12345678910111213141516171819202122232425//异步创建表@Testpublic void createTBAsync() throws Exception{// 创建表的描述类的Builder,HTableDescriptorBuilder// 设置表名TableDescriptorBuilder tbbuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("IMUT:employee_async"));// 创建列族的描述类的Builder,ColumnFamilyDescriptorBuilder// 设置列族名ColumnFamilyDescriptorBuilder cfbuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("baseinfo"));// 设置该列族的属性=>最大版本数为10cfbuilder.setMaxVersions(10);// 通过建造者模式获取列族描述类的对象ColumnFamilyDescriptor cf = cfbuilder.build();// 将该列族组装到表的Bulider对象上tbbuilder.setColumnFamily(cf);// 通过建造者模式获取表的描述类的对象TableDescriptor td = tbbuilder.build();System.out.println("命令发出");// 通过表管理类的对象admin异步创建表并指定分区Future<Void> future = admin.createTableAsync(td, new byte[][]{Bytes.toBytes("10"), Bytes.toBytes("20"),Bytes.toBytes("30")});System.out.println("等待结果");// 设置超时时长Void aVoid = future.get(5000, TimeUnit.MILLISECONDS);System.out.println("表创建成功");}
删除表
同步删除表
1234567891011//同步删除表@Testpublic void deleteTBSync() throws Exception {System.out.println("开始删除表");// 第一步:通过表的管理类的对象禁用要删除的表admin.disableTable(TableName.valueOf("IMUT:employee_sync"));System.out.println("禁用表成功");// 第二步:通过表的管理类的对象删除被禁用的表admin.deleteTable(TableName.valueOf("IMUT:employee_sync"));System.out.println("删除表成功");}异步删除表
12345678910111213//异步删除表@Testpublic void deleteTBAsync() throws Exception {System.out.println("开始删除表");// 第一步:通过表的管理类的对象异步禁用要删除的表,并设置超时时长Future<Void> f1 = admin.disableTableAsync(TableName.valueOf("IMUT:employee_async"));Void v1 = f1.get(1000, TimeUnit.MILLISECONDS);System.out.println("禁用表成功");// 第二步:通过表的管理类的对象异步删除被禁用的表,并设置超时时长Future<Void> f2 = admin.deleteTableAsync(TableName.valueOf("IMUT:employee_async"));Void v2 = f2.get(1000, TimeUnit.MILLISECONDS);System.out.println("删除表成功");}
添加数据
|
|
获取数据
|
|
扫描(过滤器)
扫描全表
1234567891011121314// 扫描@Testpublic void scanTest() throws IOException {// 通过表名获取到指定表table = conn.getTable(TableName.valueOf("IMUT:employee_sync"));// 创建扫描的操作类的对象Scan scan = new Scan();// 将扫描得到的结果返回到结果集中ResultScanner scanner = table.getScanner(scan);// 遍历打印所有符合条件的行for (Result result : scanner) {showResult(result);}}过滤器
12345678910111213141516171819202122232425262728293031323334353637383940414243// 扫描@Testpublic void scanTest() throws IOException {// 通过表名获取到指定表table = conn.getTable(TableName.valueOf("IMUT:employee_sync"));// 创建扫描的操作类的对象Scan scan = new Scan();// ---------有关行键的过滤器---------// 行键前缀过滤器Filter f = new PrefixFilter(Bytes.toBytes("15"));// 只扫描行键的过滤器,不获取值// Filter f = new KeyOnlyFilter();// 随机行过滤器,按比例获取随机行数// Filter f = new RandomRowFilter(0.5f);// 行范围过滤器// List<MultiRowRangeFilter.RowRange> list = new ArrayList<>();// list.add(new MultiRowRangeFilter.RowRange("1001",true,"1004",true));// Filter f = new MultiRowRangeFilter(list);// 行键过滤器,可以通过提供不同比较器实现不同功能,如匹配行键前缀// Filter f = new RowFilter(CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("10")));// 列族相关过滤器,匹配正则表达式// Filter f = new FamilyFilter(CompareOperator.EQUAL, new RegexStringComparator(".*base.*"));// 列相关过滤器,获得前n列过滤器// Filter f = new ColumnCountGetFilter(1);// 列分页过滤器 基于ColumnPaginationFilter,参数1 获得n列 参数2 从第n列开始获取// Filter f = new ColumnPaginationFilter(3,1);// 列名前缀过滤器// Filter f = new ColumnPrefixFilter(Bytes.toBytes("na"));// 列名范围过滤器// Filter f = new ColumnRangeFilter(Bytes.toBytes("aaa"),true,Bytes.toBytes("ccc"),true);// 匹配某列族某列某值的过滤器// Filter f = new ColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("age"),CompareOperator.EQUAL,Bytes.toBytes("20"));// 根据值的比较过滤行// Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*t.*"));// 设置扫描的过滤器scan.setFilter(f);// 将扫描得到的结果返回到结果集中ResultScanner scanner = table.getScanner(scan);// 遍历打印所有符合条件的行for (Result result : scanner) {showResult(result);}}
最后更新: 2018年10月08日 18:25