【问题标题】:GCP dataproc with presto - is there a way to run queries remotely via python using pyhive?带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?
【发布时间】: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 进行防火墙管理。

标签: python google-cloud-platform presto google-cloud-dataproc presto-jdbc


【解决方案1】:

Google 防火墙似乎正在阻止来自外界的连接。

如何解决

快速而肮脏的解决方案

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

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

向整个互联网公开“大数据”服务是一个糟糕的想法。您可能会被黑客入侵,Google 将关闭该服务。

使用 SSH 隧道

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

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

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

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多