HBase1.2.0增删改查Scala代码实现
增删改查工具类
class HbaseUtils {
  /**
    * 获取管理员对象
    *
    * @param conf 对hbase client配置一些参数
    * @return 返回hbase的HBaseAdmin管理员对象
    */
  def getAdmin(conf: Configuration): HBaseAdmin = {
    val conn = ConnectionFactory.createConnection(conf)
    conn.getAdmin().asInstanceOf[HBaseAdmin]
  }
  /**
    * 根据指定的管理员,表名,列族名称创建表
    *
    * @param admin         创建HBaseAdmin对象
    * @param tName         需要创建的表名
    * @param columnFamilys 列族名称的集合
    */
  def createTable(admin: HBaseAdmin, tName: String, columnFamilys: List[String]): Unit = {
    if (admin.tableExists(TableName.valueOf(tName))) {
      println("table already exists!")
      admin.disableTable(tName)
      admin.deleteTable(tName)
    }
    try {
      val tableDesc = new HTableDescriptor(TableName.valueOf(tName))
      columnFamilys.foreach(columnFamilysName => tableDesc.addFamily(new HColumnDescriptor(columnFamilysName)))
      admin.createTable(tableDesc)
      println("create table success!")
    }
    catch {
      case e: Exception => e.printStackTrace()
    }
  }
  /**
    * 单条数据插入 根据表名、rowkey、列族名、列名、值、增加数据
    *
    * @param conf         当前对象的配置信息
    * @param tableName    表名
    * @param rowKey       行键
    * @param columnFamily 列族名称
    * @param column       列
    * @param value        值
    */
  def insertData(conf: Configuration, tableName: String, rowKey: String, columnFamily: String, column: String, value: String): Unit = {
    val con = ConnectionFactory.createConnection(conf)
    val table = con.getTable(TableName.valueOf(tableName))
    val put = new Put(Bytes.toBytes(rowKey))
    put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value))
    table.put(put)
    close(table, con)
    print("数据插入成功")
  }
  /**
    * 批量插入数据
    *
    * @param conf         当前对象的配置信息
    * @param tableName    表名
    * @param rowKey       行键
    * @param columnFamily 列族
    * @param column       列
    * @param value        值
    */
  def batchInsertData(conf: Configuration, tableName: String, rowKey: String, columnFamily: String, column: String, value: String): Unit = {
    val con = ConnectionFactory.createConnection(conf)
    val table: BufferedMutator = con.getBufferedMutator(TableName.valueOf(tableName))
    val p = new Put(Bytes.toBytes(rowKey))
    p.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value))
    val mutations = new util.ArrayList[Mutation]()
    mutations.add(p)
    table.mutate(mutations)
    table.flush()
    if (con != null)
      con.close()
    if (table != null)
      table.close()
    print("数据插入成功")
  }
  /**
    * 删除数据
    *
    * @param conf      当前对象的配置信息
    * @param tableName 表名
    */
  def deleteData(conf: Configuration, tableName: String): Unit = {
    val admin = getAdmin(conf)
    try {
      if (admin.tableExists(tableName)) {
        admin.disableTable(tableName)
        admin.deleteTable(tableName)
      }
    } catch {
      case e: Exception => e.printStackTrace()
    }
    print("删除数据成功")
  }
  /**
    * 根据指定的配置信息全表扫描指定的表
    *
    * @param conf      配置信息
    * @param tableName 表名
    * @return Cell单元格数组
    */
  def getByScan(conf: Configuration, tableName: String): ArrayBuffer[Array[Cell]] = {
    var arrayBuffer = ArrayBuffer[Array[Cell]]()
    val scanner = new Scan()
    val conn = ConnectionFactory.createConnection(conf)
    val table = conn.getTable(TableName.valueOf(tableName))
    val results = table.getScanner(scanner)
    var res: Result = results.next()
    while (res != null) {
      arrayBuffer += res.rawCells()
      res = results.next()
    }
    arrayBuffer
  }
  /**
    * 根据行键获取具体的某一个行
    *
    * @param conf      配置信息
    * @param tableName 表名
    * @param row       行键
    * @return Array[Cell]
    */
  def getRow(conf: Configuration, tableName: String, row: String): Array[Cell] = {
    val con = ConnectionFactory.createConnection(conf)
    val table = con.getTable(TableName.valueOf(tableName))
    val get = new Get(Bytes.toBytes(row))
    val res = table.get(get)
    res.rawCells()
  }
  /**
    * 删除指定表的指定row数据
    *
    * @param conf      配置信息
    * @param tableName 表名
    * @param row       行键
    */
  def delRow(conf: Configuration, tableName: String, row: String): Unit = {
    val con = ConnectionFactory.createConnection(conf)
    val table = con.getTable(TableName.valueOf(tableName))
    table.delete(new Delete(Bytes.toBytes(row)))
    println("删除数据成功")
  }
  def close(table: Table, con: Connection): Unit = {
    if (table != null)
      table.close()
    if (con != null)
      con.close()
  }
}
测试用例
class HbaseTest {
  val conf = HBaseConfiguration.create()
  conf.set("hbase.zookeeper.quorum", "master66")
  conf.set("hbase.zookeeper.property.clientPort", "")
  val hBaseUtils = new HbaseUtils()
  val admin = hBaseUtils.getAdmin(conf)
  /**
    * 创建表
    */
  @Test
  def createTable(): Unit = {
    //    val list = List("family1", "family2")
    val list = List("Stat2")
    hBaseUtils.createTable(admin, "PageViewStream2", list)
  }
  /**
    * 插入数据
    */
  @Test
  def insertData(): Unit = {
    hBaseUtils.insertData(conf, "test2", "rowkey1", "family1", "李四", "lisi2")
  }
  /**
    * 批量插入数据
    */
  @Test
  def batchInsertData: Unit = {
    hBaseUtils.batchInsertData(conf, "test2", "rowkey2", "family2", "name", "lisi")
  }
  /**
    * 获取指定的一行
    */
  @Test
  def getRow: Unit = {
    val row: Array[Cell] = hBaseUtils.getRow(conf, "test2", "rowkey2")
    row.foreach(a => {
      println(new String(a.getRow()) + " " + a.getTimestamp + " " + new String(a.getFamily()) + " " + new String(a.getValue))
    })
  }
  /**
    * 删除指定的一行
    */
  @Test
  def delRow: Unit = {
    hBaseUtils.delRow(conf, "test2", "rowkey1")
  }
  /**
    * 扫描全表
    */
  @Test
  def getByScan: Unit = {
    val all: ArrayBuffer[Array[Cell]] = hBaseUtils.getByScan(conf, "PageViewStream2")
    all.foreach(arrBuffer => arrBuffer.foreach(cell => {
      println(new String(cell.getRowArray, cell.getRowOffset, cell.getRowLength) + "-->Row")
      println(cell.getTimestamp + "-->timpsstamp  ")
      println(new String(cell.getFamilyArray, cell.getFamilyOffset, cell.getFamilyLength) + "-->family  ")
      println(new String(cell.getValueArray, cell.getValueOffset, cell.getValueLength) + "-->value  ")
      println(new String(cell.getQualifierArray, cell.getQualifierOffset, cell.getQualifierLength) + " -->Tags")
    }))
  }
}
HBase1.2.0增删改查Scala代码实现的更多相关文章
- EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
		EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ... 
