如何从 Jupyter Notebook 中的 PySpark 远程连接到 Greenplum 数据库?
Posted
技术标签:
【中文标题】如何从 Jupyter Notebook 中的 PySpark 远程连接到 Greenplum 数据库?【英文标题】:How to connect to Greenplum Database remotely from PySpark in Jupyter Notebook? 【发布时间】:2019-04-16 16:49:38 【问题描述】:我正在尝试通过 JDBC 连接将 PySpark(使用 Jupyter Notebook)连接到 Oracle VM VirtualBox 上的 Greenplum 数据库实例,但是当我知道密码正确时收到以下错误。:
Py4JJavaError: An error occurred while calling o424.load.
: org.postgresql.util.PSQLException: FATAL: password authentication failed
for user "user2"
我试过了:
查看有关连接 PySpark 的 Greenplum DB 文档
在 gp_hba.conf、sshd_conf 和 postgresql.conf 文件中更改 Postgresql 连接设置
利用 pyspark shell 并将 .jar 文件加载为
pyspark --jars 'path to .jar file'
然后运行下面提到的代码
Jupyter Notebook 中的 PySpark 代码为:
import findspark
findspark.init('spark-2.4.1-bin-hadoop2.7')
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
option =
'url':"jdbc:postgresql://localhost:5432/tutorial",
'user':"user2",
'password':"SECRET",
'dbschema':"faa",
'dbtable':"otp_c",
'partitionColumn':"airlineid"
gpdf = spark.read.format('greenplum').options(**option).load()
Pivotal Greenplum 指示有一个连接器 .jar 文件,用于将 JDBC 连接到数据库,我已将其放在 spark-2.4.1-bin-hadoop2.7/jars/greenplum-spark_2.11-1.6.0.jar 中
此外,在 Greenplum DB 中,gp_hba.conf 配置为:
# If you want to allow non-local connections, you need to add more
# "host" records. In that case you will also need to make PostgreSQL
# listen on a non-local interface via the listen_addresses
# configuration parameter, or via the -i or -h command line switches.
# CAUTION: Configuring the system for local "trust" authentication allows
# any local user to connect as any PostgreSQL user, including the database
# superuser. If you do not trust all your local users, use another
# authentication method.
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
# IPv4 local connections:
# IPv6 local connections:
local all gpadmin ident
host all gpadmin 127.0.0.1/28 trust
host all gpadmin 10.0.2.15/32 trust
host all gpadmin ::1/128 trust
host all gpadmin fe80::a00:27ff:fe84:1f3f/128 trust
local replication gpadmin ident
host replication gpadmin samenet trust
local gpperfmon gpmon md5
host all gpmon 127.0.0.1/28 md5
local tutorial +users trust
host tutorial +users trust
host all all 0.0.0.0/0 md5
#local all all md5
#local all user2 ident
sshd_config文件配置了
PasswordAuthentication yes
最后配置postgresql.conf文件
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to '*', '*' = all
# (change requires restart)
port=5432 ##port = 5432 # sets the database
listener port for
# a Greenplum instance. The master and
# each segment has its own port
number.
# note: Port numbers for the Greenplum system must also be changed in the
# gp_configuration catalog. See the Greenplum Database Administrator Guide
# for instructions!
#
#
我希望连接到 Greenplum DB 并使用 PySpark 执行 SQL 查询,但是我收到 Py4JJavaError。
不确定还有哪些其他选项,理想情况下我想通过 Jupyter Notebook 连接,请帮助!
【问题讨论】:
【参考方案1】:在 pg_hba 中,主机配置需要 CIDR。 线
主机教程+用户信任
不会生效。 所以它通过最后一行并要求输入密码。
您可以在 greenplum 集群中创建一个角色 user2 并使用密码。
【讨论】:
嗨@Sung Yu-wei,感谢您的评论,请指定主机配置的CIDR应该是什么,greenplum集群已经有user2角色和密码,再次感谢。 你可以将pg_hba.conf中的“host tutorial +users trust”替换为“host tutorial user2 0.0.0.0/0 md5”,然后用“gpstop -u”作为gpadmin重新加载跨度> 在更改 pg_hba.conf 并使用“gpstop -u”重新加载后抛出同样的错误,不幸的是:( greenplum/postgres db 角色不是 linux 用户。 原谅我的无知,我对 Greenplum DB 还很陌生,“greenplum/postgres db 角色不是 linux 用户”是什么意思?以上是关于如何从 Jupyter Notebook 中的 PySpark 远程连接到 Greenplum 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
运行jupyter notebook出现这种情况的原因如何解决
运行jupyter notebook出现这种情况的原因如何解决
如何从 Jupyter Notebook 下载所有文件和文件夹层次结构?