zoukankan      html  css  js  c++  java
  • 小记--------hbase数据库java API 常用方法及案例

    HBaseAdmin类:管理hbase数据库的表信息,‘创建表、删除表、列出表选项、使表有效/无效、添加或删除列簇’;

     

    Eg:
    
    //使用工厂模式创建connection
     val conn: Connection = ConnectionFactory.createConnection(config)
    //实例化hbase的管理者实例
     val admin: Admin = conn.getAdmin
    
    //删除表
    admin.deleteTable(TableName.valueOf("t1"))

    HbaseConfiguration类继承自Configuration类:将hbase配置文件添加到配置中

     

    //配置hbase资源配置
    val config: Configuration =HBaseConfiguration.create()
    config.set("hbase.zookeeper.quorum" , "df1:2181,df2:2181,df3:2181")
    config.set("hbase.master" , "df1:60000")
    config.set("hbase.zookeeper.property.clientPort" , "2181")
    
     

    Table类:用于和hbase表直接通信;

    0.94版本之后就不推荐使用

    val HTable = new HTable(conf, Bytes.toBytes(tablename))

    而是使用

    val table = Connection.getTable(TableName.valueOf(driver_info))

     

    Eg:
    
    /**
      * 0.94之前使用new HTable  之后使用Connection.getTable(TableName tablename);
      * 用来与hbase表直接通信
      */
    def tableoperation(): Unit = {
      //获取表的实例
      val tab = conn.getTable(TableName.valueOf("citycode"))
      //查看rowkey的值为99手否在表中存在
      val q: Boolean = tab.exists(new Get(Bytes.toBytes("99")))
      //检查row/family/qualifier是否与数据库匹配。如果是,则提交put操作到服务端
      val sss = tab.checkAndPut(Bytes.toBytes("99") , Bytes.toBytes("MM") , Bytes.toBytes("citycode") , Bytes.toBytes("3213") , put())
      //释放所有资源或挂起内部缓冲区的更新
      tab.close()
    // 获取rowkey的列族MM的列名id的value值
      val get = new Get(Bytes.toBytes("rowKey"))
      val result: Result = tab.get(get)
      val bytes = result.getValue(Bytes.toBytes("MM"),Bytes.toBytes("id"))
      println(Bytes.toString(bytes))
      //获取MM的scanner实例
      val scanner:ResultScanner = tab.getScanner(Bytes.toBytes("MM"))
      // 获取该表的HTableDescriptor实例
      val tableDescriptor: HTableDescriptor = tab.getTableDescriptor()
      //将put实例中的数据放入表中
      tab.put(put())
    }
    
     

    HTableDescriptor类:hbase表的详细信息

     

    Eg:
    
    //创建HTableDescriptor table表描述
     val tabledescriptor = new HTableDescriptor(TableName.valueOf("order_info"))
    //给表添加列簇
    tabledescriptor.addFamily(new HColumnDescriptor("CC"))
    //删除CC 列簇
    tabledescriptor.removeFamily(Bytes.toBytes("CC"))
    //获取表名
    val tablename = tabledescriptor.getTableName
    
     

    HColumnDescriptor类:列簇描述

     

    Eg:
    
     val columndescriptor = new HColumnDescriptor(Bytes.toBytes("MM"))
    val columnName = columndescriptor.getName()
     val c = columndescriptor.getValue("id")

    Put类:对单行执行put操作

     

    Eg:
    
    val put = new Put(Bytes.toBytes("rowkey"))
    //添加列id和值123 到MM列簇
    put.addColumn(Bytes.toBytes("MM"),Bytes.toBytes("id"),Bytes.toBytes("123"))
    val rowname = put.getRow()
    val time = put.getTimeStamp()
    val s:Boolean = put.isEmpty()

    Get类:用于对单行执行get操作

     

    Scan类:用于执行扫描操作;通过不同的构造方法扫描整张表、整个列簇、整个列、一段时间戳范围内的数据

    Eg:
    
    val table: Table = conn.getTable(TableName.valueOf("driver_info"))
    // scan 全表
    val scan = new Scan()
    //给scan加条件获取列簇MM中的列id
    scan.addColumn(Bytes.toBytes("MM"),Bytes.toBytes("id"))
    //获取列簇MM中所有的列
    scan.addFamily(Bytes.toBytes("MM"))
    // 获取时间戳在11111-22222之间的所有数据
    scan.setTimeRange(11111,22222)
    
    //scan从rowkey20190101 开始到结束
    val scan1 = new Scan(Bytes.toBytes("20190101"))
    
    //scan从rowkey20190101开始到20200101结束
    val scan2 = new Scan(Bytes.toBytes("20190101"),Bytes.toBytes("20200101"))
    
    //通过扫描器scan控制查询到的结果
    val rs: ResultScanner = table.getScanner(scan)

    Filter配合Scan工作

    //1.实例化filter RowFilter 按行过滤 行键小于等于20190101的所有数据
    //CompareFilter.CompareOp.LESS_OR_EQUAL 比较符 LESS_OR_EQUAL 小于等于、LESS小于、EQUAL等于、NOT_EQUAL不等于、GREATER_OR_EQUAL大于等于、GREATER大于、NO_OP 无操作
    val rowfilter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes( "20190101")))
    //实例化scan
    val scan4 = new Scan()
    //添加 行过滤器
    scan.setFilter(rowfilter)
    // 获取数据
    val scanner: ResultScanner = table.getScanner(scan4)
    import scala.collection.JavaConverters._
    //遍历数据
    for(sca <- scanner.iterator.asScala){
      println(sca)
    }
    //2. 实例化 QualifierFilter 扫描出所有的列名为id  的列数据
    val liefilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("id")))
    //3. 实例化FamilyFilter 扫描出所有的列簇为'MM'的列簇数据
    val familyfilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("MM")))
    
    // 4.扫描出行键前缀为2019 的所有行数据
    val prefilter = new PrefixFilter(Bytes.toBytes("2019"))
    
    // 5.只返回每行数据的 行键-列簇-列;不返回值。
      // 所以适用于 不需要值的应用场景, 减少值的传递
    val keyonlyfilter = new KeyOnlyFilter()
    
    // 6.扫描出所有列的值为100 的 列
    val valuefilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("100")))
    
     
  • 相关阅读:
    17 Letter Combinations of a Phone Number(medium)
    16 3Sum closest(medium)
    15 3Sum(medium)
    linux环境下搭建自动化Jenkins管理工具
    Danjgo学习笔记(五)----Django数据库的查询
    Danjgo学习笔记(五)----Django中表的关系
    Django常见的Field
    selenium+python+ip池 实现博客园刷博客浏览量
    Danjgo学习笔记(五)----常见模板过滤器和自制过滤器
    Danjgo学习笔记(四)---danjgo框架内的常用标签
  • 原文地址:https://www.cnblogs.com/yzqyxq/p/12103474.html
Copyright © 2011-2022 走看看