HBase1.1.2增删改查scala代码实现
来源:互联网 发布:学网络编程 编辑:程序博客网 时间:2024/05/18 16:19
增删改查工具类
package org.apache.hadoop.confimport java.utilimport com.google.protobuf.GeneratedMessageimport org.apache.commons.codec.language.bm.Langimport org.apache.hadoop.hbase._import org.apache.hadoop.hbase.client._import org.apache.hadoop.hbase.filter.{CompareFilter, Filter, FilterBase}import org.apache.hadoop.hbase.protobuf.generated.FilterProtosimport org.apache.hadoop.hbase.util.Bytesimport scala.collection.mutable.ArrayBuffer/** * Created by Administrator on 2017/8/3. */class HbaseUtils { val comp = new util.HashMap[String,CompareFilter.CompareOp]() comp.put("EQUAL",CompareFilter.CompareOp.EQUAL) comp.put("GREATER",CompareFilter.CompareOp.GREATER) comp.put("GREATER_OR_EQUAL",CompareFilter.CompareOp.GREATER_OR_EQUAL) comp.put("LESS",CompareFilter.CompareOp.LESS) comp.put("LESS_OR_EQUAL",CompareFilter.CompareOp.LESS_OR_EQUAL) comp.put("NO_OP",CompareFilter.CompareOp.NO_OP) comp.put("NOT_EQUAL",CompareFilter.CompareOp.NOT_EQUAL) def getAdmin(conf:Configuration):HBaseAdmin ={ val connection = ConnectionFactory.createConnection(conf) connection.getAdmin().asInstanceOf[HBaseAdmin] } /** * @see 根据指定的管理员,表名,列族名称创建表 * @param admin HBaseAdmin 创建的HBaseAdmin对象 * @param tName String 需要创建的表名 * @param columnNames List[String] 列族名称的集合 */ def createTable(admin: HBaseAdmin,tName:String,columnNames:List[String] ):Boolean = { if(admin.tableExists(tName))false try {val tableDesc = new HTableDescriptor(TableName.valueOf(tName)) columnNames.foreach(columnName => tableDesc.addFamily(new HColumnDescriptor(columnName)))//添加列 admin.createTable(tableDesc) true} catch {case e: Exception => e.printStackTrace();false} } /** * @see 根据表名、rowkey、列族名、列名、值、增加数据、如果增加成功则返回true * @param conf HBaseConfiguration * @param tableName String 表名 * @param rowKey String * @param columnFamily String 列族名称 * @param column String列名 * @param value String 值 * @return 是否插入成功 */ def insertData(conf:Configuration,tableName:String,rowKey:String,columnFamily:String,column:String,value:String):Boolean={ val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val put = new Put(Bytes.toBytes(rowKey)) put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(value))// put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)) table.put(put) true } def deleteTable(conf:Configuration,tableName:String):Boolean={ val admin = getAdmin(conf) try{ if(admin.tableExists(tableName)){ admin.disableTable(tableName) admin.deleteTable(tableName) } }catch { case e:Exception=>e.printStackTrace() ; false } true } /** * @see 根据指定的配置信息全表扫描指定的表 * @param conf Configuration 配置信息 * @param tableName String 表名 * @return ArrayBuffer[Array[Cell] ] */ def getByScan(conf:Configuration,tableName:String):ArrayBuffer[Array[Cell]]={ var arrBuffer = ArrayBuffer[Array[Cell]]() val scaner = new Scan()// val table = new HTable(conf,tableName) val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val results = table.getScanner(scaner) var res:Result = results.next() while (res != null){ arrBuffer += res.rawCells() res = results.next() } arrBuffer } def getRow(conf:Configuration,tableName:String,row:String):Array[Cell]={// val table = new HTable(conf,tableName) val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val get = new Get(Bytes.toBytes(row)) val res = table.get(get) res.rawCells() } /** * @see 删除指定表的指定row数据 * @param conf Configuration * @param tableName String 要删除的表名 * @param row String 要删除的row名 * @return Boolean 是否成功 */ def delRow(conf:Configuration,tableName:String,row:String):Unit={ val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) table.delete( new Delete(Bytes.toBytes(row))) } /** * @deprecated * @see 更新某个指定的数据 * @param conf Configuration * @param tableName String 要更新的表名 * @param row String 需要更新的row * @param family String 需要更新的列族 * @param qualifier String 需要修改的列 * @param compareon String 只能为,不分大小写,EQUAL、GREATER、GREATER_OR_EQUAL、LESS、LESS_OR_EQUAL、NO_OP、NOT_EQUAL * @param value String 需要更改的值 * @param newvalue String * @return */ def updateByDelete(conf:Configuration,tableName:String,row:String,family:String,qualifier:String, compareon:String,value:String,newvalue:String):Boolean ={ if(comp.get(compareon.toUpperCase)== null)false val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val mut = new RowMutations(Bytes.toBytes(row)) mut.add(new Delete(Bytes.toBytes(row)).addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier))) mut.add(new Put(Bytes.toBytes(row)).addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(newvalue))) print("-----------" + comp.get(compareon.toUpperCase())) table.checkAndMutate(Bytes.toBytes(row),Bytes.toBytes(family),Bytes.toBytes(qualifier),comp.get(compareon.toUpperCase()) ,Bytes.toBytes(value),mut) } def updateByCover(conf:Configuration,tableName:String,row:String,family:String,qualifier:String, compareon:String,value:String,newvalue:String):Boolean = { if(comp.get(compareon.toUpperCase) == null)false val table =ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val mut = new RowMutations(Bytes.toBytes(row)) mut.add(new Put(Bytes.toBytes(row)).addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(newvalue))) table.checkAndMutate(Bytes.toBytes(row),Bytes.toBytes(family),Bytes.toBytes(qualifier),comp.get(compareon.toUpperCase()) ,Bytes.toBytes(value),mut) } def findByOldTime(conf:Configuration,tableName:String,row:String,cFamily:String,qualifier:String, timestamp: Long): Result ={ val table = ConnectionFactory.createConnection(conf).getTable(TableName.valueOf(tableName)) val get = new Get(Bytes.toBytes(row)) get.setTimeStamp(timestamp) get.addColumn(Bytes.toBytes(cFamily),Bytes.toBytes(qualifier)) table.get(get) }}
测试用例
package Hbaseimport org.apache.hadoop.conf.HbaseUtilsimport org.apache.hadoop.hbase.HBaseConfigurationimport org.apache.hadoop.hbase.client.{ConnectionFactory, HBaseAdmin}import org.apache.hadoop.hbase.executor.ExecutorServiceimport org.apache.hadoop.hbase.protobuf.generated.CellProtos.KeyValueimport org.apache.hadoop.hbase.protobuf.generated.FilterProtos.{FamilyFilter, SingleColumnValueFilter}import org.apache.hadoop.hbase.util.Bytesimport scala.actors.threadpool.Executors/** * Created by Administrator on 2017/8/3. */object test { def main(args: Array[String]): Unit = {// ExecutorService pool = Executors.newFixedThreadPool(10) val conf = HBaseConfiguration.create() conf.set("hbase.zookeeper.quorum", "master") conf.set("hbase.zookeeper.property.clientPort", "2181") val hBaseUtils = new HbaseUtils() val admin = hBaseUtils.getAdmin(conf)// val list = List("family1","family2")// hBaseUtils.createTable(admin,"test2",list)// println(hBaseUtils.insertData(conf,"test2","rowkey1","family1","李四","lisi2"))// val row = hBaseUtils.getRow(conf,"test2","rowkey1")// row.foreach(a=>{print(new String(a.getRow())+" ");print(a.getTimestamp+" ");print(new String(a.getFamily)+" ");print(new String(a.getValue)+" ")})// print(hBaseUtils.delRow(conf,"test2","rowkey1")) val all = hBaseUtils.getByScan(conf,"test2")// all.foreach(a=>a.foreach( a=>{print(new String(a.getRow())+" ");print(a.getTimestamp+" ")// ;print(new String(a.getFamily)+" ");print(new String(a.getValue)+" ")})) all.foreach(a=>a.foreach( a=>{print(new String(a.getRowArray,a.getRowOffset,a.getRowLength)+"-->row "); print(a.getTimestamp+"-->timpsstamp "); print(new String(a.getFamilyArray,a.getFamilyOffset,a.getFamilyLength)+"-->family "); println(new String(a.getValueArray,a.getValueOffset,a.getValueLength)+"-->value "+ new String(a.getQualifierArray,a.getQualifierOffset,a.getQualifierLength)+ " -->Tags")}))// print(hBaseUtils.updateByDelete(conf,"test2","rowkey1","family1","李四","equal","lisi2","小王八蛋"))// print(hBaseUtils.updateByCover(conf,"test2","rowkey1","family1","李四","equal","小王八蛋","小王八蛋2"))// val row = hBaseUtils.findByOldTime(conf,"test2","rowkey1","family2","李四",1501810811243L).getRow// print(row)v }}
有有的测试方法被我屏蔽了,大家可以去掉注释进行使用
阅读全文
0 0
- HBase1.1.2增删改查scala代码实现
- hibernate中的增删改查实现代码
- 单链表增删改查代码实现/约瑟夫环代码实现
- JAVA增删改查代码
- 增删查改常用代码
- JAVA增删改查代码
- PHP增删改查代码
- java连接mysql实现增删改查代码
- MongoDB使用java代码实现增删改查
- 基于SQLite3轻量级封装,一行代码实现增删改查
- php实现mysql数据的增删改查代码
- HBase 0.98增删改查java代码实现
- java 根据数据表实现增删改查代码自动生成
- xml实现增删查改
- web增删改查实现
- JDBC 实现增删改查
- MVC实现增删查改
- HQL实现增删改查
- 刷题——Saruman's Army POJ
- 01Trie求最大异或
- 转换枚举
- 程序人生
- 简单防止多次点击,例如防止弹出两个相同popwidow
- HBase1.1.2增删改查scala代码实现
- 2017.8.08 SSL 模拟赛
- python中的私有化
- A
- JAVA类集(2)简单操作
- leetcode--Sqrt(x)
- SpringMVC返回Json失败,请检查是否配置了Jackson
- 【php中的curl】php中curl的详细解说
- MUI Android分享功能