Could not retrieve the web interface URL for the cluster 错误问题解决

本文主要解决了在使用Flink时遇到的'Could not retrieve the web interface URL for the cluster'错误。问题源于Flink 1.13版本的编译不全以及可能的代码格式问题。通过增加日志输出,发现超时和调度方式可能是原因。进一步分析,该问题是由于启动YARN session模式但flink-conf.yaml中未配置Zookeeper高可用导致的。正确配置Zookeeper后,问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

      org.apache.flink.client.program.rest.RestClusterClient:Could not retrieve the web interface URL for the cluster.

详细日志如下

Exception in thread "main" java.util.concurrent.ExecutionException: org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph.
	at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
	at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
	at com.dtstack.flinkx.launcher.Launcher.main(Launcher.java:131)
Caused by: org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph.
	at org.apache.flink.client.program.rest.RestClusterClient.lambda$submitJob$7(RestClusterClient.java:400)
	at java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:870)
	at java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:852)
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1595)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.TimeoutException
	at org.apache.flink.runtime.concurrent.FutureUtils$Timeout.run(FutureUtils.java:1255)
	at org.apache.flink.runtime.concurrent.DirectExecutorService.execute(DirectExecutorService.java:217)
	at org.apache.flink.runtime.concurrent.FutureUtils.lambda$orTimeout$15(FutureUtils.java:582)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.co

下载flink 1.13进行编译(注意一定要全部编译,如果单独编译可能会出现各种问题):

在RestClusterClient假如日志:

CompletableFuture<URL> getWebMonitorBaseUrl() {
        LOG.info(
                "------------------getWebMonitorBaseUrl {}, {},",restClusterClientConfiguration.getAwaitLeaderTimeout() , TimeUnit.MILLISECONDS);
        return FutureUtils.orTimeout(
                        webMonitorLeaderRetriever.getLeaderFuture(),
                        restClusterClientConfiguration.getAwaitLeaderTimeout(),
                        TimeUnit.MILLISECONDS)
                .thenApplyAsync(
                        leaderAddressSessionId -> {
                            final String url = leaderAddressSessionId.f0;
                            LOG.info("------------------getWebMonitorBaseUrl url is {}", url);
                            try {
                                return new URL(url);
                            } catch (MalformedURLException e) {
                                throw new IllegalArgumentException(
                                        "Could not parse URL from " + url, e);
                            }
                        },
                        executorService);
    }

注意如果报下面错误:

Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.4.2:check (spotless-check) on project flink-clients_2.11: The following files had format violations:
    src\main\java\org\apache\flink\client\program\rest\RestClusterClient.java
        @@ -1,895 +1,895 @@
        -/*\n

需要使用 mvn spotless:apply 先格式化一下代码

编译后将含有日志的打印出来,效果如下:

可以看到超时时间是30秒,这个是正常情况.

接着往下定位:

异常环境中为false,可能是因为调度方式的问题。

初步原因是这两个地方

org.apache.flink.runtime.concurrent.FutureUtils中的orTimeOut方法。

返回标识此CompletableFuture的字符串及其完成状态。括号中的状态包含字符串 “Completed Normally”(“正常完成”)或字符串 “Completed Exceptionally”(“异常完成”),或字符串 “Not completed”(“未完成”),其后是取决于完成情况的CompletableFuture数量(如果有)。

引起此原因更深入的原因,查找完成后,看后续文章。

原因已经定位:

此问题为 flink启动yarn-session.sh方式,但是flink-conf.yaml配置文件中没有配置zookeeper高可用。

配置后重启 flink问题解决

 

 

"Could not retrieve mirrorlist" 错误通常发生在 Linux 或者使用 apt-get、yum 这样的包管理器更新软件包时,表明系统无法从默认的镜像列表中获取可用的软件包源。这个错误可能是由于网络连接问题、DNS解析问题,或者是配置文件中的镜像URL不正确。 解决这个问题可以尝试以下步骤: 1. **检查网络连接**:确保你的设备能够正常访问互联网。如果在校园或企业内部,可能需要特定的代理设置,请检查并配置好网络设置。 2. **刷新 DNS**:清理 DNS 缓存,或者更换一个公共的 DNS 服务器(如 Google DNS: 8.8.8.8 或 8.8.4.4)。 3. **修改 mirrors.list**:Linux 中的 /etc/apt/sources.list 或 yum 的类似文件里,确认所写的镜像地址是否正确。有时官方会提供备用的镜像站点,查找替换现有的地址。 4. **更新源列表**:运行 `sudo apt-get update` 或 `sudo yum clean all && sudo yum makecache` 来重新下载和验证新的镜像列表。 5. **添加新镜像源**:如果原本的镜像不可用,尝试添加一个新的源,例如国内的阿里云、腾讯云等提供的镜像源。 6. **检查防火墙规则**:确保没有防火墙阻止了对镜像服务器的访问。 7. **等待一段时间再试**:有时候服务可能会暂时中断,稍后再试可能会解决问题。 如果以上方法都无法解决问题,可能是源站本身的问题,可以联系相关的技术支持或在社区论坛寻求帮助。最后一个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值