Spark——基于JDBC connector读写MySQL、Oracle、PostgreSQL、Greenplum

大数据:Spark直连Oracle数据库 前面我们已经把大数据平台搭建完成了,接下来是怎么应用大数据这件威力巨大的武器了。因为作者目前在一家传统型制造企业,很多业务和数据都是基于传统关系型数据库展开的,数据源大部分都存在Oracle、Mysql、PostgreSQL等传统关系型数据库,所以如何跟大数据平台建立联系,或者说让大数据技术更接地气,是应用大数据技术最好的实践。本文从一个初学者的角度去实践Spark访问Oracle数据库的过程。 ... 阅读详情

在大数据开发场景中,数据同步有很多种工具可以实现,其中包括DataX、FlinkCDC、Spark、Canal、sqoop等等,这边文章主要是描述Spark做多种数据源的同步,原理是基于jdbc驱动。

1 Scala版本代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.greenplum.spark</groupId>
    <artifactId>greenplum-spark-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spark.version>3.2.1</spark.version>
        <scala.version>2.12</scala.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>io.pivotal.greenplum.spark</groupId>
            <artifactId>greenplum-spark_${scala.version}</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.pivotal</groupId>
            <artifactId>greenplum-jdbc</artifactId>
            <version>5.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.3-1102-jdbc4</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

JDBCSource

package com.greenplum.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

//MysqlDriver:"com.mysql.jdbc.Driver"
//OracleDriver:"oracle.jdbc.driver.OracleDriver"
//GreenplumDriver:"com.pivotal.jdbc.GreenplumDriver"
//postgresqlDriver:"org.postgresql.Driver"

//MysqlURL:"jdbc:mysql://localhost:3306/databaseName"
//OracleURL:"jdbc:oracle:thin:@//localhost:1521:databaseName"
//GreenplumURL:"jdbc:pivotal:greenplum://localhost:15432;DatabaseName=databaseName"
//postgresqlURL:"jdbc:postgresql://localhost:5432/databaseName"

object JDBCSource {

  def createDF(session: SparkSession, param: Map[String, AnyRef]): DataFrame = {
    session.sqlContext.read
      .format("jdbc")
      .option("driver", param.get("driver").get.toString)
      .option("url", param.get("url").get.toString)
      .option("dbtable", param.get("dbtable").get.toString)
      .option("user", param.get("user").get.toString)
      .option("password", param.get("password").get.toString)
      .load()
  }
}

JDBCSink 

package com.greenplum.spark

import org.apache.spark.sql.DataFrame

//MysqlDriver:"com.mysql.jdbc.Driver"
//OracleDriver:"oracle.jdbc.driver.OracleDriver"
//GreenplumDriver:"com.pivotal.jdbc.GreenplumDriver"
//postgresqlDriver:"org.postgresql.Driver"

//MysqlURL:"jdbc:mysql://localhost:3306/databaseName"
//OracleURL:"jdbc:oracle:thin:@//localhost:1521:databaseName"
//GreenplumURL:"jdbc:pivotal:greenplum://localhost:15432;DatabaseName=databaseName"
//postgresqlURL:"jdbc:postgresql://localhost:5432/databaseName"

//saveMode
// - `overwrite`: overwrite the existing data.
// - `append`: append the data.
// - `ignore`: ignore the operation (i.e. no-op).
// - `error` or `errorifexists`: default option, throw an exception at runtime.

object JDBCSink {

  def save(df: DataFrame, saveMode: String, param: Map[String, AnyRef]): Unit = {
    df.write
      .mode(saveMode)
      .format("jdbc")
      .option("driver", param.get("driver").get.toString)
      .option("url", param.get("url").get.toString)
      .option("dbtable", param.get("dbtable").get.toString)
      .option("user", param.get("user").get.toString)
      .option("password", param.get("password").get.toString)
      .save()
  }
}

测试类JDBCMainTest,测试场景 MySQL->Greenplum,其他数据源同理 

package com.greenplum.spark

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Description: TODO 
 * @Author: chenweifeng
 * @Date: 2022年08月17日 下午3:27 
 **/
object JDBCMainTest {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("greenplum_spark_test").setMaster("local[*]")
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    // MySQL / Oracle / PostgreSQL / Greenplum
    // 以mysql为例,Oracle、 PostgreSQL、Greenplum只需更改相应参数即可

