使用scala操作hbase api

最近在研究hbase 和scala,研究scala是为了spark,刚好hbase的api我也不熟,scala也不熟悉,所以就用来练手了

代码是两个类

ConfigUtil 是用来产生configuration的

TestHbaeJavaApi是用来测试hbase api的

jar包是用的cdh5.7.1的版本

package com.hit.hrb

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.HBaseConfiguration

/**
  * Created by zh on 2016/8/16.
  */
class ConfigUtil private {

  def createHbaseConfig {
    val conf: Configuration = HBaseConfiguration.create()
    conf.addResource("hbase-site.xml")
    conf
  }

  def createHadoopConfig ={
    val conf: Configuration = new Configuration()
    conf.addResource("core-site.xml")
    conf.addResource("hbase-site.xml")
    conf.addResource("hbase-site.xml")
    conf
  }
}

object ConfigUtil{
  def apply: ConfigUtil = new ConfigUtil()

}


package com.hit.hrb

import java.util

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.{Cell, HColumnDescriptor, HTableDescriptor, KeyValue}

import collection.JavaConverters._

/**
  * Created by zh on 2016/8/16.
  */
object TestHbaeJavaApi {

  private val conf: Configuration = ConfigUtil.apply.createHadoopConfig

  def isExist(tableName: String) {
    val hAdmin: HBaseAdmin = new HBaseAdmin(conf)
    hAdmin.tableExists(tableName)
  }

  def createTable(tableName: String, columnFamilys: Array[String]): Unit = {
    val hAdmin: HBaseAdmin = new HBaseAdmin(conf)
    if (hAdmin.tableExists(tableName)) {
      println("表" + tableName + "已经存在")
      return
    } else {
      val tableDesc: HTableDescriptor = new HTableDescriptor(tableName)
      for (columnFaily <- columnFamilys) {
        tableDesc.addFamily(new HColumnDescriptor(columnFaily))
      }
      hAdmin.createTable(tableDesc)
      println("创建表成功")
    }
  }

  def deleteTable(tableName: String): Unit = {
    val admin: HBaseAdmin = new HBaseAdmin(conf)
    if (admin.tableExists(tableName)) {
      admin.disableTable(tableName)
      admin.deleteTable(tableName)
      println("删除表成功!")
    } else {
      println("表" + tableName + " 不存在")
    }
  }

  def addRow(tableName: String, row: String, columnFaily: String, column: String, value: String): Unit = {
    val table: HTable = new HTable(conf, tableName)
    val put: Put = new Put(Bytes.toBytes(row))
    put.add(Bytes.toBytes(columnFaily), Bytes.toBytes(column), Bytes.toBytes(value))
    table.put(put)
  }

  def delRow(tableName: String, row: String): Unit = {
    val table: HTable = new HTable(conf, tableName)
    val delete: Delete = new Delete(Bytes.toBytes(row))
    table.delete(delete)
  }

  def delMultiRows(tableName: String, rows: Array[String]): Unit = {
    val table: HTable = new HTable(conf, tableName)
    val deleteList = for (row <- rows) yield new Delete(Bytes.toBytes(row))
    table.delete(deleteList.toSeq.asJava)
  }

  def getRow(tableName: String, row: String): Unit = {
    val table: HTable = new HTable(conf, tableName)
    val get: Get = new Get(Bytes.toBytes(row))
    val result: Result = table.get(get)
    for (rowKv <- result.raw()) {
      println(new String(rowKv.getFamily))
      println(new String(rowKv.getQualifier))
      println(rowKv.getTimestamp)
      println(new String(rowKv.getRow))
      println(new String(rowKv.getValue))
    }
  }

  def getAllRows(tableName: String): Unit = {
    val table: HTable = new HTable(conf, tableName)
    val results: ResultScanner = table.getScanner(new Scan())
    val it: util.Iterator[Result] = results.iterator()
    while (it.hasNext) {
      val next: Result = it.next()
      for(kv <- next.raw()){
        println(new String(kv.getRow))
        println(new String(kv.getFamily))
        println(new String(kv.getQualifier))
        println(new String(kv.getValue))
        println(kv.getTimestamp)
        println("---------------------")
      }

//      val cells: Array[Cell] = next.rawCells()
//      for (cell <- cells) {
//        println(new String(cell.getRowArray)+" row")
//        println(new String(cell.getFamilyArray))
//        println(new String(cell.getQualifierArray))
//        println(new String(cell.getValueArray))
//        println(cell.getTimestamp)
//        println("---------------------")
//      }


    }
  }


  def main(args: Array[String]) {
    //TestHbaeJavaApi.createTable("testApi",Array("info","two"))
    //TestHbaeJavaApi.addRow("testApi","row2","info","get","getTwo")
    //TestHbaeJavaApi.delRow("testApi","row2")

    //TestHbaeJavaApi.getRow("testApi","row1")
    this.getAllRows("testApi")

  }

}

你可能感兴趣的:(使用scala操作hbase api)