Greenplum-Spark连接器(GSC)简介

2024-02-18 02:10

本文主要是介绍Greenplum-Spark连接器(GSC)简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

我司算是Greenplum大户,虽然笔者不负责数仓,但是也少不得和它打交道。除了写pgSQL查询之外,Spark SQL能够使可用性更加丰富。Pivotal官方提供了Greenplum-Spark Connector(GSC)以打通GP和Spark,本文做个概述。

简单架构与配置

极简的架构图如下所示。

195230-188bfb33b26bb835.png
http://greenplum-spark.docs.pivotal.io/1-6/overview.html

使用GSC访问GP数据库时,Spark Driver首先与GP Master连接,以获取数据库和表的元数据。读取或写入表时,每个GP Segment会对应到一个或多个Spark Task(即Partition),每个Partition会对应建立一个GP外部表(external table)作为传输数据的媒介。Spark Executor与GP Segment之间的HTTP通信是完全并行的。

要放心使用GSC,需要预先配置好Greenplum:

  • 配置GSC使用的用户,并在pg_hba.conf中允许Spark集群各个节点与GP集群连接;
  • 对GSC用户连接的各GP Schema授予USAGE和CREATE权限:
GRANT USAGE, CREATE ON SCHEMA <schema_name> TO <user_name>;
  • 对GSC用户读写的各GP表授予SELECT和INSERT权限:
GRANT SELECT, INSERT ON <schema_name>.<table_name> TO <user_name>;
  • 允许GSC用户使用gpfdist协议创建可写外部表(用于卸载表数据到Spark)和可读外部表(用于从Spark装载表数据):
ALTER USER <user_name> CREATEEXTTABLE(type = 'writable', protocol = 'gpfdist');
ALTER USER <user_name> CREATEEXTTABLE(type = 'readable', protocol = 'gpfdist');

关于gpfdist和外部表的介绍请见这里,GP的外部表和Hive的外部表比较类似。GSC产生的外部表表名格式是spark_<app-specific-id>_<spark-node>_<num>,如下图所示。

195230-c467b922adde3a9f.png

在Spark App正常退出时,这些外部表会自动清理。如果App一直不终止(比如Streaming程序)或者异常终止,就需要我们手动drop掉那些不再使用的外部表:

DROP EXTERNAL TABLE <schema_name>.<external_table_name> CASCADE;

引入GSC JAR包到Maven项目

在Pivotal服务器上下载GSC JAR包。当前最新的版本为1.6.2,支持的GP版本为4.3.x、5.x和6.x,支持的Spark版本则为2.1.2及以上。

将下载好的greenplum-spark_2.11-1.6.2.jar放到项目中(如lib目录),然后修改pom文件添加依赖:

    <scala.bin.version>2.11</scala.bin.version><gsc.version>1.6.2</gsc.version><dependency><groupId>io.pivotal.greenplum.spark</groupId><artifactId>greenplum-spark_${scala.bin.version}</artifactId><version>${gsc.version}</version><type>jar</type><scope>system</scope><systemPath>${basedir}/lib/greenplum-spark_${scala.bin.version}-${gsc.version}.jar</systemPath></dependency>

从GP读取数据

读取数据需要传入如下参数:

  • url:连接GP数据库的JDBC串;
  • dbschema:源表所在的Schema;
  • dbtable:源表名;
  • user:GSC用户名;
  • password:用户对应的密码(可选);
  • partitionColumn:表内分区列的列名。该列数据用来确定GP表的行如何划分到Spark Partition,所以要尽量保证均匀,防止数据倾斜。这一列的数据类型必须是integer、bigint、serial、bigserial四者之一;
  • partitions:手动指定分区数(可选),如果不指定,默认分区数就是GP集群内主Segment的数量,当并行度不够时可以增大。

直接上示例代码吧。

    val userInfoReadOptions = Map("url" -> "jdbc:postgresql://gp-master:5432/my_db","user" -> "lmagics","password" -> "changeme","dbschema" -> "cpts","dbtable" -> "app_user_info","partitionColumn" -> "user_id")val userInfoDf = session.read.format("greenplum").options(userInfoReadOptions).load()

然后就可以对产生的DataFrame进行操作了。

向GP写入数据

写入数据需要传入的参数与读取数据基本相同,只是不需要指定partitionColumn和partitions两个域,并多了一个truncate域。示例代码如下。

    val userInfoWriteOptions = Map("url" -> "jdbc:postgresql://gp-master:5432/my_db","user" -> "lmagics","password" -> "changeme","dbschema" -> "cpts","dbtable" -> "app_user_info","truncate" -> "false")userInfoDf.write.format("greenplum").mode(SaveMode.Overwrite).options(userInfoWriteOptions).save()

若指定的表不存在,GSC会根据DataFrame中的各个字段名和数据类型自动创建表。Spark与GP数据类型的映射关系详见这里。

写入时建议调用mode()方法指定存储模式:

  • Append:向表追加数据;
  • Ignore:如果表已经存在,就忽略这批写入数据;
  • Overwrite:如果表已经存在,就清空该表并写入目标数据。清空表的动作由上述truncate参数指定,false表示会drop掉表,并重新create之;true则表示执行truncate操作。

The End

民那晚安。

这篇关于Greenplum-Spark连接器(GSC)简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719717

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些