Flink on yarn的问题:Invalid AMRMToken

news/2024/7/4 9:56:24

目前采用的Flink的版本是1.4.2,运行在yarn上,总是时不时的报错“Invalid AMRMToken from appattempt”,导致AM挂掉。

 

简而言之,就是AM和RM沟通的过程中,突然AM提供的Token不被认可,导致拒绝连接,进而AM挂掉。

 

后来发现早期版本的yarn-client是存在问题的,至少在2.6.0还是存在问题,在2.7.0之后解决了。

 

具体的错误描述可参见:https://issues.apache.org/jira/browse/YARN-3103。

 

但由于Flink为了减少依赖,将相关的依赖直接转换成自己的类,去看了下这部分代码,果然是有问题。

 

更新了flink-shaded-hadoop项目中flink-shaded-hadoop2-uber项目引用的hadoop的包的版本,原先引用的是2.4.0,改完2.7.2,重新打包,部署。

 

正确的代码是:

private void updateAMRMToken(org.apache.hadoop.yarn.api.records.Token token)
    throws IOException
  {
    org.apache.hadoop.security.token.Token<AMRMTokenIdentifier> amrmToken = new org.apache.hadoop.security.token.Token(token.getIdentifier().array(), token.getPassword().array(), new Text(token.getKind()), new Text(token.getService()));
    
    UserGroupInformation currentUGI = UserGroupInformation.getCurrentUser();
    currentUGI.addToken(amrmToken);
    amrmToken.setService(ClientRMProxy.getAMRMTokenService(getConfig()));
  }

在构建完了token之后,才会更新服务。

 

错误的代码是:

private void updateAMRMToken(org.apache.hadoop.yarn.api.records.Token token)
    throws IOException
  {
    org.apache.hadoop.security.token.Token<AMRMTokenIdentifier> amrmToken = new org.apache.hadoop.security.token.Token(token.getIdentifier().array(), token.getPassword().array(), new Text(token.getKind()), new Text(token.getService()));
    
    amrmToken.setService(ClientRMProxy.getAMRMTokenService(getConfig()));
    UserGroupInformation currentUGI = UserGroupInformation.getCurrentUser();
    if (UserGroupInformation.isSecurityEnabled()) {
      currentUGI = UserGroupInformation.getLoginUser();
    }
    currentUGI.addToken(amrmToken);
  }

在增加token之前,先设置了service,导致上下文发生变化,就导致了多个不同的token的产生,后续如果选择了特定的token,就会报错。

 

转载于:https://www.cnblogs.com/029zz010buct/p/9953041.html


http://www.niftyadmin.cn/n/4556835.html

相关文章

【Spring源码解析】BeanFactoryPostProcessor【相关类】源码解析

1 BeanFactoryPostProcessor作用 public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {/*** 可以修改容器Bean内部的定义信息&#xff0c;全部的bean definitions会加载但是bean没有被实例化*/void postProcessBeanDefinitionRegistry(B…

怎样才可以编程序

||| 编程序需要编程软件的 再把MFC学好的话 我只能这样告诉你了 ||| 你已经学了C 以上建议 碰到问题查帮助;久而久之 里面还包含实用的例子;边学边做项目 很容易就可以找到你想要的答案 你就可以查看里面帮助文件;使用索引和查找功能 你可以到CSDN 上面收集另外 VF C语言 模拟电…

Django 模型层之多表操作

一.创建模型 实例: 作者表:拥有字段:姓名(name),性别(sex),该表与书籍表之间为多对多的关系 作者详情表:拥有字段:地址(addr),手机号(phone),该表与作者表之间为一对一的关系 出版社表:拥有字段:名字(name),地址(addr),该表与书籍表之间为一对多的关系 书籍表:拥有字段:书名(na…

【Spring源码解析】 IOC 初始化流程分析

1 .AbstractApplicationContext prepareBeanFactory Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {//刷新前预处理prepareRefresh();//获取beanFactory实例。(DefaultListableBeanFactory)Conf…

c.k.沉珂 的所有资料

证明你是光明与正义的化身啊 是个双性恋 跟男生是谈精神上的恋爱 和女性的有肉体上的交缠(她日记里写的)她很爱她的爸爸妈妈 不想被遗忘 不想被伤害 有玩血和自残的习惯 经常用刀子把自己划的遍体鳞伤 用很多针管抽自己的血 每天都会一个人哭泣 她精神上特别痛苦 曾经一次性打过…

怎样实现 C 盘的数据还在 我想增大C盘 我不想再装系统了

用PMagic把C盘大小改一下就行了 数据不会丢失

【SpringMVC源码解析】 ServletContainerInitializer SpringMVC源码入口解析

1 ServletContainerInitializer 在web容器启动时为提供给第三方组件机会做一些初始化的工作&#xff0c;servlet规范(JSR356)中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名…

CountDownLatch 源码讲解

CountDownLatch 源码讲解老规矩&#xff0c;先翻译源码。 CountDownLatch 是一种同步辅助工具&#xff0c;允许一个或多个线程等待其他线程中正在执行的一组操作完成。 CountDownLatch是用给定的count参数初始化实例。 await方法会一直阻塞到当前计数为零&#xff0c;当调用c…