Spark操作HBase的数据,实现列值的计算

这篇具有很好参考价值的文章主要介绍了Spark操作HBase的数据,实现列值的计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将介绍如何使用Spark操作HBase的数据,实现列之间的计算,以特征值计算为例。特征值是指从原始数据中提取出来的具有代表性或判别性的数值,可以用于数据分析或机器学习等领域。本文将使用hbase-spark连接器,通过Spark RDD的方式,读取和写入HBase的表,实现对Sentinel-2卫星影像数据的特征值计算。

主要内容如下:

  • 创建SparkSession和HBaseConfiguration对象。
  • 读取HBase表的数据,并转化成RDD。
  • 进行列式计算,得到特征值,并转化成RDD。
  • 写入HBase表的数据。
  • 验证HBase表的数据。

目录

一、环境准备

二、创建SparkSession和HBaseConfiguration对象

三、读取HBase表的数据,并转化成RDD

四、计算特征值,并转化成RDD

五、写入HBase表的数据

六、关闭SparkSession

七、验证HBase表的数据


 一、环境准备

  • 安装Spark环境,HBase环境等,配置好集群。本文所用环境具体配置情况如下

分布式存储与并行处理环境配置:Hadoop、HBase和Spark等_runepic的博客-CSDN博客https://blog.csdn.net/weixin_40694662/article/details/130030611

  • 准备HBase的表,并导入一些测试数据。本文使用的是t3表和t3index表,分别存储了Sentinel-2卫星影像数据和时间索引。可以使用以下命令:
create 't3', 'f1'
create 't3index', 'f1'
put 't3', '1000', 'f1:2019-01-01B2', '100'
put 't3', '1000', 'f1:2019-01-01B3', '200'
put 't3', '1000', 'f1:2019-01-01B4', '300'
put 't3', '1000', 'f1:2019-01-01B8', '400'
put 't3', '1000', 'f1:2019-01-01B11', '500'
put 't3', '1000', 'f1:2019-01-01B12', '600'
put 't3index', '0001', 'f1:td', ':2019-01-01B:'

 

二、创建SparkSession和HBaseConfiguration对象

  • 导入需要的模块,包括org.apache.hadoop.hbase、org.apache.hadoop.hbase.mapreduce、org.apache.hadoop.io等。例如:
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.{Put, Result}
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.{TableInputFormat, TableOutputFormat}
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.io.NullWritable
import org.apache.spark.sql.SparkSession
  • 创建一个SparkSession对象,并设置应用名和运行模式。打包运行时需要注释.master("local") 例如:
val spark = SparkSession.builder().appName("SparkHBaseRDDfeature")
  .master("local")
  .getOrCreate()
  • 创建一个HBaseConfiguration对象,并设置Zookeeper的地址和端口。例如:
val hbaseConf = HBaseConfiguration.create()
hbaseConf.set("hbase.zookeeper.quorum", "hadoop100:2181,hadoop200:2181,hadoop201:2181")
hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")

三、读取HBase表的数据,并转化成RDD

  • 使用newAPIHadoopRDD方法,根据表名和列族名获取一个RDD。该RDD的元素类型为(ImmutableBytesWritable, Result),其中ImmutableBytesWritable是行键的封装,Result是行数据的封装。例如:
val tablename = "t3"
hbaseConf.set(TableInputFormat.INPUT_TABLE, tablename)
val hBaseRDD = spark.sparkContext.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat],
  classOf[ImmutableBytesWritable],
  classOf[Result])
  • 使用map方法,将RDD中的每个元素转换为一个元组,其中包含行键和列值。例如:
val hBaseRDD2 = hBaseRDD.map{case (k,v) =>
  val rowkey = Bytes.toString(k.get())
  val b2 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B2".getBytes)).toDouble
  val b3 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B3".getBytes)).toDouble
  val b4 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B4".getBytes)).toDouble
  val b8 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B8".getBytes)).toDouble
  val b11 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B11".getBytes)).toDouble
  val b12 = Bytes.toString(v.getValue("f1".getBytes, "2019-01-01B12".getBytes)).toDouble
  (rowkey, b2, b3, b4, b8, b11, b12)
}

