带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?
Posted
技术标签:
【中文标题】带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?【英文标题】:GCP dataproc with presto - is there a way to run queries remotely via python using pyhive? 【发布时间】:2021-11-05 00:49:43 【问题描述】:我正在尝试在我在 dataproc 上运行的 presto 集群上运行查询 - 通过本地机器上的 python(使用 pyhive 中的 presto)。但我似乎无法弄清楚主机 URL。 GCP dataproc 甚至允许远程访问 presto 集群吗?
我尝试在 Presto 的 Web UI 上使用 URL,但这也不起作用。 我还查看了有关使用 Python 的云客户端库的文档。也没有帮助。 https://cloud.google.com/dataproc/docs/tutorials/python-library-example
from pyhive import presto
query = '''select * FROM system.runtime.nodes'''
presto_conn = presto.Connection(host=host, port=8060, username =user)
presto_cursor = presto_conn.cursor()
presto_cursor.execute(query)
错误
ConnectionError: HTTPConnectionPool(host='https', port=80): Max retries exceeded with url: url
(Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb41c0c25d0>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))
更新 我能够在 GCP 计算上手动创建 VM,配置 trino 并设置防火墙规则和负载均衡器,以便能够访问集群。
必须检查 dataproc 是否允许类似的配置。
【问题讨论】:
您使用什么主机名连接到 presto 集群? 我在 Presto Web UI 上尝试了 url。文档:cloud.google.com/dataproc/docs/concepts/accessing/… 组件网关通过 Knox 执行 url 重写,还有反向代理,所以我怀疑它是否能达到您的目的。 Dataproc 集群只不过是托管的 GCE 实例,因此所有与 GCE 相关的防火墙规则等仍然适用,所以您在 GCP 计算 (GCE) 上使用独立 trino VM 所做的事情,您应该这样做Dataproc 集群也是如此。没有通过 Dataproc 进行防火墙管理。 【参考方案1】:Google 防火墙似乎正在阻止来自外界的连接。
如何解决
快速而肮脏的解决方案
只允许访问从您的 IP 到 dataproc 集群的端口 8060。
如果您使用公共 IP 地址,这可能无法扩展,但可以让您进行开发。
向整个互联网公开“大数据”服务是一个糟糕的想法。您可能会被黑客入侵,Google 将关闭该服务。
使用 SSH 隧道
创建一个小实例(一个来自免费层),将 SSH 端口暴露给 inernet,并使用端口转发。
您的 URL 不会是 https://dataproc-cluster:8060...,而是 https://localhost:forwarded_port
这很容易做到,您可以在不需要时关闭堡垒虚拟机。
【讨论】:
以上是关于带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?的主要内容,如果未能解决你的问题,请参考以下文章
在不使用 Dataproc 的情况下将 GCP 与 PySpark 连接
Google Dataproc Presto:如何使用 Python 运行查询