首页 > 其他分享 >Spark数据存储到Hbase案例

Spark数据存储到Hbase案例

时间:2024-12-26 21:28:52浏览次数:5  
标签:hbase 存储 val Bytes apache org Hbase spark Spark

本案例读取数据库中数据存储到Hbase

1、原始数据

MySQL数据库

2、Hbase建表

启动Hadoop、Zookeeper、Hbase

启动Hbase Shell窗口,执行

create 'tb_region','cfgeo'

3、编写代码

package com.soft863.demo

import org.apache.spark.sql.SparkSession
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapreduce.Job
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Result

object demo1 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[*]")
      .appName("ReadMySQLDatas")
      .getOrCreate()



    val jdbcDF = spark.read
      .format("jdbc")
      .option("url", "jdbc:mysql://192.168.1.5:3306/wjobs?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8")
      .option("dbtable", "tbspatial_region")
      .option("user", "root")
      .option("password", "root")
      .load()

    jdbcDF.printSchema()
    jdbcDF.show()


    val sc = spark.sparkContext
    sc.hadoopConfiguration.set("hbase.zookeeper.quorum", "hadoop100")
    sc.hadoopConfiguration.set("hbase.zookeeper.property.clientPort", "2181")
    sc.hadoopConfiguration.set(TableOutputFormat.OUTPUT_TABLE, "region")
    val rdd = jdbcDF.rdd.map(row => {
      val rowKeyBytes =  Bytes.toBytes(row.getAs[Int]("id"))
      val put = new Put(rowKeyBytes)
      val columnFamily = "cfgeo" // 定义列族名称
      put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes("city"), Bytes.toBytes(row.getAs[String]("city")))
      put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes("province"), Bytes.toBytes(row.getAs[String]("province")))
      new ImmutableBytesWritable(rowKeyBytes) -> put
    })
    val job = Job.getInstance(sc.hadoopConfiguration)
    job.setOutputKeyClass(classOf[ImmutableBytesWritable])
    job.setOutputValueClass(classOf[Result])
    job.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])
    rdd.saveAsNewAPIHadoopDataset(job.getConfiguration)

    spark.stop()
  }

}

需要用的pom依赖

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase.connectors.spark</groupId>
            <artifactId>hbase-spark</artifactId>
            <version>1.0.0</version>
        </dependency>

    </dependencies>

4、执行代码

查看Hbase表内容

标签:hbase,存储,val,Bytes,apache,org,Hbase,spark,Spark
From: https://blog.csdn.net/taogumo/article/details/144752922

相关文章

  • MySQL数据库——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)
    大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍MySQL数据库重要的存储引擎及其适用场景:InnoDB、MyISAM、MEMORY、ARCHIVE。文章目录MyISAMInnoDBMyISAMVSInnoDBMyISAM相较于InnoDB的优势MEMORYARCHIVEMEMORYVSARCHIVEM......
  • 熟悉常用的HBase操作01
    (一)编程实现以下指定功能,并用Hadoop提供的HBaseShell命令完成相同任务:(1) 列出HBase所有的表的相关信息,例如表名;(2) 在终端打印出指定的表的所有记录数据;(3) 向已经创建好的表添加和删除指定的列族或列;(4) 清空指定的表的所有记录数据;(5) 统计表的行数。     ......
  • 熟悉常用的HBase操作02(问题)
    实验内容与完成情况:(一)编程实现以下指定功能,并用Hadoop提供的HBaseShell命令完成相同任务:  HBaseShell运行截图:(1) 列出HBase所有的表的相关信息,例如表名; (2) 在终端打印出指定的表的所有记录数据; (3) 向已经创建好的表添加和删除指定的列族或列; (4) 清空指定的表......
  • 电脑永久免费云存储空间,什么是云存储
    在当今全球化的背景下,远程连接技术的重要性愈发凸显。它使得分布在世界各地的团队成员能够实时协作,共享资源,共同推进项目的进展。无论是跨国公司的远程办公,还是国际学术研究中的数据共享,远程连接都发挥着关键的作用,促进了信息的流通和知识的传播。这次给大家介绍什么是云存储?什......
  • 计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计Python+卷积神经网络租房推荐系统 租房大屏可视化 租房爬虫 hadoop spa
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • JavaScript中的数组和函数在内存分别是如何存储的?
    在JavaScript中,数组和函数在内存中的存储方式涉及到JavaScript的内存管理机制,特别是堆(Heap)和栈(Stack)的使用。虽然这些概念在底层实现上可能因JavaScript引擎(如V8,SpiderMonkey等)的不同而有所差异,但我们可以从一个高层次的视角来理解它们。1.数组在内存中的存储数组在JavaScript......
  • 写的代码在计算机的哪个设备存储?
    当你编写前端代码(如HTML、CSS、JavaScript等)时,这些代码文件通常首先存储在你的计算机上的某个存储设备中。这个存储设备可以是以下几种之一:硬盘驱动器(HDD):传统的硬盘驱动器使用磁碟存储数据,它们通常提供较大的存储容量,但读写速度可能较慢。固态硬盘(SSD):固态硬盘使用闪存来存储......
  • java哈希存储--数据结构
    前言前面学习过的数组存储和链式存储都有一定的缺点,哈希存储结合了二者的优点。本文源代码网址:https://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/hashhttps://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/hash哈希......