四、计算特征值,并转化成RDD

  • 定义一个函数,用于计算特征值。该函数接受六个参数,分别是Blue、Green、Red、NIR、SWIR_1和SWIR_2,分别对应Sentinel-2卫星影像的六个波段。该函数返回一个元组,包含三个特征值,分别是DVI、RVI和NDVI。例如:
def calculateFeatures(Blue: Double, Green: Double, Red: Double, NIR: Double, SWIR_1: Double, SWIR_2: Double): (Double, Double, Double) = {
  val DVI = NIR - Red
  val RVI = NIR / Red
  val NDVI = (NIR - Red) / (NIR + Red)
  (DVI, RVI, NDVI)
}
  • 使用map方法,将RDD中的每个元素转换为一个(NullWritable, Put)类型的元组,用于写入HBase表。其中NullWritable是空键的封装,Put是写入操作的封装。例如:
val hBaseRDDre = hBaseRDD2.map{case (rowkey, b2, b3, b4, b8, b11, b12) =>
  // 创建一个Put对象,并设置行键
  val put: Put = new Put(rowkey.getBytes)
  // 调用calculateFeatures函数,计算特征值
  val (DVI, RVI, NDVI) = calculateFeatures(b2, b3, b4, b8, b11, b12)
  // 将特征值作为列值,添加到Put对象中
  put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("DVI"), Bytes.toBytes(DVI.toString))
  put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("RVI"), Bytes.toBytes(RVI.toString))
  put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("NDVI"), Bytes.toBytes(NDVI.toString))
  // 返回(NullWritable.get(), put)类型的元组
  (NullWritable.get(), put)
}

五、写入HBase表的数据

  • 设置写入HBase表的表名。例如:
hbaseConf.set(TableOutputFormat.OUTPUT_TABLE, "t3feature")
  • 借助于mapreduce的Job对象添加参数配置。例如:
val job: Job = Job.getInstance(hbaseConf)
job.setOutputFormatClass(classOf[TableOutputFormat[NullWritable]])
job.setOutputKeyClass(classOf[NullWritable])
job.setOutputValueClass(classOf[Put])
  • 使用saveAsNewAPIHadoopDataset方法,将RDD写入HBase表。例如:
hBaseRDDre.saveAsNewAPIHadoopDataset(job.getConfiguration)

 

六、关闭SparkSession

  • 使用stop方法,关闭SparkSession。这样可以释放SparkContext占用的资源,避免资源浪费或冲突。例如:
spark.stop()

七、验证HBase表的数据

  • 使用exit命令,退出spark-shell。例如:
exit
  • 使用hbase shell命令,进入HBase交互式shell。例如:
hbase shell
  • 使用scan命令,扫描HBase表的数据,并查看特征值。例如:
scan 't3feature'
  • 使用exit命令,退出HBase shell。例如:
exit

 文章来源地址https://www.toymoban.com/news/detail-489075.html

