Sample code to connect to HBase data connector

Sample application code for connecting to a HBase data connector in Cloudera Data Engineering.

The following sample application code includes table creation, data insertion, and retrieval in the Cloudera Base on premises cluster:
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.TableName
import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.HTableDescriptor
import scala.collection.JavaConverters._

object HbaseTable {
  def main(args: Array[String]): Unit = {
    createHbaseTable()
  }
  private def createHbaseTable[T](): Unit = {
    val table = TableName.valueOf("hbase_table")
    val column = "column"
    val value = Bytes.toBytes("value")

    val conf = HBaseConfiguration.create()
    val conn = ConnectionFactory.createConnection(conf)
    val admin = conn.getAdmin()

    if (!admin.tableExists(table)) {
      val tableDescriptor = new HTableDescriptor(table)
      tableDescriptor.addFamily(new HColumnDescriptor(column))
      admin.createTable(tableDescriptor)
    }

    val hTable = conn.getTable(table)
    val puts = (0 until 10)
            .map(i => new Put(Bytes.toBytes("row" + i) ).addColumn(Bytes.toBytes(column), value, Bytes.toBytes(i.toString)))
            .asJava
    hTable.put(puts)
    
    val gets = (0 until 10)
            .map(i => new Get(Bytes.toBytes("row" + i) ) )
            .asJava
    val result = hTable.get(gets)
    result.zipWithIndex.foreach { case(row, idx) =>
      if(!result.isEmpty) {
        val k = Bytes.toString(row.getRow)
        val v = Bytes.toString(row.getValue(Bytes.toBytes(column), value) )
        println(s"Record $idx: $k = $v")
      }
    }
    
    hTable.close()
    admin.close()
    conn.close()
  }
}