    //从mysql数据库中读取数据并加载成DF
    val mysqlReadOptionMap = Map(
      "driver" -> "com.mysql.cj.jdbc.Driver",
      "url" -> "jdbc:mysql://100.89.9.20:3306/test_datax_gp?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
      "user" -> "root",
      "password" -> "MySql8_Root",
      "dbtable" -> "test_datax_gp_spark"
    )

    val mysqlDataFrame: DataFrame = JDBCSource.createDF(spark, mysqlReadOptionMap)
    mysqlDataFrame.show()

    // spark将结果写入greenplum数据库中
    val greenplumWriteOptionMap = Map(
      //      "driver" -> "org.postgresql.Driver",
      //      "url" -> "jdbc:postgresql://10.254.21.3:54432/pgbenchdb",
      "driver" -> "com.pivotal.jdbc.GreenplumDriver",
      "url" -> "jdbc:pivotal:greenplum://10.254.21.3:54432;DatabaseName=pgbenchdb",
      "user" -> "gpadmin",
      "password" -> "changeme",
      "dbschema" -> "public",
      "dbtable" -> "test_datax_gp_spark",
    )

    JDBCSink.save(mysqlDataFrame, SaveMode.Overwrite.name(), greenplumWriteOptionMap)

    sc.stop()
  }
}

2 Java版本代码

待更新。。。

spark通过connector的方式读写starrocks 2,导入官方github里的sparkdemo下的文件到自己的目录下,如下。3,spark写数据到starrocks样例代码可以根据官方demo改。上面的包可以在下面git里的resource里下载。然后在resources下面加上这个包。--starrocks的包-->1,添加maven依赖。参考官方github。 阅读详情

相关推荐

Spark-SQL连接JDBC的方式及代码写法

Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。1.3.3 兼容 Hive。在已有的仓库上直接运行 SQL 或者 HQL。1.2.1 易整合。无缝的整合了 SQL 查询和 Spark 编程。1.2.4 标准数据连接。通过 JDBC 或者 ODBC 来连接。1.2.2 统一的数据访问。使用相同的方式连接不同的数据源。1.首先启动thriftserver服务。2.打开IDEA导入hive-jdbc包。Spark-SQL概述。

weixin_60343288的博客 1039

Spark SQL数据源:JDBC

Spark SQL还可以使用JDBC API从其他关系型数据库读取数据,返回的结果仍然是一个DataFrame,可以很容易地在Spark SQL中处理,或者与其他数据源进行连接查询。执行上述命令(dbtable属性的值是一个子查询,相当于SQL查询中的FROM关键字后的一部分)注意:Spark 2.4.0开始的Spark SQL的JDBC属性里才有query属性。将数据帧内容以jdbc格式写入数据库spark_db的test表。查看结果数据帧内容,执行命令:resultDF.show()

梁辰兴的博客 4117

spark-atlas-connector:一个Spark Atlas连接器,用于跟踪Apache Atlas中的数据沿袭

Spark Atlas连接器 用于跟踪Spark SQL / DataFrame转换并将元数据更改推送到Apache Atlas的连接器。 此连接器支持跟踪: SQL DDL,例如“创建/删除/更改数据库”,“创建/删除/更改表”。 SQL DML,例如“ CREATE TABLE tbl AS SELECT”,“ INSERT INTO ...”,“ LOAD DATA [LOCAL] INPATH”,“ INSERT OVERWRITE [LOCAL] DIRECTORY”等。 具有输入和输出的DataFrame转换 机器学习管道。 该连接器将与Hive,HDFS等其他系统关联,以跟踪Atlas中数据的生命周期。 如何建造 要使用此连接器,您将需要最新版本的Spark(Spark 2.3+),因为大多数功能仅在Spark 2.3.0+中存在。 要构建此项目,请执行: mv

Spark通过jdbc性能调优--采用分区的方式从oracle读数据

采用ROWID的最后一位的ASCII码对20进行取模,得到的模是0-19之间的,这样就可以将这个值作为分区键,每条数据记录将会划分到固定的分区。因为分区数是20,所以在oracle数据里面就会生成20条SQL,每条sql又一个excutor取读取。常规jdbc读取表的时候只有一个分区在执行,也就是只有一个excutor在工作,没有把spark并行操作的特性发挥出来。通过查阅sparksql官方文档,查阅到如下的jdbc操作数据库的连接属性。所以我们可以采取上表中所示的分区读表的方式来优化这个问题。

korry24的博客 2194

别再只改config了!YOLO/RT-DETR多通道输入实战:数据集结构、多卡训练与参数优先级避坑指南

