2

我正在尝试在我在 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 计算上手动创建一个虚拟机,配置 trino 并设置防火墙规则和负载均衡器,以便能够访问集群。

必须检查 dataproc 是否允许类似的配置。

4

1 回答 1

2

看起来谷歌防火墙正在阻止来自外部世界的连接。

怎么修

快速而肮脏的解决方案

只允许从您的 IP 访问端口 8060 到 dataproc 集群。

如果您使用公共 IP 地址,这可能无法扩展,但可以让您进行开发。

将“大数据”服务暴露给整个互联网是个坏主意。您可能会被黑客入侵,Google 将关闭该服务。

使用 SSH 隧道

创建一个小实例(一个来自免费层),将 SSH 端口暴露给 inernet,并使用端口转发。

您的 URL 不会是 https://dataproc-cluster:8060...,而是 https://localhost:forwarded_port

这很容易做到,您可以在不需要时关闭该堡垒虚拟机。

于 2021-09-08T10:55:16.113 回答