• 写数据到hbase


    package com.bnls.test.hbase

    import org.apache.hadoop.hbase._
    import org.apache.hadoop.hbase.client.{ConnectionFactory, Delete, HTable, Put}
    import org.apache.hadoop.hbase.util.Bytes

    import scala.util.Try
    import scala.util.parsing.json.JSON

    object HbaseHelper {

    // Hbase 简要配置以及开启服务
    val hbaseConf = HBaseConfiguration.create()
    hbaseConf.set("hbase.zookeeper.quorum", "10.60.81.168,10.60.81.167,10.60.81.166")
    hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")
    // hbaseConf.set("hbase.defaults.for.version.skip", "true")
    val connHbase = ConnectionFactory.createConnection(hbaseConf)
    //val admin = new HBaseAdmin(hbaseConf)
    val admin = connHbase.getAdmin()

    //判断表空间是否成在
    def isExistsNamespace(strNamespace: String): Boolean = {
    val namespaces = admin.listNamespaceDescriptors
    for (c <- namespaces) {
    if (strNamespace.equals(c.getName)) return true
    }
    false
    }

    var tableName :String = null

    def insert2hbase(data: String): Unit ={
    try {
    val jsonS = JSON.parseFull(data)
    val jsonObj = jsonS match {
    case Some(map: Map[String, Any]) => map
    }
    val headObj = jsonObj.get("head").get.asInstanceOf[Map[String, String]]
    val tableStr = headObj.get("table").getOrElse("")
    val dbStr = headObj.get("db").getOrElse("")
    val typeStr = headObj.get("type").getOrElse("")
    val afterObj = jsonObj.get("after").get.asInstanceOf[Map[String, String]]

    val rowKey = afterObj.get("rowKey").getOrElse("")

    if (tableStr.contains("_00")) {
    tableName = tableStr.substring(0, tableStr.length - 5)
    } else {
    tableName = tableStr
    }

    //val put = new Put(Bytes.toBytes(java.util.UUID.randomUUID().toString))

    val put = new Put(Bytes.toBytes(rowKey))

    val tableNameStr = TableName.valueOf(dbStr, tableName)
    val tableOBJ = new HTable(hbaseConf, tableNameStr)

    if (typeStr == "DELETE") {
    tableOBJ.delete(new Delete(rowKey.getBytes()))
    } else {
    if (!admin.isTableAvailable(tableNameStr)) {
    print("Table Not Exists! Create Table")

    if (!isExistsNamespace(dbStr)) {
    val namespaceDescriptor = NamespaceDescriptor.create(dbStr).build
    admin.createNamespace(namespaceDescriptor)
    }
    val tableOBJ01 = new HTableDescriptor(tableNameStr)
    tableOBJ01.addFamily(new HColumnDescriptor(tableName.getBytes()))
    admin.createTable(tableOBJ01)
    admin.close()
    afterObj.keysIterator.foreach { x =>
    put.add(Bytes.toBytes(tableName), Bytes.toBytes(x), Bytes.toBytes(afterObj.get(x).getOrElse("")))
    Try(tableOBJ.put(put)).getOrElse(tableOBJ.close())
    }
    } else {
    print("Table Exists! not Create Table")
    afterObj.keysIterator.foreach { x =>
    put.add(Bytes.toBytes(tableName), Bytes.toBytes(x), Bytes.toBytes(afterObj.get(x).getOrElse("")))
    Try(tableOBJ.put(put)).getOrElse(tableOBJ.close())
    }
    }
    }
    } catch {
    case e: Exception =>
    println(s"不规则数据 " + e.getMessage)
    }
    }

    }

  • 相关阅读:
    Android零碎知识(一)
    Android零碎知识
    归属地查询(联网+本地)
    XML文件生成——借助JDOM
    XML文件生成
    Win32汇编语言语法基础
    Nmap 常用命令语法
    Flask 框架基础知识笔记
    Web前端开发JQuery框架
    Web前端开发JavaScript提高
  • 原文地址:https://www.cnblogs.com/heguoxiu/p/10064329.html
Copyright © 2020-2023  润新知