工具或版本
IDEA + HBase 2.1.10 集群 + Hadoop HA
包依赖或资源文件
依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>2.1.10</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-common -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>2.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.1.10</version>
</dependency>
</dependencies>
资源文件
代码
import java.{lang, util}
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.{HBaseConfiguration, HColumnDescriptor, HTableDescriptor, TableName}
import org.apache.hadoop.hbase.client.{ColumnFamilyDescriptor, ConnectionFactory, Cursor, Delete, Get, Put, Result, ResultScanner, Scan, Table, TableDescriptor}
import org.apache.hadoop.hbase.io.compress.Compression.Algorithm
import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding
import org.apache.hadoop.hbase.util.Bytes
package object hbaseUtils {
class HbaseConnection(conf:Configuration) {
val connection = ConnectionFactory.createConnection(conf)
val admin = connection.getAdmin()
def free = {
try{
if(!connection.isClosed) connection.close
}catch{
case ex:Exception =>ex.printStackTrace()
}
}
def listTable(): Array[HTableDescriptor] ={
this.admin.listTables()
}
def createTable(tableName:String,cols:List[String]): Unit ={
try{
if(this.admin.tableExists(TableName.valueOf(tableName))){
throw new Exception
}else{
val tbDesc = new HTableDescriptor(TableName.valueOf(tableName));
for(col <- cols){
val colDesc: HColumnDescriptor = new HColumnDescriptor(col)
colDesc.setDataBlockEncoding(DataBlockEncoding.DIFF)
colDesc.setCompressionType(Algorithm.GZ)
tbDesc.addFamily(colDesc)
}
this.admin.createTable(tbDesc)
}
}catch{
case ex:Exception => ex.printStackTrace()
}
}
def addColfamily(tableName:String,family:String) = {
try{
val colDesc: HColumnDescriptor = new HColumnDescriptor(family)
admin.addColumnFamily(TableName.valueOf(tableName),colDesc)
}catch{case ex:Exception=>ex.printStackTrace()}
}
def dropTable(tableName:String): Unit ={
try{
if(this.admin.tableExists(TableName.valueOf(tableName))){
this.admin.disableTable(TableName.valueOf(tableName))
this.admin.deleteTable(TableName.valueOf(tableName))
}else{
throw new Exception(s"table ${tableName} not exists")
}
}catch{
case ex:Exception =>ex.printStackTrace()
}
}
def get(tableName:String,rowKey:String): Option[Result] ={
try{
val tbDesc: HTableDescriptor = this.admin.getTableDescriptor(TableName.valueOf(tableName))
val theGet: Get = new Get(Bytes.toBytes(rowKey))
val table: Table = connection.getTable(TableName.valueOf(tableName))
val result: Result = table.get(theGet)
Some(result)
}catch{
case ex:Exception => ex.printStackTrace()
None
}
}
def delete (tableName:String,rowKey:String): Unit ={
try{
val delete1: Delete = new Delete(Bytes.toBytes(rowKey))
val table: Table = connection.getTable(TableName.valueOf(tableName))
table.delete(delete1)
}catch{
case ex:Exception =>ex.printStackTrace()
}
}
def put(tableName:String,thePuts:List[Put]): Unit ={
try{
val table: Table = connection.getTable(TableName.valueOf(tableName))
// 隐式转换 table.put 参数要求 java.util.List
import scala.collection.JavaConversions._
table.put(thePuts)
}catch {
case ex:Exception =>ex.printStackTrace()
}
}
def scan(tableName:String): Option[ResultScanner] ={
try{
val scan1 = new Scan()
val scanner: ResultScanner = connection.getTable(TableName.valueOf(tableName)).getScanner(scan1)
Some(scanner)
}catch{
case ex:Exception => ex.printStackTrace()
None
}
}
}
}
测试代码
object HbaseTest{
def main(args: Array[String]): Unit = {
val conf: Configuration = HBaseConfiguration.create()
val hconn: hbaseUtils.HbaseConnection = new hbaseUtils.HbaseConnection(conf)
// creata table
/* val cols:List[String] = List("basic","sourceConfig","indexConfig","senderConfig")
val tbName:String = "alertRule"
hconn.createTable(tbName,cols)*/
// list table
/*val tbs:Array[HTableDescriptor] = hconn.listTable()
tbs.foreach(println)*/
// add colfamily
// hconn.addColfamily("alertRule","groupInfo")
// put
/* val thePut1: Put = new Put(Bytes.toBytes("row-1"))
thePut1.addColumn(Bytes.toBytes("basic"),Bytes.toBytes("name"),Bytes.toBytes("networkFreeze"))
thePut1.addColumn(Bytes.toBytes("basic"),Bytes.toBytes("interval"),Bytes.toBytes("5"))
val thePut2:Put = new Put(Bytes.toBytes("row-2"))
thePut2.addColumn(Bytes.toBytes("sourceConfig"),Bytes.toBytes("mail"),Bytes.toBytes("smtp.xx.com"))
thePut2.addColumn(Bytes.toBytes("sourceConfig"),Bytes.toBytes("snmp"),Bytes.toBytes("xx oid"))
val puts:List[Put] = thePut1::thePut2::Nil
hconn.put("alertRule",puts)*/
// get
val maybeResult: Option[Result] = hconn.get("alertRule", "row-1")
maybeResult match{
case Some(result) => {
val bytes: Array[Byte] = result.getValue(Bytes.toBytes("basic"), Bytes.toBytes("name"))
println(Bytes.toString(bytes))
}
case None => println(s"table:alertRule rowkey:row-1 没有相应数据")
}
hconn.free
}
}