|
@@ -1,8 +1,11 @@
|
|
|
package com.persagy.iot.utils
|
|
|
|
|
|
import org.apache.hadoop.conf.Configuration
|
|
|
-import org.apache.hadoop.hbase.HBaseConfiguration
|
|
|
-import org.apache.hadoop.hbase.client.{Connection, ConnectionFactory}
|
|
|
+import org.apache.hadoop.hbase.{HBaseConfiguration, HColumnDescriptor, HTableDescriptor, TableName}
|
|
|
+import org.apache.hadoop.hbase.client.{Admin, Connection, ConnectionFactory, Put}
|
|
|
+import org.apache.hadoop.hbase.util.Bytes
|
|
|
+
|
|
|
+import scala.util.Try
|
|
|
|
|
|
object HbaseUtil {
|
|
|
|
|
@@ -18,10 +21,54 @@ object HbaseUtil {
|
|
|
val HBASE_ZOOKEEPER_PROPERTY_CLIENTPORT = "hbase.zookeeper.property.clientPort"
|
|
|
val HBASE_ZOOKEEPER_PORT = "2181"
|
|
|
|
|
|
+ var conn: Connection = _
|
|
|
+
|
|
|
def getHbaseConnection(): Connection ={
|
|
|
val conf: Configuration = HBaseConfiguration.create()
|
|
|
conf.set(HBASE_ZOOKEEPER_QUORUM, HBASE_ZOOKEEPER_IP)
|
|
|
conf.set(HBASE_ZOOKEEPER_PROPERTY_CLIENTPORT, HBASE_ZOOKEEPER_PORT)
|
|
|
ConnectionFactory.createConnection(conf)
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ *
|
|
|
+ * @param conn Hbase 连接
|
|
|
+ * @param rowKey Hbase 的 rowKey
|
|
|
+ * @param name 表名
|
|
|
+ * @param valueMap 数据格式为:Map[family, Map[qualifier, value]],
|
|
|
+ */
|
|
|
+ def insertData(conn: Connection, rowKey: String, name: String, valueMap: Map[Object, Map[Object, Object]]): Unit ={
|
|
|
+
|
|
|
+
|
|
|
+ val tableName = TableName.valueOf(name)
|
|
|
+ val table = conn.getTable(tableName)
|
|
|
+ valueMap.
|
|
|
+ val put = new Put(rowKey.getBytes());
|
|
|
+ put.addColumn(Bytes.toBytes("data"), Bytes.toBytes("name"), Bytes.toBytes(valueMap.head._2.head._2.toString))
|
|
|
+
|
|
|
+ Try(table.put(put)).getOrElse(table.close())
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 创建表
|
|
|
+ * @param conn Hbase 连接
|
|
|
+ * @param name 要创建的表名
|
|
|
+ * @param familyNames 建议不超过3个,否则会影响性能
|
|
|
+ */
|
|
|
+ def createTable(conn: Connection, name: String, familyNames: String*): Unit ={
|
|
|
+
|
|
|
+ val admin: Admin = conn.getAdmin
|
|
|
+ val tableName: TableName = TableName.valueOf(name)
|
|
|
+
|
|
|
+
|
|
|
+ val hTableDescriptor = new HTableDescriptor(tableName)
|
|
|
+
|
|
|
+
|
|
|
+ for (familyName <- familyNames) {
|
|
|
+ val hColumnDescriptor = new HColumnDescriptor(familyName)
|
|
|
+ hTableDescriptor.addFamily(hColumnDescriptor)
|
|
|
+ }
|
|
|
+
|
|
|
+ admin.createTable(hTableDescriptor)
|
|
|
+ }
|
|
|
}
|