一.spark操作hbase的方式

  方式1.通过hive外部表映射成hbase表,然后通过spark-sql可以查询hbase表。

  方式2.通过创建HadoopRdd也可以查询hbase表。

二.方式区别

   方式1.通过spark操作hive的hbase映射表 会产生全表扫描,无法通过rowkey来过滤数据。

   方式2.通过创建HadoopRdd的方式可以设置Startrow 和 endRow来设置数据的范围,这样可以先过滤一部分数据,不需要将所有hbase的数据读入spark再过滤。

三.实现方式

  方式1

   1.基于CDH部署的集群将hbase-site.xml放入sparkconf目录中( /etc/spark/conf)

   2.运行spark-submit提交任务时增肌hive-hbase-handler-2.1.1-cdh6.3.0.jar依赖

使用--jars参数将依赖添加进去。

 既 : spark-shell --jars /data/model-client/hive-hbase-handler-2.1.1-cdh6.3.0.jar

   hive-hbase-handler-2.1.1-cdh6.3.0.jar下载地址

   链接:https://pan.baidu.com/s/1V5n1Rj8nzOqLSY4aMWllBw 
   提取码:nlbk 

  t_rsd_incident_day_count_hive为hive的hbase映射表
   

 

 

方式2 

 1.基于CDH部署的集群将hbase-site.xml放入sparkconf目录中( /etc/spark/conf)

 

object HbaseRdd {
  def main(args: Array[String]): Unit = {
    //1.创建spark环境
    val spark: SparkSession = SparkUtil.getSpark("hbaseRdd")
    //2.创建hbase配置文件
    val hbaseConf = HBaseConfiguration.create()
    //设置startrow为 2021-04-12日开始
    hbaseConf.set(TableInputFormat.SCAN_ROW_START,"2021-04-12")
    //3.创建rdd
    val hbaseRdd: RDD[(ImmutableBytesWritable, Result)] = SparkUtil.getHbaseRdd(spark,"t_rsd_incident_day_count",hbaseConf)
    //4.遍历hbaserddd 然后打印
    hbaseRdd.map(_._2).foreach(x=>{
      val result: Result =x
      val key = Bytes.toString(result.getRow)
      println(key)
    })
    spark.close()
  }
}


SparkUtil.getHbaseRdd方法

  def getHbaseRdd(spark: SparkSession, tableName: String, configuration: Configuration) = {
    configuration.set(TableInputFormat.INPUT_TABLE, tableName)
    //创建hbaseRDD。
    //读取数据并转化成rdd TableInputFormat 是 org.apache.hadoop.hbase.mapreduce 包下的
    val hBaseRDD = spark.sparkContext.newAPIHadoopRDD(
      //配置文件
      configuration,
      //要读取数据的格式
      classOf[TableInputFormat],
      //key的类型
      classOf[ImmutableBytesWritable],
      //value的类型
      classOf[Result])

    hBaseRDD
  }

2.提交yarn任务

/usr/bin/spark-submit --master yarn --deploy-mode cluster --class security.view.model.HbaseRdd  --name aa2 --driver-cores 4 --principal hbase@RSD.COM  --keytab /data/share/keytabpath/hbasenew.keytab  --executor-memory 5g  --driver-memory 4g  --num-executors 4  --executor-cores 5  /data/modelx/model/RsdModule-1.0.jar

3.查看运行结果

可以看到打印结果rowkey是从2021-04-12开头

 

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