0


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

6.3 HBase的Java API(1)

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

任务步骤

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

pom.xml文件简介

6.3-1

6.3-1

任务2:命名空间的API

创建Java类

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

6.3-2

6.3-2

2、设置类名

6.3-3

6.3-3

创建命名空间-程序

publicclassCreateNamespace{publicstaticvoidmain(String[] args)throwsIOException{//1、获取conf对象 Configuration conf =HBaseConfiguration.create();//2、指定hbase的zk地址
        conf.set("hbase.zookeeper.quorum","localhost");//3、获取connectionConnection con =ConnectionFactory.createConnection(conf);//4、获取hbase的操作对象   Admin admin = con.getAdmin();//5、获取NameSpace的描述对象NamespaceDescriptor nsd =NamespaceDescriptor.create("test_ns").build();//6、真正提交创建
        admin.createNamespace(nsd);//7.关闭连接
        admin.close();//提示语句System.out.println("finished");}}

pom.xml文件

6.3-1

6.3-4

执行结果

通过以下指令,检查是否已经生成命名空间test_ns。

bin/hbase shell
list_namespace

6.3-5

6.3-5

查看所有命名空间-程序

publicclassListAllNamespace{publicstaticvoidmain(String[] args)throwsIOException{//1、获取conf对象 Configuration conf =HBaseConfiguration.create();//2、指定hbase的zk地址
        conf.set("hbase.zookeeper.quorum","localhost");//3、获取connectionConnection con =ConnectionFactory.createConnection(conf);//4、获取hbase的操作对象   Admin admin = con.getAdmin();//5、获取所有namespaceNamespaceDescriptor[] nsd = admin.listNamespaceDescriptors();for(NamespaceDescriptor n : nsd){System.out.println(n.getName());}
        admin.close();System.out.println("finished");}}

程序截图

6.3-6

6.3-6

执行结果

6.3-7

6.3-7

删除命名空间-程序

publicclassDeleteNamespace{publicstaticvoidmain(String[] args)throwsIOException{//1、获取conf对象 Configuration conf =HBaseConfiguration.create();//2、指定hbase的zk地址
        conf.set("hbase.zookeeper.quorum","localhost");//3、获取connectionConnection con =ConnectionFactory.createConnection(conf);//4、获取hbase的操作对象   Admin admin = con.getAdmin();//5、删除namespace
        admin.deleteNamespace("test_ns");
        admin.close();System.out.println("finished");}}

程序截图

6.3-8

6.3-8

执行结果

回到hbase的shell环境,测试命名空间test_ns是否存在。

list_namespace

6.3-9

6.3-9

6.4 HBase的Java API(2)

任务目的

掌握列出所有表的API
掌握创建表的API
掌握添加数据的API

任务清单

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

任务步骤

任务1:列出所有表

列出所有表-程序

publicclassListTable{publicstaticvoidmain(String[] args)throwsIOException{//1、获取conf对象 Configuration conf =HBaseConfiguration.create();//2、指定hbase的zk集群地址
        conf.set("hbase.zookeeper.quorum","localhost");//3、获取connectionConnection con =ConnectionFactory.createConnection(conf);//4、获取hbase的操作对象   Admin admin = con.getAdmin();//5、获取名为hbase的namespace下所有表HTableDescriptor[] htd = admin.listTableDescriptorsByNamespace("hbase");for(HTableDescriptor h: htd){System.out.println(h.getNameAsString());}
        admin.close();System.out.println("finished");}}

程序截图

6.4-1

6.4-1

执行结果

6.4-2

6.4-2

任务2:创建表
创建表-程序

publicclassCreateTable{publicstaticvoidmain(String[] args)throwsIOException{Configuration conf =HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum","localhost");//获取connectionConnection con =ConnectionFactory.createConnection(conf);Admin admin = con.getAdmin();//获取表的描述器HTableDescriptor htd =newHTableDescriptor(TableName.valueOf("ns:t1"));//获取列簇描述器HColumnDescriptor hcd =newHColumnDescriptor("info".getBytes());HColumnDescriptor hcd1 =newHColumnDescriptor("data".getBytes());//为列簇设置属性
        hcd.setBlocksize(60000);
        hcd.setTimeToLive(36000000);//将列簇添加到表描述器中
        htd.addFamily(hcd);
        htd.addFamily(hcd1);//设置表的属性
        htd.setDurability(Durability.SKIP_WAL);//写数据时不用写wal//真正提交创建
        admin.createTable(htd);
        admin.close();System.out.println("finished");}}

程序截图

6.4-3

6.4-3

执行结果-创建测试命名空间

手动创建测试命名空间,需要进入hbase目录下,执行如下指令。

bin/hbase shell
create_namespace 'ns'

6.4-4

6.4-4

执行结果-结果

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

6.4-5

6.4-5

6.4-6

6.4-6

任务3:添加数据
添加数据-工具类

publicfinalclassHbaseUtil{//获取连接方法publicstaticConnectiongetConnection()throwsIOException{//1、获取conf对象 Configuration conf=HBaseConfiguration.create();//2、指定hbase的zk集群地址
        conf.set("hbase.zookeeper.quorum","localhost");//3、指定hbase的zk集群的端口号
        conf.set("hbase.zookeeper.property.clientport","2181");//4.获取连接Connection con =ConnectionFactory.createConnection(conf);return con;}//关闭连接方法publicstaticvoidclose(Connection con){if(con !=null){try{
                con.close();}catch(IOException e){
                e.printStackTrace();System.out.println("failed");}}}}