到了这里,关于Spark操作HBase的数据,实现列值的计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云计算】HBase表操作

    HBase是一个分布式、可扩展的、非关系型的NoSQL数据库。它是建立在Hadoop HDFS上的一个开源的数据库管理系统。HBase的设计目标是提供高可靠性、高可扩展性、高性能、高延迟、高容错性和高可用性。 HBase是一种面向列的数据库,可以处理海量的结构化和半结构化数据。它可以

    2024年02月09日
    浏览(33)
  • 大数据:Hadoop基础常识hive,hbase,MapReduce,Spark

    Hadoop是根据Google三大论文为基础研发的,Google 三大论文分别是: MapReduce、 GFS和BigTable。 Hadoop的核心是两个部分: 一、分布式存储(HDFS,Hadoop Distributed File System)。 二、分布式计算(MapReduce)。 MapReduce MapReduce是“ 任务的分解与结果的汇总”。 Map把数据切分——分布式存放

    2024年04月25日
    浏览(54)
  • 大数据技术(入门篇)--- 使用Spring Boot 操作 CDH6.2.0 Spark SQL进行离线计算

    CDH 6.2.0 搭建的环境,并不能直接使用 spark 相关资源,需要对此服务端环境进行一些修改 Spark 目前仅支持 JDK1.8, Java项目运行环境只能使用JDK 1.8 我这里使用的是 CDH6.2.0集群,因此使用的依赖为CDH专用依赖,需要先添加仓库 spark 使用scala 语言编写,因此项目中使用的scala依赖版

    2024年02月08日
    浏览(84)
  • 大数据篇 | Hadoop、HDFS、HIVE、HBase、Spark之间的联系与区别

    Hadoop是一个开源的分布式计算框架,用于存储和处理大规模数据集。它提供了一个可扩展的分布式文件系统(HDFS)和一个分布式计算框架(MapReduce),可以在大量廉价硬件上进行并行计算。 HDFS(Hadoop Distributed File System)是Hadoop的分布式文件系统。它被设计用于在集群中存储

    2024年02月16日
    浏览(55)
  • Linux CentOS下大数据环境搭建(zookeeper+hadoop+hbase+spark+scala)

    本篇文章是结合我个人学习经历所写,如果遇到什么问题或者我有什么错误,欢迎讨论。 百度网盘链接:https://pan.baidu.com/s/1DCkQQVYqYHYtPws9hWGpgw?pwd=zh1y 提取码:zh1y 软件在连接中VMwareWorkstation_V16.2.1_XiTongZhiJia的文件夹下。 双击运行安装包,这里下一步即可。 这里勾选我接受许可

    2024年04月15日
    浏览(66)
  • 【大数据监控】Grafana、Spark、HDFS、YARN、Hbase指标性能监控安装部署详细文档

    Grafana 是一款开源的数据可视化工具,使用 Grafana 可以非常轻松的将数据转成图表(如下图)的展现形式来做到数据监控以及数据统计。 解压 配置 mapping 文件 修改spark的metrics.properties配置文件,让其推送metrics到Graphite_exporter namenode.yaml datanode.yaml 配置 hadoop-env.sh yarn.yaml 配置 ya

    2023年04月21日
    浏览(54)
  • 轻大21级软工大数据实验(手把手教你入门Hadoop、hbase、spark)

    写在最前面,如果你只是来找答案的,那么很遗憾,本文尽量避免给出最后结果,本文适合Linux0基础学生,给出详细的环境配置过程,实验本身其实很简单,供大家一起学习交流。 1 .编程实现以下指定功能,并利用 Hadoop 提供的 Shell 命令完成相同任务 : 向HDFS 中上传任意文

    2024年02月05日
    浏览(82)
  • 大数据系统常用组件理解(Hadoop/hive/kafka/Flink/Spark/Hbase/ES)

    一.Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。 Hadoop的核心是yarn、HDFS和Mapreduce。yarn是资源管理系统,实现资源调度,yarn是Hadoop2.0中的资源管理系统,总体上是master/slave结构。对于yarn可以粗浅将其理解

    2024年02月20日
    浏览(44)
  • Kafka传输数据到Spark Streaming通过编写程序java、scala程序实现操作

    现有一电商网站数据文件,名为buyer_favorite1,记录了用户对商品的收藏数据,数据以“t”键分割,数据内容及数据格式如下: 项目环境说明 开启hadoop集群,zookeeper服务,开启kafka服务。再另开启一个窗口,在/apps/kafka/bin目录下创建一个topic。 1、新创一个文件folder命名为li

    2024年02月13日
    浏览(55)
  • 大数据平台安装实验: ZooKeeper、Kafka、Hadoop、Hbase、Hive、Scala、Spark、Storm

    ​ 在大数据时代,存在很多开源的分布式数据采集、计算、存储技术,本实验将在熟练掌握几种常见Linux命令的基础上搭建几种常用的大数据采集、处理分析技术环境。 相关安装包下载: 链接:https://pan.baidu.com/s/1Wa2U3qstc54IAUCypcApSQ 提取码:lcd8 Hadoop大数据平台所需工具、软件

    2023年04月09日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包