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 ...
随机推荐
- CSS3给页面打标签
我们经常会在页面的左上角或者右上角看到类似如图所示的标签,比如页面的链接(最常使用)等,下面我们就实现一个简单的标签 实现步骤是先做一个水平长条,使用CSS3的transform来实现旋转,如果是在左 ...
- POJ 1742 Coins(多重背包, 单调队列)
Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...
- 漫谈.Net关键字系列之一Sealed与Final(转)
转自:http://www.cnblogs.com/isline/archive/2010/08/31/1813396.html Sealed与Final修饰符其实并不是一个语言平台的产物,他们有着各 ...
- MVC源码
http://aspnetwebstack.codeplex.com/ MVC源码
- 判断app是否是第一次启动
如何判断app是否是第一启动呢,第一次启动的时候,加载引导页面等, 一下是我的解决方案: 1.在"AppDelegate.h"中找到- (BOOL)application:(UIA ...
- CentOS6.5安装图形界面(Gnome)
因为是以最小化安装的Linux,无法使用图形界面,从网上看到资料,我使用yum安装果然很简单 ----------------------------------------------------- ...
- AndroidのBuild工具之Ant动手实践
好久没有写博客了,没半年也应该有几个月了.在工作上的项目遇到过很多问题或者说积累了不少经验,曾经都蛮想发到博客留个纪念什么的,不求可以为别人获得点经验技巧,只求在多年后遇到同样的问题可以找到个记录.但 ...
- vue中npm install 报错之一
报错原因: 这是因为文件phantomjs-2.1.1-windows.zip过大,网络不好,容易下载失败 PhantomJS not found on PATH 解决方案一: 选择用cnpm ins ...
- WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- shell 中的()【】{}(())
本文转自:https://blog.csdn.net/taiyang1987912/article/details/39551385 shell中各种括号的作用().(()).[].[[]].{} 一 ...