本文详细解析了YOLO/RT-DETR模型在多通道输入(如8通道多光谱图像)中的实战应用,涵盖数据集结构优化、数据加载器改造、模型参数调优及多卡训练配置。针对常见的多通道输入报错问题,提供了系统的解决方案和性能优化技巧,帮助开发者高效实现非标准数据格式的适配与训练。

weixin_30955617的博客 397

C#与工业设备的OPC DA/UA协议通信开发

摘要:本文介绍了C#与工业设备通信的两种OPC协议(OPC DA和OPC UA)的实现方法。OPC DA基于COM/DCOM技术,适用于Windows平台,提供实时数据采集功能;OPC UA则支持跨平台通信,具备更强的安全性和数据建模能力。文章详细展示了如何使用C#通过OPC DA和OPC UA协议读取、写入数据,并提供了代码示例,包括安装相关库、建立连接、订阅数据变化等关键步骤。这些方法为工业自动化中的设备监控与控制提供了实用解决方案。(149字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1259

StarRocks 学习指南

StarRocks 学习指南

姜穆澜的博客 478

保姆级教程:用掘金量化API手把手复现一个年化17%的网格交易策略(附完整Python代码)

本文提供了一份详细的掘金量化API教程,手把手教你构建一个年化17%的网格交易策略。通过完整的Python代码实现,深入解析网格交易的核心逻辑、参数配置和动态调仓机制,帮助量化新手快速掌握策略开发全流程。教程包含环境配置、代码实现、回测分析和常见问题解答,是学习量化投资的实用指南。

weixin_33709364的博客 298

spark的jdbc连接数据库

必须配置的两点:1.配置驱动包和依赖jar包2.如果没有配置可能会提示驱动不匹配。

jinying_51eqhappy的博客 1188

大模型运维实战:从GPU选型到推理服务稳定落地

大模型服务进入生产环境后,运维对象从传统进程转向GPU显存、KV Cache、推理吞吐等动态资源。显存利用率、首token延迟、并发队列深度等指标,直接影响模型服务的质量与成本。理解推理框架的内存分配机制、掌握监控告警与自动化扩容手段,是保障服务稳定的关键。这类能力广泛应用于企业私有化部署、智能客服、知识库问答等场景,帮助运维团队从被动救火转向主动容量规划与性能调优。本文围绕大模型运维的完整路线,梳理从硬件选型、推理部署到监控排障的实战经验,并算清一份真实项目的长期成本账。

weixin_29054245的博客 238

UE5网络同步优化:GetLifetimeReplicatedProps高级应用指南

本文深入探讨了UE5中GetLifetimeReplicatedProps函数的高级应用与优化策略。文章超越了基础变量注册,重点阐述了如何通过精细的复制条件控制、频率管理及分层复制机制,构建高效的数据同步通道,从而优化网络带宽与游戏性能,是提升多人游戏体验的实用指南。

weixin_29007243的博客 533

Spark读写Oracle性能深度调优

Spark作为一个分布式计算框架,可以很好的适用于Hadoop。那么Spark是否可以与关系型数据库较好的进行兼容呢?以Spark作为计算,以关系型数据库(例如Oracle)作为存储?   答案当然是可以,笔者经过不断地测试和优化,终于将Spark与Oracle进行了兼容匹配与读写优化。 1、环境准备   在本次测试环境中,用6台机器搭建了CDH的Hadoop平台,Spark2.2版本搭配Yarn进行资源分配。   Spark通常采用JDBC来读写Oracle,所以在Spark环境下需要确保包含了JDBC包

weixin_43370502的博客 3143

对比学习损失函数避坑指南:为什么你的自监督模型不收敛?

本文深入剖析对比学习损失函数中的关键陷阱,揭示自监督模型不收敛的根本原因。通过分析温度系数选择、负样本采样策略和特征归一化等核心因素,提供实用解决方案。实验数据表明,正确设置温度系数τ(建议0.07起)可提升30%性能,而MoCo风格的负样本队列比SimCLR方案在小批量时准确率高6-8%。

nokia的博客 922

spark sql使用jdbc读取数据库的过程

spark jdbc读取数据库过程

chanyue123的博客 2219

SAP 深入理解库存

当 某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是 看这是不是本期间第一笔移动。其二,我们不能保证这定期的作业的确定性,硬件维护、系统性能都可能使这预定的“时刻”出现偏差,如果某一次没能抓取该时刻的库存,对整个报表来说,是数据的缺失;中,当某一期间(Period)的第一项操作更新了物料数量或价值,则SAP系统会向表MBEWH写入一条记录,以第一项操作之前的余额、价格控制为标准。这对于业务数据量大的。