添加数据-程序

publicclassPutData{publicstaticvoidmain(String[] args)throwsIOException{//获取连接Connection con=HbaseUtil.getConnection();//获取操作对象Table table=con.getTable(TableName.valueOf("ns:t1"));//获取Put对象Put put=newPut(Bytes.toBytes("r1"));//往put对象里添加值
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("tom"));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes("22"));
        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("sex"),Bytes.toBytes("woman"));//创建list集合List<Put> listput=newArrayList<Put>();//将put对象添加到集合中
        listput.add(put);//插入数据
        table.put(listput);
        table.close();HbaseUtil.close(con);System.out.println("finished");}}

程序截图

6.4-7
在这里插入图片描述
6.4-7

执行结果

运行程序后,到hbase的shell环境查看表中数据。

scan 'ns:t1'

6.4-8
6.4-8

6.5 HBase的Java API(3)

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

任务步骤

任务1:修改数据

修改数据-程序

6.5-1

6.5-1

执行结果

6.5-2

6.5-2

任务2:查询数据

单行查询-程序

publicclassGetData{publicstaticvoidmain(String[] args)throwsIOException{//获取连接Connection con=HbaseUtil.getConnection();//获取操作对象Table table=con.getTable(TableName.valueOf("ns:t1"));//获取get对象Get get=newGet(Bytes.toBytes("r1"));//获取结果集Result rs=table.get(get);//循环输出for(Cell cell: rs.listCells()){System.out.println("rk:"+"r1"+"\t");System.out.print("cf:"+Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength())+"\t");System.out.print("column:"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"\t");System.out.print("value:"+Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())+"\t");System.out.println("timestamp:"+cell.getTimestamp());}
        table.close();//关闭连接HbaseUtil.close(con);}}

程序截图

6.5-3

6.5-3

执行结果

6.5-4

6.5-4

扫描全表数据-准备工作

当下表内只有一个行键即r1,为了更好看到效果,需要再添加一些数据。执行PutData程序,为表添加以下数据。

6.5-5
6.5-5

扫描全表数据-程序

publicclassScanData{publicstaticvoidmain(String[] args)throwsIOException{//调用方法getAllRowData("ns:t1");}publicstaticvoidgetAllRowData(String tableName)throwsIOException{//获取连接信息Connection con =HbaseUtil.getConnection();//实例化Table操作对象,指定表名Table table=con.getTable(TableName.valueOf(tableName));//示例化扫描器Scan scan=newScan();//实例化结果集传入扫描器ResultScanner rs=table.getScanner(scan);//对结果集遍历for(Result r : rs){//调用自定义方法getResult(r);}//关闭操作对象和连接信息
        table.close();HbaseUtil.close();}privatestaticvoidgetResult(Result r){if(r !=null){for(Cell cell : r.listCells()){System.out.print("rk:"+newString(CellUtil.cloneRow(cell))+"\t");System.out.print("cf:"+newString(CellUtil.cloneFamily(cell))+"\t");System.out.print("column:"+newString(CellUtil.cloneQualifier(cell))+"\t");System.out.print("value:"+newString(CellUtil.cloneValue(cell))+"\t");System.out.println("timestamp:"+cell.getTimestamp());}}}}

执行结果
6.5-6

6.5-6

范围数据查询-程序

publicclassScanRangeData{publicstaticvoidmain(String[] args)throwsIOException{//调用方法getRangeData("ns:t1","r1","r2");}publicstaticvoidgetRangeRowData(String tablename,String startRow,String stopRow)throwsIOException{Connection con =HbaseUtil.getConnection();Table table = con.getTable(TableName.valueOf(tablename));//获取scan对象Scan scan =newScan();//定义要扫描的列
        scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"));
        scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));//设置开始行建
        scan.setStartRow(Bytes.toBytes(startRow));//设置结束行建
        scan.setStopRow(Bytes.toBytes(stopRow));ResultScanner rs = table.getScanner(scan);for(Result r : rs){getResult(r);}
        rs.close();HbaseUtil.close(con);}privatestaticvoidgetResult(Result r){if(r !=null){for(Cell cell : r.listCells()){System.out.print("rk:"+newString(CellUtil.cloneRow(cell))+"\t");System.out.print("cf:"+newString(CellUtil.cloneFamily(cell))+"\t");System.out.print("column:"+newString(CellUtil.cloneQualifier(cell))+"\t");System.out.print("value:"+newString(CellUtil.cloneValue(cell))+"\t");System.out.println("timestamp:"+cell.getTimestamp());}}}}

