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 ...
随机推荐
- 关于BSTR数据类型
关于BSTR数据类型 - 极品垃圾 - C++博客 http://www.cppblog.com/bestcln/articles/82712.html VC++常用数据类型及其操作详解(非常经典,共 ...
- CentOS7.1 Liberty云平台之Dashboard篇(7)
控制节点: 一.安装及配置Dashboard 1.安装dashboard相关包 yum install openstack-dashboard 2.配置/etc/openstack-dashboard ...
- 《C++ Primer Plus》14.2 私有继承 学习笔记
C++(除了成员变量之外)还有另一种实现has-a关系的途径——私有继承.使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员.(如果使用保护继承,基类的公有成员和保护成员都将称为派生类的保 ...
- MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
在mqtt的官方网站,有许多mqtt,其中:MosquittoAn Open Source MQTT server with C, C++, Python and Javascript clients ...
- POJ2286 The Rotation Game[IDA*迭代加深搜索]
The Rotation Game Time Limit: 15000MS Memory Limit: 150000K Total Submissions: 6325 Accepted: 21 ...
- navicat 激活流程
Navicat Premium 12激活 我自己测试了一下可以激活,很好用 原作链接:https://blog.csdn.net/loveer0/article/details/82016644 Na ...
- SSH配置优化和慢的解决方法
author: headsen chen date: 2018-08-18 00:28:37 ssh配置优化 vim /etc/ssh/sshd_config 1,修改root端口 2,不允许ro ...
- 解决jquery在IE下removeAttr不生效的问题
使用jquery动态操纵DOM的时候在IE下会遇到remvoeAttr() 不生效的问题, 解决的办法是使用prop()方法: var node = $("div>input" ...
- 微信小游戏5.2.2 在子项目中使用EUI制作排行榜报错 wx.getFileSystemManager not function
本来想子项目(开放数据域)想使用EUI来制作排行榜. 原5.1.11的时候是ok的.在5.2.2中,使用assetsmananger而不是res,则会报错wx.getFileSystemManager ...
- 【BZOJ3677】[Apio2014]连珠线 换根DP
[BZOJ3677][Apio2014]连珠线 Description 在列奥纳多·达·芬奇时期,有一个流行的童年游戏,叫做“连珠线”.不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色 ...