【HBase分布式数据库】第六章 HBase的JavaAPI(3-6)

打印 上一主题 下一主题

主题 874|帖子 874|积分 2622

6.3 HBase的Java API(1)

任务目的
了解pom.xml文件中添加依赖的方式
掌握定名空间的API
任务清单
任务1:pom.xml文件中添加依赖
任务2:定名空间的API
任务步骤

任务1:pom.xml文件中添加依赖

pom.xml文件简介

6.3-1
任务2:定名空间的API

创建Java类
1、在指定包下右键,选择【new】>【class】

6.3-2
2、设置类名

6.3-3
创建定名空间-程序
  1. public class CreateNamespace {
  2.         public static void main(String[] args) throws IOException {
  3.                 //1、获取conf对象
  4.                 Configuration conf = HBaseConfiguration.create();
  5.                 //2、指定hbase的zk地址
  6.                 conf.set("hbase.zookeeper.quorum", "localhost");
  7.                 //3、获取connection
  8.                 Connection con = ConnectionFactory.createConnection(conf);
  9.                 //4、获取hbase的操作对象   
  10.                 Admin admin = con.getAdmin();
  11.                 //5、获取NameSpace的描述对象
  12.                 NamespaceDescriptor nsd = NamespaceDescriptor.create("test_ns").build();
  13.                 //6、真正提交创建
  14.                 admin.createNamespace(nsd);
  15.         //7.关闭连接
  16.                 admin.close();
  17.         //提示语句
  18.                 System.out.println("finished");
  19.         }
  20. }
复制代码
pom.xml文件

6.3-4
执行结果
通过以下指令,检查是否已经天生定名空间test_ns。
  1. bin/hbase shell
  2. list_namespace
复制代码

6.3-5
查看所有定名空间-程序
  1. public class ListAllNamespace {
  2.         public static void main(String[] args) throws IOException {
  3.                 //1、获取conf对象
  4.                 Configuration conf = HBaseConfiguration.create();
  5.                 //2、指定hbase的zk地址
  6.                 conf.set("hbase.zookeeper.quorum", "localhost");
  7.                 //3、获取connection
  8.                 Connection con = ConnectionFactory.createConnection(conf);
  9.                 //4、获取hbase的操作对象   
  10.                 Admin admin = con.getAdmin();
  11.                 //5、获取所有namespace
  12.                 NamespaceDescriptor[] nsd = admin.listNamespaceDescriptors();
  13.                 for (NamespaceDescriptor n : nsd) {
  14.                         System.out.println(n.getName());
  15.                 }
  16.                 admin.close();
  17.                 System.out.println("finished");
  18.         }
  19. }
复制代码
程序截图

6.3-6
执行结果

6.3-7
删除定名空间-程序
  1. public class DeleteNamespace {
  2.         public static void main(String[] args) throws IOException  {
  3.                 //1、获取conf对象
  4.                 Configuration conf = HBaseConfiguration.create();
  5.                 //2、指定hbase的zk地址
  6.                 conf.set("hbase.zookeeper.quorum", "localhost");
  7.                 //3、获取connection
  8.                 Connection con = ConnectionFactory.createConnection(conf);
  9.                 //4、获取hbase的操作对象   
  10.                 Admin admin = con.getAdmin();
  11.                 //5、删除namespace
  12.                 admin.deleteNamespace("test_ns");
  13.                 admin.close();
  14.                 System.out.println("finished");
  15.         }
  16. }
复制代码
程序截图

6.3-8
执行结果
回到hbase的shell情况,测试定名空间test_ns是否存在。
  1. list_namespace
复制代码

6.3-9
6.4 HBase的Java API(2)

任务目的

掌握列出所有表的API
掌握创建表的API
掌握添加数据的API
任务清单



  • 任务1:列出所有表
  • 任务2:创建表
  • 任务3:添加数据
任务步骤

任务1:列出所有表

列出所有表-程序
  1. public class ListTable {
  2.         public static void main(String[] args) throws IOException  {
  3.                 //1、获取conf对象
  4.                 Configuration conf = HBaseConfiguration.create();
  5.                 //2、指定hbase的zk集群地址
  6.                 conf.set("hbase.zookeeper.quorum", "localhost");
  7.                 //3、获取connection
  8.                 Connection con = ConnectionFactory.createConnection(conf);
  9.                 //4、获取hbase的操作对象   
  10.                 Admin admin = con.getAdmin();
  11.                 //5、获取名为hbase的namespace下所有表
  12.                 HTableDescriptor[] htd = admin.listTableDescriptorsByNamespace("hbase");
  13.                 for (HTableDescriptor h: htd) {
  14.                         System.out.println(h.getNameAsString());
  15.                 }
  16.                 admin.close();
  17.                 System.out.println("finished");
  18.         }
  19. }
