参考博客:

Greenplum-Spark Connector 介绍_Greenplum中文社区的博客-CSDN博客

比pgload更快更方便写入大数据量至Greenplum的Greenplum-Spark Connector_秣码一盏的博客-CSDN博客

1、背景

官方推荐了几种将外部数据写入Greenplum方式,分别是jdbc、pgcopy、gpdfdist、以及Pivotal Greenplum-Spark Connector,在官方文档描述中:

  • jdbc写大数据量会很慢,也是最不推荐做大数据写入的;
  • pgcopy会比jdbc快,但是会占用master节点的资源;
  • gpdfdist不占用master资源,直接写入segment,能并行写入,但缺点是需要安装客户端,包括gpfdist等依赖;
  • Greenplum-Spark Connector:基于Spark并行处理,并行写入Greenplum,并提供了并行读取的接口,下面会基于该组件进行数据写入测试;下载地址(Download VMware Tanzu™ Greenplum® — VMware Tanzu Network)

2、测试代码

2.1 核心测试类

package com.greenplum.spark.gscimport org.apache.log4j.Logger
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}/*** @Description: TODO * @Author: chenweifeng* @Date: 2022年08月16日 下午4:00**/
object GreenplumSparkTest {// 全局log对象val LOGGER = Logger.getLogger(this.getClass)def main(args: Array[String]) {val conf = new SparkConf().setAppName("gsc-greenplum-test").setMaster("local")val sc = new SparkContext(conf)sc.setLogLevel("INFO")val spark = SparkSession.builder().config(conf).getOrCreate()println("spark-version:" + spark.version)// spark读greenplumval gscReadOptionMap = Map("url" -> "jdbc:postgresql://10.***.**.3:54432/pgbenchdb","user" -> "gpadmin","password" -> "******","dbschema" -> "public","dbtable" -> "test_datax_gp_spark")val gpdf: DataFrame = spark.read.format("greenplum").options(gscReadOptionMap).load()gpdf.show()// spark写greenplumval gscWriteOptionMap = Map("url" -> "jdbc:postgresql://10.***.**.3:54432/pgbenchdb","user" -> "gpadmin","password" -> "******","dbschema" -> "public","dbtable" -> "test_datax_gp_spark_w")gpdf.write.format("greenplum").mode(SaveMode.Append).options(gscWriteOptionMap).save()sc.stop()}
}

2.2 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>gsc-scala-test</artifactId><version>1.0-SNAPSHOT</version><properties><spark.version>2.4.5</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>${scala.version}</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins></build>
</project>

3 打包部署

3.1 打包

mvn clean package

3.2 上传包

分别上传greenplum-spark_2.12-2.1.0.jar 和 gsc-scala-test-1.0-SNAPSHOT.jar 这两个包到 spark的bin目录下

3.3 提交Spark任务执行命令

spark-submit \
--class com.greenplum.spark.gsc.GreenplumSparkTest \
--master spark://localhost:7078 \
--jars greenplum-spark_2.12-2.1.0.jar \
gsc-scala-test-1.0-SNAPSHOT.jar

遇到的坑

1、Greenplum-Spark Connector驱动和Spark的版本兼容问题

目前只支持Spark2.x版本的环境,如果用Spark3.x会报错,后续应该会支持。

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

  1. 基于Hadoop集群的Spark集群搭建

    基于Hadoop集群的Spark集群搭建 注:Spark需要依赖scala,因此需要先安装scala 一. 简单叙述一下scala的安装 (1)下载scala软件安装包,上传到集群 (2)建立一个用于 ...

  2. teradata查看正在运行的进程_一种基于greenplum数据库的状态检查及性能监控工具.doc...

    一种基于greenplum数据库的状态检查及性能监控工具 开发中心 导师责任制结业论文 题目:一种基于GreenPlum数据库的状态检查及性能监控工具 学员姓名: 导 师: 部 门: 非功能集成测试处 ...

  3. 基于Greenplum构建下一代数据分析平台

    了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网 7月3日,<Greenplum走遍中国>系列技术研讨会走进了大明湖畔的济南.上一篇文章,我们已经为大家整理了活动中 ...

  4. Windows家庭版下基于Docker的hadoop、Spark集群搭建

    Windows家庭版下基于Docker的hadoop.Spark集群搭建 目录 Windows家庭版下基于Docker的hadoop.Spark集群搭建 1.实验目的 2.实验平台 3.实验内容和要求 ...

  5. [转帖]Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇)

    Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇) http://www.postgres.cn/v2/news/viewone/1/454 原作者:姚延栋 创作时间:201 ...

  6. 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优...

    一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体    1.代码调优 1.避免创建重复的RDD,尽 ...

  7. 跟我一起学【Spark】之——Spark调优与调试

    第8章 Spark调优与调试 1.总结Spark的配置机制 2.理解Spark应用性能表现的基础知识.设置相关配置项.编写高性能应用设计模式 3.探讨Spark的用户界面.执行的组成部分.日志机制 8 ...

  8. 【Spark】黑马-大数据开发2

    Scala+Spark-大数据开发复习课程 10.scala 10.1.scala介绍 10.2.scala解释器 10.3.scala的基本语法 10.3.1.声明变量 10.3.2.字符串 10. ...

  9. spark—3(Spark Scheduler)

    2019独角兽企业重金招聘Python工程师标准>>> Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度.Sp ...

最新文章

  1. matlab 跳步循环,跳步急停是用单脚或双脚起跳,上体稍后仰,两脚同时平行落地。落地时()着地,用前脚掌内侧抵蹬住地面,两膝弯曲,降低重心,两臂屈肘微张,以保持身体平衡。...
  2. 数据结构(一)——二叉树的性质与两种遍历方法
  3. 信号完整性与电源完整性分析_电源完整性,信号完整性,你说哪个更重要一点?...
  4. 阿里分布式数据库服务实践
  5. java jsp公共异常页面_Java如何创建JSP错误页面以处理异常?
  6. webpack 的 scope hoisting 是什么?
  7. 7z解压软件(小巧好用)。百度云下载链接
  8. GooglePlay上架流程
  9. 市场营销商业指标统计分析
  10. 华山行-西安生活的小记录
  11. 一行代码一道题:求2的幂次方
  12. 线性代数笔记【特征值】
  13. 基于STM32的智能快递箱(快递驿站)设计
  14. python-华三防火墙过期策略统计
  15. 自己制作Windows PE工具盘
  16. STM32超级简便的按键代码 只需三行 可实现短按+长按
  17. python抓取谷歌指数(Google Trends)
  18. 计算机类图书按中图法类号,中图分类号 中国图书馆分类法(O类 数理科学和化学)...
  19. 追风筝的人 第十章
  20. 转-赵青-《剑侠情缘网络版》开发回顾

热门文章

  1. getOutputStream() has already been called for this response 当前响应已经调用了方法getOutputStream()
  2. Choco-slover的使用
  3. linux命令 du -h --max-depth=0,查看当前目录下文件大小
  4. excel通过合并单元格“增加行高”(大于最大行高409)
  5. TFN光时域反射仪,维修、安装网络的第一步!
  6. 广域网接口规范(v.35)
  7. OpenPlanner变道遇到的问题及解决
  8. NAT 模式下网关设置
  9. 那些会讲ppt的技术人有多爽?演讲的6个步骤
  10. android6.0原生壁纸,惊呆了!安卓6.0壁纸竟然是这样得来的