HBase 写操作有三种实现:
- HConnection
- HTablePool
- BufferedMutator
这里将写下三篇文章分别来详细的说明 所用方法:
先说第一种方式:这里我们使用HBase2.1.2版本
,基于不同版本可能有不同的写法改变。
java类 | 作用. |
---|---|
HBaseConfiguration | 初始化 hbase配置 |
HBaseAdmin | Admin类管理 hbase表的创建 |
空 | 空 |
Put | 添加 hbase表中数据 |
Get | 查询 hbase表中数据 |
Scan | 检索 hbase表中数据 |
Result | 单个查询 hbase表中数据 |
ResultScanner | 检索结果 hbase表中数据 |
创建HBase表,是通过Admin来执行的,表和列簇则是分别通过TableDescriptorBuilder和ColumnFamilyDescriptorBuilder来构建。
HBase查询分为get、scan、scan和filter结合。filter过滤器又分为RowFilter(rowKey过滤器)、SingleColumnValueFilter(列值过滤器)、ColumnPrefixFilter(列名前缀过滤器)
// # 写个hbaseUtil类
// IEDA代码测试 访问伪分布式上的 HBase,OK !
package com.gcl.hbase
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase._
import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client._
import scala.collection.mutable
object hbaseUtil {
var conf: Configuration = _
//线程池
lazy val connection: Connection = ConnectionFactory.createConnection(conf)
lazy val admin: Admin = connection.getAdmin
/**
* HBase conf
* @param quorum : hbase的 ZK地址
* @param port : ZK的 port:2181
*/
def setConf(quorum: String, port: String): Unit = {
val conf = HBaseConfiguration.create()
conf.set("hbase.zookeeper.quorum", quorum)
conf.set("hbase.zookeeper.property.clientPort", port)
this.conf = conf
}
/***
* 判断 该表是否存在,不存在则创建.
* HTableDescriptor :构建表
* HColumnDescriptor:构建列族
*/
def createTable(tableName: String, columnFamily: String): Unit = {
val tbName = TableName.valueOf(tableName)
if (!admin.tableExists(tbName)) {
val htableDescriptor = new HTableDescriptor(tbName)
val hcolumnDescriptor = new HColumnDescriptor(columnFamily)
htableDescriptor.addFamily(hcolumnDescriptor)
admin.createTable(htableDescriptor)
}else {
println("表:"+ tableName+ " 已经存在.")
}
}
/**
* 当前 hbase版本 1.3.1,HBaseAdmin()是1.X之前的版本. 测试也可以使用.但不建议.
* HTableDescriptor()来构建表, HColumnDescriptor()来构架列族。
*/
def createTable(tableName: String, columnFamilys: Array[String]): Unit = {
val hAdmin: HBaseAdmin = new HBaseAdmin(conf)
if (hAdmin.tableExists(tableName)) {
println("表 " + tableName + " 已经存在")
return
} else {
val tableDesc: HTableDescriptor = new HTableDescriptor(tableName)