复制代码
程序截图

6.4-1
执行结果

6.4-2
任务2:创建表
创建表-程序
  1. public class CreateTable {
  2.         public static void main(String[] args) throws IOException {
  3.                 Configuration conf = HBaseConfiguration.create();
  4.                 conf.set("hbase.zookeeper.quorum", "localhost");
  5.                 //获取connection
  6.                 Connection con = ConnectionFactory.createConnection(conf);
  7.                 Admin admin = con.getAdmin();
  8.                 //获取表的描述器
  9.                 HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("ns:t1"));
  10.                 //获取列簇描述器
  11.                 HColumnDescriptor hcd = new HColumnDescriptor("info".getBytes());
  12.                 HColumnDescriptor hcd1 = new HColumnDescriptor("data".getBytes());
  13.                 //为列簇设置属性
  14.                 hcd.setBlocksize(60000);
  15.                 hcd.setTimeToLive(36000000);
  16.                 //将列簇添加到表描述器中
  17.                 htd.addFamily(hcd);
  18.                 htd.addFamily(hcd1);
  19.                 //设置表的属性
  20.                 htd.setDurability(Durability.SKIP_WAL);//写数据时不用写wal
  21.                 //真正提交创建
  22.                 admin.createTable(htd);
  23.                 admin.close();
  24.                 System.out.println("finished");
  25.         }
  26. }
复制代码
程序截图

6.4-3
执行结果-创建测试定名空间
手动创建测试定名空间,必要进入hbase目录下,执行如下指令。
  1. bin/hbase shell
  2. create_namespace 'ns'
复制代码

6.4-4
执行结果-结果
执行程序后,对于控制台的输出以及结果如下。

6.4-5

6.4-6
任务3:添加数据
添加数据-工具类
  1. public final class HbaseUtil {
  2.         //获取连接方法
  3.         public static Connection getConnection() throws IOException{
  4.                 //1、获取conf对象
  5.                 Configuration conf=HBaseConfiguration.create();
  6.                 //2、指定hbase的zk集群地址
  7.                 conf.set("hbase.zookeeper.quorum", "localhost");
  8.                 //3、指定hbase的zk集群的端口号
  9.                 conf.set("hbase.zookeeper.property.clientport", "2181");
  10.                 //4.获取连接
  11.                 Connection con = ConnectionFactory.createConnection(conf);
  12.                 return con;
  13.         }
  14.         //关闭连接方法
  15.         public static void close(Connection con){
  16.                 if(con != null){
  17.                         try {
  18.                                 con.close();
  19.                         } catch (IOException e) {
  20.                                 e.printStackTrace();
  21.                                 System.out.println("failed");
  22.                         }
  23.                 }
  24.         }
  25. }
复制代码
添加数据-程序
  1. public class PutData {
  2.         public static void main(String[] args) throws IOException {
  3.                 //获取连接
  4.                 Connection con=HbaseUtil.getConnection();
  5.                 //获取操作对象
  6.                 Table table=con.getTable(TableName.valueOf("ns:t1"));
  7.                 //获取Put对象
  8.                 Put put=new Put(Bytes.toBytes("r1"));
  9.                 //往put对象里添加值
  10.                 put.addColumn(Bytes.toBytes("info"),
  11.                       Bytes.toBytes("name"),Bytes.toBytes("tom"));
  12.                 put.addColumn(Bytes.toBytes("info"),
  13.                       Bytes.toBytes("age"),Bytes.toBytes("22"));
  14.                 put.addColumn(Bytes.toBytes("info"),
  15.                       Bytes.toBytes("sex"),Bytes.toBytes("woman"));
  16.                 //创建list集合
  17.                 List<Put> listput=new ArrayList<Put>();
  18.                 //将put对象添加到集合中
  19.                 listput.add(put);
  20.                 //插入数据
  21.                 table.put(listput);
  22.                 table.close();
  23.                 HbaseUtil.close(con);
  24.                 System.out.println("finished");
  25.         }
  26. }
复制代码
程序截图
6.4-7

6.4-7
执行结果
运行程序后,到hbase的shell情况查看表中数据。
  1. scan 'ns:t1'
复制代码

6.4-8
6.5 HBase的Java API(3)

任务目的
掌握修改数据的API
掌握查询数据的API
任务清单
任务1:修改数据
任务2:查询数据
任务步骤