matinal 當冬夜漸暖 。公众号:matinal 3621

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

Spark 操作 JDBC

Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame,通过对DataFrame 一系列的计算后,还可以将数据再写回关系型数据库中。如果使用 spark-shell 操作,可在启动 shell 时指定相关的数据库驱动路径或者将相关的数据库驱动放到 spark 的类路径下。 bin/spark-shell --jars mysql-connector-java-5.1.27-bin.jar 我们这里只演示在 Idea 中通过 JDBC 对 Mysql 进行操作 1.

weixin_45417821的博客 4051

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

spark学习(5)--之spark计算结果保存到oracle中

在spark把计算结果保存到oracle中的操作和前边的学习到的spark计算步骤基本一样,都是 第一步创建SparkContext对象来连接spark 第二步读取文件 第三步执行计算 第四步就就开始往hadoop中保存或者oracle中保存 在创建工程的时候我们要导入spark中lib的包还需要把oracle中的驱动导入到程序当中,oracle的驱动在安装oracle的路径C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar 这里我们主要是使用jdbc来往o

枣泥馅的博客 1748

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Hive(一)Hive基本概念

Hive(二)Hive基本概念Hive概念Hive中的数据来源Hive中的元数据信息为什么要HiveHive的架构 Hive概念 Hive是一个数据仓库的处理工具,专门用于仓库的数据分析。Hive是基于hadoop上的一个数据仓库工具,将结构化的数据,映射成为一张表,并且提偶给你类似于sql的查询功能。 Hive的本质是将SQL语句转换为MapReduce的任务进行执行。底层由HDFS来提供数据的存储支持,说白了hive可以理解为一个将SQL转换为MapReduce任务的工具,甚至更进一步可以说hive就是

qq5024581的博客 623

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)...

  最近公司开始做大数据项目,让我使用sqoop(1.6.4版本)导数据进行数据分析计算,然而当我们将所有的工作流都放到azkaban上时整个流程跑完需要花费13分钟,而其中导数据(增量)就占了4分钟左右,老板给我提供了使用 spark 导数据的思路,学习整理了一个多星期,终于实现了sqoop的主要功能。   这里我使用的是pyspark完成的所有操作。      条件:hdfs平台,pys...

weixin_30945039的博客 647

Spark直连Oracle数据库(五)

前面我们已经把大数据平台搭建完成了,接下来是怎么应用大数据这件威力巨大的武器了。因为作者目前在一家传统型制造企业,很多业务和数据都是基于传统关系型数据库展开的,数据源大部分都存在Oracle、Mysql、PostgreSQL等传统关系型数据库,所以如何跟大数据平台建立联系,或者说让大数据技术更接地气,是应用大数据技术最好的实践。本文从一个初学者的角度去实践Spark访问Oracle数据库的过程。 ...

invjsk的专栏 718

Spark-SQL连接JDBC的方式及代码

Spark SQL支持数据源使用JDBC从其他数据库读取数据。与使用JdbcRDD相比,应优先使用此功能。这是因为结果以DataFrame的形式返回,并且可以轻松地在Spark SQL中进行处理或与其他数据源合并。JDBC数据源也更易于从Java或Python使用,因为它不需要用户提供ClassTag。JDBC和 Kubernetes中的 Java数据源一样,都使用 Java语言编写。不过 JDBC比 JDBC更小,因为它使用标准的 JSON文件格式。

Aricya的博客 1212

Spark通过JDBC操作数据库

Spark应用程序支持通过JDBC方式连接MySQL数据库并且读取或者保存数据。

优快云1csdn1的博客 876

Greenplum——基于Greenplum-Spark Connector的Spark脚本开发及遇到的坑

分别上传greenplum-spark_2.12-2.1.0.jar 和 gsc-scala-test-1.0-SNAPSHOT.jar 这两个包到 spark的bin目录下。1、Greenplum-Spark Connector驱动和Spark的版本兼容问题。目前只支持Spark2.x版本的环境,如果用Spark3.x会报错,后续应该会支持。

Carson073的博客 2149
上一篇: DataX二次开发——(5)基于CopyIn原理新增greenplumwriter
下一篇: Greenplum——基于Greenplum-Spark Connector的Spark脚本开发及遇到的坑
CarsonBigData
博客等级 码龄9年 8315粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值