SCALA HBase Utils 简单实现

工具或版本

IDEA + HBase 2.1.10 集群 + Hadoop HA

包依赖或资源文件

依赖

 <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>2.1.10</version>
            <type>pom</type>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-common -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>2.1.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.1.10</version>
        </dependency>

    </dependencies>

资源文件
在这里插入图片描述

代码

import java.{lang, util}

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.{HBaseConfiguration, HColumnDescriptor, HTableDescriptor, TableName}
import org.apache.hadoop.hbase.client.{ColumnFamilyDescriptor, ConnectionFactory, Cursor, Delete, Get, Put, Result, ResultScanner, Scan, Table, TableDescriptor}
import org.apache.hadoop.hbase.io.compress.Compression.Algorithm
import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding
import org.apache.hadoop.hbase.util.Bytes

package object hbaseUtils {
  class HbaseConnection(conf:Configuration) {
    val connection = ConnectionFactory.createConnection(conf)
    val admin = connection.getAdmin()

    def free = {
      try{
        if(!connection.isClosed) connection.close
      }catch{
        case ex:Exception =>ex.printStackTrace()
      }
    }

    def listTable(): Array[HTableDescriptor] ={
      this.admin.listTables()
    }

    def createTable(tableName:String,cols:List[String]): Unit ={
      try{
        if(this.admin.tableExists(TableName.valueOf(tableName))){
          throw new Exception
        }else{
          val tbDesc = new HTableDescriptor(TableName.valueOf(tableName));
          for(col <- cols){
            val colDesc: HColumnDescriptor = new HColumnDescriptor(col)
            colDesc.setDataBlockEncoding(DataBlockEncoding.DIFF)
            colDesc.setCompressionType(Algorithm.GZ)
            tbDesc.addFamily(colDesc)
          }
          this.admin.createTable(tbDesc)
        }
      }catch{
        case ex:Exception => ex.printStackTrace()
      }
    }

    def addColfamily(tableName:String,family:String) = {
      try{
        val colDesc: HColumnDescriptor = new HColumnDescriptor(family)
        admin.addColumnFamily(TableName.valueOf(tableName),colDesc)
      }catch{case ex:Exception=>ex.printStackTrace()}
    }

    def dropTable(tableName:String): Unit ={
      try{
        if(this.admin.tableExists(TableName.valueOf(tableName))){
          this.admin.disableTable(TableName.valueOf(tableName))
          this.admin.deleteTable(TableName.valueOf(tableName))
        }else{
          throw new Exception(s"table ${tableName} not exists")
        }
      }catch{
        case ex:Exception =>ex.printStackTrace()
      }
    }

    def get(tableName:String,rowKey:String): Option[Result] ={
      try{
        val tbDesc: HTableDescriptor = this.admin.getTableDescriptor(TableName.valueOf(tableName))
        val theGet: Get = new Get(Bytes.toBytes(rowKey))
        val table: Table = connection.getTable(TableName.valueOf(tableName))
        val result: Result = table.get(theGet)
        Some(result)
      }catch{
        case ex:Exception => ex.printStackTrace()
          None
      }
    }

    def delete (tableName:String,rowKey:String): Unit ={
      try{
        val delete1: Delete = new Delete(Bytes.toBytes(rowKey))
        val table: Table = connection.getTable(TableName.valueOf(tableName))
        table.delete(delete1)
      }catch{
        case ex:Exception =>ex.printStackTrace()
      }
    }

    def put(tableName:String,thePuts:List[Put]): Unit ={
      try{
        val table: Table = connection.getTable(TableName.valueOf(tableName))
        // 隐式转换 table.put 参数要求 java.util.List
        import scala.collection.JavaConversions._
        table.put(thePuts)
      }catch {
        case ex:Exception =>ex.printStackTrace()
      }
    }

    def scan(tableName:String): Option[ResultScanner] ={
      try{
        val scan1 = new Scan()
        val scanner: ResultScanner = connection.getTable(TableName.valueOf(tableName)).getScanner(scan1)
        Some(scanner)
      }catch{
        case ex:Exception => ex.printStackTrace()
          None
      }
    }
  }
}

测试代码

object HbaseTest{
  def main(args: Array[String]): Unit = {
    val conf: Configuration = HBaseConfiguration.create()
    val hconn: hbaseUtils.HbaseConnection = new hbaseUtils.HbaseConnection(conf)

    // creata table
/*    val cols:List[String] = List("basic","sourceConfig","indexConfig","senderConfig")
    val tbName:String = "alertRule"
    hconn.createTable(tbName,cols)*/

    // list table
    /*val tbs:Array[HTableDescriptor] = hconn.listTable()
    tbs.foreach(println)*/

    // add colfamily
    // hconn.addColfamily("alertRule","groupInfo")

    // put
/*    val thePut1: Put = new Put(Bytes.toBytes("row-1"))
    thePut1.addColumn(Bytes.toBytes("basic"),Bytes.toBytes("name"),Bytes.toBytes("networkFreeze"))
    thePut1.addColumn(Bytes.toBytes("basic"),Bytes.toBytes("interval"),Bytes.toBytes("5"))

    val thePut2:Put = new Put(Bytes.toBytes("row-2"))
    thePut2.addColumn(Bytes.toBytes("sourceConfig"),Bytes.toBytes("mail"),Bytes.toBytes("smtp.xx.com"))
    thePut2.addColumn(Bytes.toBytes("sourceConfig"),Bytes.toBytes("snmp"),Bytes.toBytes("xx oid"))

    val puts:List[Put] = thePut1::thePut2::Nil
    hconn.put("alertRule",puts)*/

    // get
    val maybeResult: Option[Result] = hconn.get("alertRule", "row-1")
    maybeResult match{
      case Some(result) => {
        val bytes: Array[Byte] = result.getValue(Bytes.toBytes("basic"), Bytes.toBytes("name"))
        println(Bytes.toString(bytes))
      }
      case None => println(s"table:alertRule rowkey:row-1 没有相应数据")
    }

    hconn.free
  }
}

运行结果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值