任务1:修改数据

修改数据-程序

6.5-1
执行结果

6.5-2
任务2:查询数据

单行查询-程序
  1. public class GetData {
  2.         public static void main(String[] args) throws IOException {
  3.                 //获取连接
  4.                 Connection con=HbaseUtil.getConnection();
  5.                 //获取操作对象
  6.                 Table table=con.getTable(TableName.valueOf("ns:t1"));
  7.                 //获取get对象
  8.                 Get get=new Get(Bytes.toBytes("r1"));
  9.                 //获取结果集
  10.                 Result rs=table.get(get);
  11.                 //循环输出
  12.                 for(Cell cell: rs.listCells()){
  13.                         System.out.println("rk:"+"r1"+"\t");
  14.                         System.out.print("cf:"+Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength())+"\t");
  15.                         System.out.print("column:"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"\t");
  16.                         System.out.print("value:"+Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())+"\t");
  17.                         System.out.println("timestamp:"+cell.getTimestamp());
  18.                 }
  19.                 table.close();
  20.                 //关闭连接
  21.                 HbaseUtil.close(con);       
  22.         }
  23. }
复制代码
程序截图

6.5-3
执行结果

6.5-4
扫描全表数据-准备工作
当下表内只有一个行键即r1,为了更好看到结果,必要再添加一些数据。执行PutData程序,为表添加以下数据。

6.5-5
扫描全表数据-程序
  1. public class ScanData {
  2.         public static void main(String[] args) throws IOException {
  3.         //调用方法
  4.         getAllRowData("ns:t1");
  5.         }
  6.     public static void getAllRowData(String tableName) throws IOException{
  7.         //获取连接信息
  8.         Connection con = HbaseUtil.getConnection();
  9.         //实例化Table操作对象,指定表名
  10.                 Table table=con.getTable(TableName.valueOf(tableName));
  11.         //示例化扫描器
  12.                 Scan scan=new Scan();
  13.         //实例化结果集传入扫描器
  14.                 ResultScanner rs=table.getScanner(scan);
  15.         //对结果集遍历
  16.                 for(Result r : rs){
  17.             //调用自定义方法
  18.                         getResult(r);
  19.                 }
  20.         //关闭操作对象和连接信息
  21.                 table.close();
  22.         HbaseUtil.close();
  23.         }
  24.     private static void getResult(Result r){
  25.                 if(r != null){
  26.                  for(Cell cell : r.listCells()){
  27.                            System.out.print("rk:"+new String(CellUtil.cloneRow(cell))+"\t");
  28.                            System.out.print("cf:"+new String(CellUtil.cloneFamily(cell))+"\t");
  29.                            System.out.print("column:"+new String(CellUtil.cloneQualifier(cell))+"\t");
  30.                            System.out.print("value:"+new String(CellUtil.cloneValue(cell))+"\t");
  31.                            System.out.println("timestamp:"+cell.getTimestamp());
  32.                    }
  33.                 }
  34.         }
  35. }
复制代码
执行结果

6.5-6
范围数据查询-程序
  1. public class ScanRangeData {
  2.         public static void main(String[] args) throws IOException {
  3.         //调用方法
  4.         getRangeData("ns:t1","r1","r2");
  5.         }
  6.     public static void getRangeRowData(String tablename,String startRow,String stopRow) throws IOException{
  7.                 Connection con = HbaseUtil.getConnection();
  8.                 Table table = con.getTable(TableName.valueOf(tablename));
  9.                 //获取scan对象
  10.                 Scan scan = new Scan();
  11.                 //定义要扫描的列
  12.                 scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"));
  13.                 scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
  14.                 //设置开始行建
  15.                 scan.setStartRow(Bytes.toBytes(startRow));
  16.                 //设置结束行建
  17.                 scan.setStopRow(Bytes.toBytes(stopRow));
  18.                 ResultScanner rs = table.getScanner(scan);
  19.                 for(Result r : rs){
  20.                         getResult(r);
  21.                 }
  22.                 rs.close();
  23.                 HbaseUtil.close(con);
  24.         }
  25.     private static void getResult(Result r){
  26.                 if(r != null){
  27.                  for(Cell cell : r.listCells()){
  28.                            System.out.print("rk:"+new String(CellUtil.cloneRow(cell))+"\t");
  29.                            System.out.print("cf:"+new String(CellUtil.cloneFamily(cell))+"\t");
  30.                            System.out.print("column:"+new String(CellUtil.cloneQualifier(cell))+"\t");
  31.                            System.out.print("value:"+new String(CellUtil.cloneValue(cell))+"\t");
  32.                            System.out.println("timestamp:"+cell.getTimestamp());
  33.                    }
  34.                 }
  35.         }
  36. }
