【问题标题】:Presto server - Cannot connect to discovery server for announcePresto 服务器 - 无法连接到发现服务器以进行宣布
【发布时间】:2013-11-23 14:32:08
【问题描述】:

尝试使用独立的协调器/多个工作节点运行 Presto。 Coordinator 节点启动,但无法向 Discovery 服务宣布自己(在同一节点上运行)。在另一个节点上启动 presto worker 也无法向 Discovery 服务通告,因此在 qyerying 时出现此问题:failed: No nodes available to run query

协调器/发现节点配置:

coordinator=true
datasources=jmx
http-server.http.port=8000
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://10.0.0.11:8000

启动日志:

2013-11-11T16:54:57.999+0000     INFO   main    com.facebook.presto.server.PrestoServer     ======== SERVER STARTED ========
2013-11-11T16:54:58.002+0000    ERROR   Announcer-0 io.airlift.discovery.client.Announcer   Cannot connect to discovery server for announce: Announcement failed with status code 404:         <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 Not Found</title>
</head>
<body>
<h2>HTTP ERROR: 404</h2>
<p>Problem accessing /v1/announcement/presto-coordinator. Reason:
<pre>    Not Found</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>

服务器似乎在 8000 端口上运行:

[root@ip-10-0-0-11 ~]# curl http://10.0.0.11:8000
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
...
<body>
<div class="container">
    <div class="page-header">
        <h1>Presto</h1>
    </div>
...

附:在 Azure 集群上看到同样的问题,看起来不是亚马逊或网络问题。

这是对this 问题的跟进,Presto 可以在同一节点上与 Coordinator/Worker 正常工作(但仍然存在上述问题)。

【问题讨论】:

  • 10.0.0.11:8000 是协调器吗?协调器是否成功地向嵌入式发现服务器宣布自己?请验证 discovery.uri 都指向协调器。
  • 是的,10.0.0.11:8000 是协调器和嵌入式发现服务器。不,它不能向嵌入式发现服务器宣布自己,附加的日志片段是 10.0.0.11 协调器/发现服务器启动。在这种情况下,它只是一个节点启动并且它的 discovery.uri 是正确的(在问题中提到)。其余的datanodes也有正确的discovery.uri,但我不知道为什么它不能先宣布自己。

标签: presto


【解决方案1】:

多次阅读您的问题和评论后,我终于意识到这是发现服务器(嵌入式和独立)中的一个错误,当node.id(在node.properties 文件中)是不是 UUID。我们从来没有注意到这个错误,因为我们总是使用 UUID。

这里的线索是“问题访问/v1/announcement/presto-coordinator”消息。这意味着node.id被设置为presto-coordinator,这应该是完全有效的,但是动态公告资源尝试将其解析为UUID并失败,导致对PUT请求的404响应。

我们会尽快解决此问题,但目前的解决方法是将 node.id 设置为 UUID。您可以运行uuiduuidgen 命令行实用程序来生成它们。确保每个工作人员对 node.id 有不同的值。

【讨论】:

  • 谢谢,大卫!这解决了这个问题,我可以使用 1 个协调员和 5 个工作人员运行 presto。
  • @DavidPhillips - 对此问题有任何想法stackoverflow.com/questions/27852336/… 吗?如上所述,我已使用 uuidgen 将所有 node.ids 更改为 UUID。仍然有问题。
  • 请在用户组提问或在 GitHub 上提交问题:prestodb.io/community.html
【解决方案2】:

确保您的协调器 config.properties 中有以下内容

discovery-server.enabled=true

【讨论】:

    【解决方案3】:

    要在同一个节点上运行,你应该修改 Coordinator/Discovery 节点配置:

    coordinator=true
    datasources=jmx,hive
    http-server.http.port=8080
    presto-metastore.db.type=h2
    presto-metastore.db.filename=var/db/MetaStore
    task.max-memory=1GB
    discovery-server.enabled=true
    discovery.uri=http://v125203052.bja:8080
    

    并且不要单独运行发现服务器。 然后运行客户端,就可以正确执行查询了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 2013-11-27
      • 1970-01-01
      • 2018-03-25
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多