Hbase BulkLoad用法

要導(dǎo)入大量數(shù)據(jù),Hbase的BulkLoad是必不可少的,在導(dǎo)入歷史數(shù)據(jù)的時(shí)候,我們一般會(huì)選擇使用BulkLoad方式,我們還可以借助Spark的計(jì)算能力將數(shù)據(jù)快速地導(dǎo)入。

使用方法

  1. 導(dǎo)入依賴包
compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.3.1.3.0.0.0-1634'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.0.0.3.0.0.0-1634'
compile group: 'org.apache.hbase', name: 'hbase-it', version: '2.0.0.3.0.0.0-1634'
  1. 創(chuàng)建好表與Family
create 'test_log','ext'
  1. 編寫核心代碼
    BulkLoad.scala
def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
      //      .setMaster("local[12]")
      .setAppName("HbaseBulkLoad")

    val spark = SparkSession
      .builder
      .config(sparkConf)
      .getOrCreate()
    val sc = spark.sparkContext

    val datas = List(//模擬200億數(shù)據(jù)
      ("abc", ("ext", "type", "login")),
      ("ccc", ("ext", "type", "logout"))
    )
    val dataRdd = sc.parallelize(datas)

    val output = dataRdd.map {
      x => {
        val rowKey = Bytes.toBytes(x._1)
        val immutableRowKey = new ImmutableBytesWritable(rowKey)

        val colFam = x._2._1
        val colName = x._2._2
        val colValue = x._2._3

        val kv = new KeyValue(
          rowKey,
          Bytes.toBytes(colFam),
          Bytes.toBytes(colName),
          Bytes.toBytes(colValue.toString)
        )
        (immutableRowKey, kv)
      }
    }


    val hConf = HBaseConfiguration.create()
    hConf.addResource("hbase-site.xml")
    val hTableName = "test_log"
    hConf.set("hbase.mapreduce.hfileoutputformat.table.name", hTableName)
    val tableName = TableName.valueOf(hTableName)
    val conn = ConnectionFactory.createConnection(hConf)
    val table = conn.getTable(tableName)
    val regionLocator = conn.getRegionLocator(tableName)

    val hFileOutput = "/tmp/h_file"

    output.saveAsNewAPIHadoopFile(hFileOutput,
      classOf[ImmutableBytesWritable],
      classOf[KeyValue],
      classOf[HFileOutputFormat2],
      hConf
    )

    val bulkLoader = new LoadIncrementalHFiles(hConf)
    bulkLoader.doBulkLoad(new Path(hFileOutput), conn.getAdmin, table, regionLocator)
  }
  1. 提交Spark任務(wù)
spark-submit --master yarn --conf spark.yarn.tokens.hbase.enabled=true --class com.dounine.hbase.BulkLoad --executor-memory 2G --num-executors 2G --driver-memory 2G    --executor-cores 2 build/libs/hbase-data-insert-1.0.0-SNAPSHOT-all.jar

完整項(xiàng)目源碼

https://github.com/dounine/hbase-data-insert/blob/master/src/main/scala/com/dounine/hbase/BulkLoad.scala


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • > 要導(dǎo)入大量數(shù)據(jù),Hbase的BulkLoad是必不可少的,在導(dǎo)入歷史數(shù)據(jù)的時(shí)候,我們一般會(huì)選擇使用BulkLo...
    kikiki1閱讀 495評(píng)論 0 1
  • > 要導(dǎo)入大量數(shù)據(jù),Hbase的BulkLoad是必不可少的,在導(dǎo)入歷史數(shù)據(jù)的時(shí)候,我們一般會(huì)選擇使用BulkLo...
    kikiki5閱讀 307評(píng)論 0 2
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,561評(píng)論 0 85
  • 要導(dǎo)入大量數(shù)據(jù),Hbase的BulkLoad是必不可少的,在導(dǎo)入歷史數(shù)據(jù)的時(shí)候,我們一般會(huì)選擇使用BulkLoad...
    kikiki2閱讀 119評(píng)論 0 3
  • ――秀水奇石班七組張夢涵 清晨,我站在窗臺(tái),遠(yuǎn)處已綻放開的櫻花對(duì)...
    張夢涵啊閱讀 223評(píng)論 1 0

友情鏈接更多精彩內(nèi)容