- MVC  ----  EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
		EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ... 
- yii2.0增删改查实例讲解
		yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ... 
- JDBC连接mysql增删改查整体代码
		第一种比较low:用了statment,没有用preparedstatement.另外,插入时,不灵活,不能调用参数,但是如果直接给函数形参的话就会被SQL注入攻击,所以,最好在sql语句中使用?代表 ... 
- VUE2.0增删改查附编辑添加model(弹框)组件共用
		Vue实战篇(增删改查附编辑添加model(弹框)组件共用) 前言 最近一直在学习Vue,发现一份crud不错的源码 预览链接 https://taylorchen709.github.io/vue- ... 
- 连接SQLServer的增删改查方法代码
		在Visual C++中用ADO进行数据库编程 1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序CADOConnection,然后在使用A ... 
- mysql数据库的连接以及增删改查Java代码实现(转载)
		每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ... 
- EF5.0增删改查的写法及执行Sql的方法
		public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); // ... 
- EF4.0和EF5.0增删改查写法区别
		1 public T AddEntity(T entity) 2 { 3 //EF4.0的写法 4 添加实体 5 //db.CreateObjectSet<T>().AddObject(e ... 
随机推荐
- MathType编辑物理单位的方法
			在用MathType编辑物理公式时,由于物理单位很多都是复合单位,所以在编辑时如果能够有这种复合单位直接使用的话,编辑效率就会大大提高.实际上这种想法在MathType中是可行的,MathType中也 ... 
- JBOSS-EAP-6.2集群部署
			1 概述 应用的合理部署即能提高系统的可靠性和稳定性,又能提高系统的可维护性和扩展性.本文档详细阐述基于Apache负载均衡和JBOSS7集群的应用系统部署方案和配置步骤.内容涉及部署方案.环境配置. ... 
- 超全面的JavaWeb笔记day12<Jsp&JavaBean&El表达式>
			1.JSP三大指令 page include taglib 2.9个内置对象 out page pageContext request response session application exc ... 
- 实例:用类来写一个 memcached 启动脚本
			[root@localhost ~]$ yum install -y memcached #!/usr/bin/env python #-*- coding:utf-8 -*- import os i ... 
- webstorm编译less和scss
			Webstorm 配置less编译的Arguments参数: $FileName$ $FileParentDir$\ccy\ccy1\ccy2\$FileNameWithoutExtension$.c ... 
- setTimeOut一些注意的地方
			for (var i = 0; i < data.length; i++) { var flashID = data[i].ID; //setTimeOut(removeFlashDiv(fla ... 
- JS 保存表单默认值 为空时自动填充默认值
			var inputArray = document.getElementsByTagName("input"); var strArray = []; ; i < input ... 
- jQuery数据缓存
			jQuery引入数据缓存机制的原因: 1.储存更DOM节点相关的数据.事件.动画等信息 2.用一种低耦合的方式让DOM节点和数据联系起来 实现原理: 1.jQuery内部创建cache对象 2.为需要 ... 
- COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
			COGS 1224. [SHOI2002]百事世界杯之旅 ★ 输入文件:pepsi.in 输出文件:pepsi.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] ... 
- IIS的安装和配置
			一.首先是安装IIS.打开控制面板,找到“程序与功能” 二. “打开或关闭Windows功能”, 安装 “Internet 信息服务” 三. 安装完后回控制面板里面,找到“管理工具” 四. 双击“In ... 