执行结果
6.5-7
6.5-7

6.6 HBase的Java API(4)

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

任务步骤

任务1:删除数据

删除整行-程序

//删除整行数据publicclassDeleteDate1{publicstaticvoidmain(String[] args)throwsIOException{//获取连接信息Connection conn=HbaseUtil.getConnection();//指定表名Table table=conn.getTable(TableName.valueOf("ns:t1"));//实例化Delete对象,指定要删除的行键Delete delete=newDelete(Bytes.toBytes("r2"));//执行删除
        table.delete(delete);//关闭连接
        table.close();HbaseUtil.close();System.out.println("finished")}}

执行结果

6.6-1

6.6-1

删除单列数据-程序

//删除单列数据publicclassDeleteDate2{publicstaticvoidmain(String[] args)throwsIOException{//获取连接信息Connection conn=HbaseUtil.getConnection();//指定表名Table table=conn.getTable(TableName.valueOf("ns:t1"));//实例化Delete对象,指定要删除的行键Delete delete=newDelete(Bytes.toBytes("r1"));//指定删除列族中哪个列
        delete.addColumn(Bytes.toBytes("info"),Bytes.toBytes("sex"));//执行删除
        table.delete(delete);//关闭连接
        table.close();HbaseUtil.close();System.out.println("finished")}}

执行结果

6.6-2

6.6-2

任务2:修改表

新增列族-程序

publicclassAddColumnFamily{publicstaticvoidmain(String[] args){//获取连接信息Connection con =HbaseUtil.getConnection();//实例化操作对象Admin admin = con.getAdmin();//指定表名TableName tableName =TableName.valueOf("ns:t1");//判断表是否存在if(admin.tableExists(tableName)){//实例化表描述器HTableDescriptor htd = admin.getTableDescriptor(tableName);//实例化列族描述器,并指定新的列族名HColumnDescriptor hcd =newHColumnDescriptor("animal".getBytes());//列族描述器传入表描述器
            htd.addFamily(hcd);//更新表
            admin.modifyTable(tableName,htd);}HbaseUtil.close(con);System.out.println("finished");}}

执行结果

6.6-3

6.6-3

删除列族-程序

publicclassDeleteColumnFamily{publicstaticvoidmain(String[] args){//获取连接信息Connection con =HbaseUtil.getConnection();//实例化操作对象Admin admin = con.getAdmin();//指定表名TableName tableName =TableName.valueOf("ns:t1");//操作对象调取删除列族的方法
        admin.deleteColumn(tableName,Bytes.toBytes("animal"));//关闭HbaseUtil.close(con);System.out.println("finished");}}

执行结果

6.6-4

6.6-4

任务3:删除表

删除表-程序

publicclassDeleteTable{publicstaticvoidmain(String[] args){//获取连接信息Connection con =HbaseUtil.getConnection();//实例化操作对象Admin admin = con.getAdmin();//指定表名TableName tableName =TableName.valueOf("ns:t1");//判断表是否存在if(admin.tableExists(tableName)){//存在就调用deleteTable方法进行删除
            admin.deleteTable(tableName);}//关闭HbaseUtil.close(con);System.out.println("finished");}}

执行结果

6.6-5

6.6-5


本文转载自: https://blog.csdn.net/qq_23934063/article/details/140887269
版权归原作者 不太灵光的程序员 所有, 如有侵权,请联系我们删除。

“【HBase分布式数据库】第六章 HBase的JavaAPI(3-6)”的评论:

还没有评论