【FLINK】The requested state does not exist. Check for typos in your state descriptor, or specify the

背景:Flink 1.13 ,Scala 2.11

在使用Flink Broadcast State Pattern的时候,发现启动的时候的出现异常

1、报错信息

Caused by: java.lang.IllegalArgumentException: The requested state does not exist. Check for typos in your state descriptor, or specify the state descriptor in the datastream.broadcast(...) call if you forgot to register it.
	at org.apache.flink.streaming.api.operators.co.CoBroadcastWithNonKeyedOperator$ReadWriteContextImpl.getBroadcastState(CoBroadcastWithNonKeyedOperator.java:168)
	at com.flink.demo.broadcast.transform.CoBroadcastProcessFunction.processBroadcastElement(CoBroadcastProcessFunction.java:53)
	at com.flink.demo.broadcast.transform.CoBroadcastProcessFunction.processBroadcastElement(CoBroadcastProcessFunction.java:20)
	at org.apache.flink.streaming.api.operators.co.CoBroadcastWithNonKeyedOperator.processElement2(CoBroadcastWithNonKeyedOperator.java:118)
	at org.apache.flink.streaming.runtime.io.StreamTwoInputProcessorFactory.processRecord2(StreamTwoInputProcessorFactory.java:221)
	at org.apache.flink.streaming.runtime.io.StreamTwoInputProcessorFactory.lambda$create$1(StreamTwoInputProcessorFactory.java:190)
	at org.apache.flink.streaming.runtime.io.StreamTwoInputProcessorFactory$StreamTaskNetworkOutput.emitRecord(StreamTwoInputProcessorFactory.java:291)
	at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.processElement(AbstractStreamTaskNetworkInput.java:134)
	at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:105)
	at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:66)
	at org.apache.flink.streaming.runtime.io.StreamTwoInputProcessor.processInput(StreamTwoInputProcessor.java:98)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:423)
	at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:204)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:681)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.executeInvoke(StreamTask.java:636)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.runWithCleanUpOnFail(StreamTask.java:647)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:620)
	at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:779)
	at org.apache.flink.runtime.taskmanager.Task.run(Task.java:566)
	at java.lang.Thread.run(Thread.java:748)

2、分析及解决

 2.1 查看报错信息源码

结论:发现是在取广播状态的时候报的异常,再继续往上看是哪里调用了getBroadcastState

2.2 查看调用方法,及定义的MapStateDescriptor

 在BroadcastProcessFunction里定义了一个Descriptor


 

2.3 思考

在这里留下了疑惑,我明明有定义一个Descriptor,为什么会提示说找不到呢,是不是我定义的有什么问题呀,还是说要跟前面调用广播流定义的Descriptor一模一样?


带着这样子的疑惑我返回去看看了,前面生成广播流时定义的Descriptor,发现有两个地方不一样,一个是生成的一个参数是configBroadcastDescriptorconfigDesCriptor,另一个是MapStateDescriptor里面的参数那么不一样,一个是mysql-config-table另一个是config,那既然发现了不一样的地方那我们来一个个修正。

 

2.3.1 修改参数名字

统一改成configBroadcastDescriptor

结论:发现仍然还是启动报相同的错误,与这个无关

2.3.2 修改MapStateDescroptor中的name

哦豁~,发现程序正常启动了,奶思~

3、 反思

3.1 首先对广播的Descriptor有了更深入的理解,dataStream.broadcast(MapStateDescriptor<?,?>)需要跟BroadcastProcessFunction中的Descriptor保持一致

3.2 在参数名的时候应该发现其实这最后指引的是两个寻址,因为本身就是两个新的单独标量

3.3 正常情况下并不需要再生成一个MapState,这里跟CoProcessFunction里的还是不一样的,谨慎的别把他们混在一起

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,可以看出在不同的情况下,出现了文件不存在的错误。在引用中,是针对Flink框架的测试类报错,指出了文件"LOG"在TaskExecutor上不存在。在引用中,是针对Code::Blocks编译器的报错,指出了文件"/home/strong/codeblocks_work/Fire-master/src/bubble/config.cpp"不存在。并且在引用中,也提到了Flink框架报错中文件"LOG"不存在的问题。然而,没有提到"The file RELEASEE does not exist"这个具体的错误信息。基于这些信息,我无法提供关于"The file RELEASEE does not exist"的具体解答。如果你能提供更多关于这个错误的上下文信息,我将尽力为你解答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[Flink] The file LOG does not exist on the TaskExecutor](https://blog.csdn.net/qq_21383435/article/details/113195513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Code::Blocks – The file does not exist.](https://download.csdn.net/download/weixin_38738830/14060902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zsigner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值