复制代码
执行结果

6.5-7
6.6 HBase的Java API(4)

任务目的
掌握删除数据的API
掌握修改表的API
掌握删除表的API
任务清单
任务1:删除数据
任务2:修改表
任务3:删除表
任务步骤

任务1:删除数据

删除整行-程序
  1. //删除整行数据
  2. public class DeleteDate1 {
  3.         public static void main(String[] args) throws IOException {
  4.         //获取连接信息
  5.                 Connection conn=HbaseUtil.getConnection();
  6.         //指定表名
  7.                 Table table=conn.getTable(TableName.valueOf("ns:t1"));
  8.         //实例化Delete对象,指定要删除的行键
  9.                 Delete delete=new Delete(Bytes.toBytes("r2"));
  10.         //执行删除
  11.                 table.delete(delete);
  12.         //关闭连接
  13.                 table.close();
  14.         HbaseUtil.close();
  15.         System.out.println("finished")
  16.         }
  17. }
复制代码
执行结果

6.6-1
删除单列数据-程序
  1. //删除单列数据
  2. public class DeleteDate2 {
  3.         public static void main(String[] args) throws IOException {
  4.         //获取连接信息
  5.                 Connection conn=HbaseUtil.getConnection();
  6.         //指定表名
  7.                 Table table=conn.getTable(TableName.valueOf("ns:t1"));
  8.         //实例化Delete对象,指定要删除的行键
  9.                 Delete delete=new Delete(Bytes.toBytes("r1"));
  10.         //指定删除列族中哪个列
  11.         delete.addColumn(Bytes.toBytes("info"), Bytes.toBytes("sex"));
  12.         //执行删除
  13.                 table.delete(delete);
  14.         //关闭连接
  15.                 table.close();
  16.         HbaseUtil.close();
  17.         System.out.println("finished")
  18.         }
  19. }
复制代码
执行结果

6.6-2
任务2:修改表

新增列族-程序
  1. public class AddColumnFamily{
  2.         public static void main(String[] args){
  3.         //获取连接信息
  4.             Connection con = HbaseUtil.getConnection();
  5.         //实例化操作对象
  6.         Admin admin = con.getAdmin();
  7.         //指定表名
  8.         TableName tableName = TableName.valueOf("ns:t1");
  9.         //判断表是否存在
  10.         if(admin.tableExists(tableName)){
  11.                 //实例化表描述器
  12.             HTableDescriptor htd = admin.getTableDescriptor(tableName);
  13.             //实例化列族描述器,并指定新的列族名
  14.             HColumnDescriptor hcd = new HColumnDescriptor("animal".getBytes());
  15.             //列族描述器传入表描述器
  16.             htd.addFamily(hcd);
  17.             //更新表
  18.             admin.modifyTable(tableName,htd);
  19.         }
  20.         HbaseUtil.close(con);
  21.         System.out.println("finished");
  22.     }
  23. }
复制代码
执行结果

6.6-3
删除列族-程序
  1. public class DeleteColumnFamily{
  2.         public static void main(String[] args){
  3.             //获取连接信息
  4.             Connection con = HbaseUtil.getConnection();
  5.         //实例化操作对象
  6.         Admin admin = con.getAdmin();
  7.         //指定表名
  8.         TableName tableName = TableName.valueOf("ns:t1");       
  9.         //操作对象调取删除列族的方法
  10.         admin.deleteColumn(tableName,Bytes.toBytes("animal"));
  11.             //关闭
  12.         HbaseUtil.close(con);
  13.         System.out.println("finished");
  14.     }
  15. }
复制代码
执行结果

6.6-4
任务3:删除表

删除表-程序
  1. public class DeleteTable{
  2.         public static void main(String[] args){
  3.             //获取连接信息
  4.             Connection con = HbaseUtil.getConnection();
  5.         //实例化操作对象
  6.         Admin admin = con.getAdmin();
  7.         //指定表名
  8.         TableName tableName = TableName.valueOf("ns:t1");       
  9.         //判断表是否存在
  10.         if(admin.tableExists(tableName)){
  11.             //存在就调用deleteTable方法进行删除
  12.                 admin.deleteTable(tableName);
  13.         }
  14.             //关闭
  15.         HbaseUtil.close(con);
  16.         System.out.println("finished");
  17.     }
  18. }
复制代码
执行结果

6.6-5

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表