HBase doBulkload by Scala

引言:

Hbase 存储数据时,如果数据量不大可以通过 Get 批量载入,当数据量够大时可以采用 Bulkload 方式,提高载入效率。Bulkload 就像 Hive 的 load 一样,提供好规定格式的文件即可。

主程序:

这里生成的 HFile 是 keyValue 形式的,Get 形式也可以,实现起来需要用到 mr。需要注意的是 HFile 要存储在 HBase 相对应集群下。

1.配置 Spark 与 Hbase 连接

    val argsMap = ArgsUtil.parseArgs(args)
    val input = argsMap.getOrElse("input", "input")
    val output = argsMap.getOrElse("output", "output")

    // 配置Spark
    val conf = new SparkConf().setAppName("doBulkLoad")
    // spark 初始化
    val sc = new SparkContext(conf)

    // 获取 HTable
    val tableName = "hTable"
    val hbaseConf = HbaseUtil.getHbaseConf
    val connection = HbaseUtil.getHConnection
    val hTable = new HTable(new JobConf(hbaseConf), Bytes.toBytes(tableName))

2. doBulkLoad

    // Do BulkLoad
    try {
      val regionLocator = connection.getRegionLocator(TableName.valueOf(tableName))
      val job = Job.getInstance(hbaseConf)
      job.setMapOutputKeyClass(classOf[ImmutableBytesWritable])
      job.setMapOutputValueClass(classOf[KeyValue])
      job.setOutputFormatClass(classOf[HFileOutputFormat])
      job.getConfiguration.set("mapred.output.dir", output)
      HFileOutputFormat2.configureIncrementalLoad(job, hTable, regionLocator)
      val bulkLoader = new LoadIncrementalHFiles(hbaseConf)
      bulkLoader.doBulkLoad(new Path(output), hTable)

    } catch {
      case t:Throwable => {
        t.printStackTrace()
        logError("Bulkload Failed..." + t.getStackTrace.mkString("\n"))
      }
    } finally {
      hTable.close()
      connection.close()
      logInfo("Bulkload Finished...")
    }

    sc.stop()

Tip:

scala 实现其实就是照搬 java 实现的,如果程序无法完成,也可以通过 completebulkload 方式高效导入 HBase 表。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值