无法使 Apache Superset 连接到 Presto DB(此 PrestoDB 已连接到 Apache Pinot)

Not able to make Apache Superset connect to Presto DB (this PrestoDB is connected to Apache Pinot)

我是 Apache Pinot、PrestoDb 和 Superset 的新手。我已成功设置 PrestoDB 并使用以下步骤将其连接到 Apache Pinot:

    docker run \
      --network pinot-demo \
      --name=presto-coordinator \
      -p 8080:8080 \
      -d apachepinot/pinot-presto:latest

我可以查询 PrestoDB 并已验证 PrestoDB 能够从 Pinot 获取记录。

$ presto/presto-cli --server localhost:8080 \
  --catalog pinot --schema default
    
  presto:default> show catalogs;
  presto:default> select * from my_table limit 10;
    col1   | col2
    --------------------
     val 1 | 1990380139 
     val 2 | 1990380130 
     val 3 | 1990380130 

现在,我使用官方 docker 图像和步骤启动并初始化 Apache Superset。由于 Superset 也默认在 8080 上运行,因此我使用了 -p 8088:8080。 (不知道这算不算问题)

docker run --network pinot-demo --name superset -p 8088:8080 -d apache/superset:latest

docker exec -it superset superset fab create-admin \
   --username admin \
   --firstname Superset \
   --lastname Admin \
   --email admin@superset.com \
   --password admin

docker exec -it superset superset db upgrade

docker exec -it superset superset init

在这个 Superset 网络应用程序上,我想添加一个新的 PrestoDb 数据库。以下是我尝试过但 Superset 无法连接到 PrestoDB 的 SQLAlchemy URI。

1. hive://hive@localhost:8080/pinot
2. presto://localhost:8080/
3. presto://localhost:8080/pinot
4. presto://localhost:8080/pinot/default
5. hive://hive@localhost:8080/pinot/default

请帮我找出正确的 SQLAlchemy URI 以在 Apache Superset 和 PrestoDB 之间建立连接。

值得注意的是,当我分别使用 hive 和 presto dialect/driver 时,我遇到了以下错误。

使用时

hive://hive@localhost:8000/pinot

INFO:thrift.transport.TSocket:Could not connect to ('127.0.0.1', 8000)
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/thrift/transport/TSocket.py", line 113, in open
    handle.connect(sockaddr)
ConnectionRefusedError: [Errno 111] Connection refused
INFO:thrift.transport.TSocket:Could not connect to ('127.0.0.1', 8000)
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/thrift/transport/TSocket.py", line 113, in open
    handle.connect(sockaddr)
ConnectionRefusedError: [Errno 111] Connection refused
ERROR:thrift.transport.TSocket:Could not connect to any of [('127.0.0.1', 8000), ('127.0.0.1', 8000)]

使用时

presto://localhost:8000/pinot

INFO:pyhive.presto:SELECT 1
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:8000

当您尝试从 superset 访问 presto 时,网络连接在 superset 容器和 presto 容器之间,因此 localhost 将无法工作。

您需要获取prestodb容器的真实ip,可以是容器ip,也可以是主机ip。您可以尝试以下方法吗?

presto://{continer_ip}:8080/pinot
presto://{host_id}:8080/pinot