增删改查工具类

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. 勒布朗法则( LeBlanc)

    看<代码整洁之道>看到了一个概念:勒布朗法则. 咦?这个不是NBA中的勒布朗·詹姆斯法则,当然NBA中针对一些球星的Bug表现也制定了一系列的法则,如乔丹法则(乔丹太过于强大).奥尼尔法则 ...

  2. Ext3.4-EXT之嵌套表格的实现

    其中使用到的"RowExpander.js"为extjs官方示例中自带的. 实现这个嵌套表格要注意两点技巧: 1 提供给外层表格的dataStore的数据源以嵌套数组的形式表示细节 ...

  3. Webservice简单案例

    东西不用,时间长了就会被忘掉.重新拾起来 做一个简单的Demo,便于以后的查询 服务器端--新建Calculator.asmx using System; using System.Collectio ...

  4. swift - UIButton 的用法

    1,按钮的创建 (1)按钮有下面四种类型: contactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 detailDisclosure:前面带“!”图标按钮,默认文字颜色为蓝 ...

  5. java.lang.OutOfMemoryError 错误分类

    java.lang.OutOfMemoryError: Java heap space原因:Heap内存溢出,意味着Young和Old generation的内存不够.解决:调整java启动参数 -X ...

  6. Oracle应用技术精华教程:管理还原段

    管理还原段 在oracle 9i 之后提供了两种方法来管理还原数据 自动的还原数据管理:oracle 自动管理还原段的创建.分配和优化 手动的还原数据管理:oracle 手动管理还原段的创建.分配和优 ...

  7. 关于微信的jsdk的若干亲身实践之小结

    前言: 业务来源:自主研发的手机app软件有分享文章到微信或者QQ以及微博的功能,而在微信中再次点击分享按钮的时候,情况就出现的不可把控了: 文章显示的缩略图不能正常显示:文章的简介不能显示……而我们 ...

  8. [译] 关于CSS中的float和position

    原文 http://learn.shayhowe.com/advanced-html-css/detailed-css-positioning 当构建页面排版时,有不同的方法可以使用.使用哪一种方法取 ...

  9. SenchaTouch 的一些问题记录

    1 : textfield 的 focus事件在手机上会被触发很多次,原因不明,在pc上测试无问题

  10. Sun公司的产品AnswerBook存在多种漏洞

    一.未授权管理脚本访问漏洞: 1.受影响版本: Sun-AnswerBook2     1.2-1.4.2 2.攻击测试手段 http://a.b.c.d:8888/ab2/@AdminViewErr ...