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

相关文章

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等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随