记一次·Spark读Hbase

记一次·Spark读Hbase

一 、背景

过年回来,数仓发现hive的一个表丢数据了,需要想办法补数据。这个表是flume消费kafka写hive。但是kafka里只保存最近7天数据,有部分数据kafka里已经没有了。不过这份数据会同时被消费到HBase内存储一份,并且HBase内的数据是正常的。所以这次任务是读HBase数据写Hive表。

  1. HBase表内,只有一个列族info,列族内只有一个列value。
  2. value为“|”分割的字段字符串。
  3. “|”切割字符串得到最后一个字段为数据的时间戳,记为ts。
  4. hive根据ts转换后的yyyyMMdd作为分区。
二、计划
  1. 计划使用Spark,通过newAPIHadoopRDD的方式读HBase数据到内存。
  2. 按照HBase中的timestamp过滤数据,取20220127到20220201之间的数据。
  3. 写入hdfs文件
三、代码
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object SparkScanHBase {
   

  def main(args: Array[String]): Unit = {
   
    println(args)
    val startTS: String = args(0)
    val endTS: String = args(1)
    val path: String = args(2)

    val spark: SparkSession =
      SparkSession.builder().appName("SparkHBaseRDD")
        .config("spark.kryoserializer.buffer"

你可能感兴趣的:(记一次·Spark读Hbase)