增删改查工具类

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代码实现的更多相关文章

  1. EF4.0和EF5.0增删改查的写法区别及执行Sql的方法

    EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ...

  2. MVC ---- EF4.0和EF5.0增删改查的写法区别及执行Sql的方法

    EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ...

  3. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...

  4. JDBC连接mysql增删改查整体代码

    第一种比较low:用了statment,没有用preparedstatement.另外,插入时,不灵活,不能调用参数,但是如果直接给函数形参的话就会被SQL注入攻击,所以,最好在sql语句中使用?代表 ...

  5. VUE2.0增删改查附编辑添加model(弹框)组件共用

    Vue实战篇(增删改查附编辑添加model(弹框)组件共用) 前言 最近一直在学习Vue,发现一份crud不错的源码 预览链接 https://taylorchen709.github.io/vue- ...

  6. 连接SQLServer的增删改查方法代码

    在Visual C++中用ADO进行数据库编程 1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序CADOConnection,然后在使用A ...

  7. mysql数据库的连接以及增删改查Java代码实现(转载)

    每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ...

  8. EF5.0增删改查的写法及执行Sql的方法

    public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); // ...

  9. EF4.0和EF5.0增删改查写法区别

    1 public T AddEntity(T entity) 2 { 3 //EF4.0的写法 4 添加实体 5 //db.CreateObjectSet<T>().AddObject(e ...

随机推荐

  1. 关于BSTR数据类型

    关于BSTR数据类型 - 极品垃圾 - C++博客 http://www.cppblog.com/bestcln/articles/82712.html VC++常用数据类型及其操作详解(非常经典,共 ...

  2. CentOS7.1 Liberty云平台之Dashboard篇(7)

    控制节点: 一.安装及配置Dashboard 1.安装dashboard相关包 yum install openstack-dashboard 2.配置/etc/openstack-dashboard ...

  3. 《C++ Primer Plus》14.2 私有继承 学习笔记

    C++(除了成员变量之外)还有另一种实现has-a关系的途径——私有继承.使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员.(如果使用保护继承,基类的公有成员和保护成员都将称为派生类的保 ...

  4. MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署

    在mqtt的官方网站,有许多mqtt,其中:MosquittoAn Open Source MQTT server with C, C++, Python and Javascript clients ...

  5. POJ2286 The Rotation Game[IDA*迭代加深搜索]

    The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 6325   Accepted: 21 ...

  6. navicat 激活流程

    Navicat Premium 12激活 我自己测试了一下可以激活,很好用 原作链接:https://blog.csdn.net/loveer0/article/details/82016644 Na ...

  7. SSH配置优化和慢的解决方法

    author: headsen chen date: 2018-08-18  00:28:37 ssh配置优化 vim  /etc/ssh/sshd_config 1,修改root端口 2,不允许ro ...

  8. 解决jquery在IE下removeAttr不生效的问题

    使用jquery动态操纵DOM的时候在IE下会遇到remvoeAttr() 不生效的问题, 解决的办法是使用prop()方法: var node = $("div>input" ...

  9. 微信小游戏5.2.2 在子项目中使用EUI制作排行榜报错 wx.getFileSystemManager not function

    本来想子项目(开放数据域)想使用EUI来制作排行榜. 原5.1.11的时候是ok的.在5.2.2中,使用assetsmananger而不是res,则会报错wx.getFileSystemManager ...

  10. 【BZOJ3677】[Apio2014]连珠线 换根DP

    [BZOJ3677][Apio2014]连珠线 Description 在列奥纳多·达·芬奇时期,有一个流行的童年游戏,叫做“连珠线”.不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色 ...