Flink本地部署报错 Could not resolve ResourceManager address ,提交job,显示taskmanagers等均为0

本文解决了一个在使用Apache Flink进行任务执行时遇到的注册超时异常问题,通过更新JDK版本从9到8u252,成功解决了ResourceManager无法正常分配slot的问题。

报错

...
org.apache.flink.runtime.taskexecutor.exceptions.RegistrationTimeoutException: Could not register at the ResourceManager within the specified maximum registration duration 300000 ms. This indicates a problem with this instance. Terminating now.
        at org.apache.flink.runtime.taskexecutor.TaskExecutor.registrationTimeout(TaskExecutor.java:1037)
        at org.apache.flink.runtime.taskexecutor.TaskExecutor.lambda$startRegistrationTimeout$3(TaskExecutor.java:1023)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRunAsync(AkkaRpcActor.java:332)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:158)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
        at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
        at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
        at akka.actor.ActorCell.invoke(ActorCell.scala:495)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        ...

查了一些资料, 有改 localhost的, 有 在flink-conf.yaml 添加 taskmanager.host:localhost的, 不过都没解决, 查看了 flink 的 log 日志如上所示, 发现 resourcemanager 问题,无法分配slot之类的问题。
后来 将 jdk 更新才解决。
jdk 更改为 jdk 8u252。 本来用的jdk9。
将IDEA端编写程序用的jdk 与 linux端的 jdk 皆改为 jdk8u252版本(1.8.0_252)。
之后,taskmanagers不再为0 。出现 1,4,4。
在这里插入图片描述

### 解决方案 在 Flink Standalone 模式下提交任务时,如果出现 `Could not find any valid local directory for s3ablock-0001-` 错误,通常与 Hadoop 的 S3A 文件系统配置相关。以下是详细的解决方案: #### 1. 配置 Hadoop 的临时目录 Hadoop 在使用 S3A 文件系统时需要一个本地临时目录来存储块数据。如果没有正确配置该目录,可能会导致上述错误。可以通过以下方式解决: - **通过 JVM 参数注入** 在命令行中直接通过 `-D` 参数指定临时目录路径: ```bash hadoop distcp -Dfs.s3a.buffer.dir=/path/to/local/directory hdfs://source/path s3a://bucket/destination/path ``` 这里 `/path/to/local/directory` 应为一个有效的本地路径[^2]。 - **修改 Hadoop 的 `core-site.xml` 文件** 在 Hadoop 的配置文件 `core-site.xml` 中添加以下属性: ```xml <property> <name>fs.s3a.buffer.dir</name> <value>/path/to/local/directory</value> </property> ``` 确保该路径具有足够的磁盘空间和权限。 #### 2. 配置 Flink 的环境变量 Flink 在 Standalone 模式下运行时,也需要确保其能够访问 Hadoop 的配置文件。可以通过以下方式完成配置: - **设置 HADOOP_CONF_DIR 环境变量** 确保 Flink 能够加载 Hadoop 的配置文件,需设置 `HADOOP_CONF_DIR` 环境变量: ```bash export HADOOP_CONF_DIR=/path/to/hadoop/conf ``` - **将 Hadoop JAR 包添加到 Flink 的类路径** 将 Hadoop 的 JAR 包(如 `hadoop-aws.jar` 和 `aws-sdk-java.jar`)复制到 Flink 的 `lib` 目录下,以确保 Flink 能够正确加载 S3A 文件系统的依赖项。 #### 3. 检查本地磁盘状态 错误信息 `org.apache.hadoop.util.DiskChecker$DiskErrorException` 表明可能存在磁盘问题。可以执行以下操作进行排查: - 确认指定的本地目录是否存在且可写。 - 检查磁盘是否有足够的可用空间。 - 确保操作系统没有对磁盘施加限制或挂载问题[^1]。 #### 4. 示例代码 以下是一个完整的任务提交示例,展示了如何配置 Hadoop 和 Flink 的参数: ```bash flink run \ -Dfs.s3a.buffer.dir=/path/to/local/directory \ -Dhadoop.conf.dir=/path/to/hadoop/conf \ /path/to/flink-job.jar ``` --- ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值