大数据平台技术笔记

YARN上运行AM出错“Resource XXX is not

2022-03-29  本文已影响0人  OkGogogooo

1. 环境信息

2. 问题描述

情景说明:
本人正在开发数据工厂的实时计算后台,需要将Flink集群的运行纳入到数据工厂的管控之下。数据工厂中的每一个工作空间,如果它有实时计算管道,那么在开发环境和生产环境分别将提供独立的YARN-SESSION模式的集群。
例如开发人员试图在数据工厂的DataStudio中运行测试一条计算管道,那么引擎将会去检查一下这个工作空间的Flink集群有没有启动,没有启动的话,将会启动这个Flink集群,然后将计算管道提交到Flink集群运行,DataStudio中实时获取其执行日志、监控其状态。

后台实现中有如下重要细节:
1) 将Flink程序包传到HDFS上;

  1. 自己的代码启动集群时,会复制HDFS上的Flink程序包到另一个HDFS目录/user/hadoop/.flink/appXXXX,然后部署启动。

问题描述
在启动Flink集群时, 启动失败,从Hadoop YARN原生的监控界面可看到失败消息:
Resource hdfs://XXX/user/hadoop/.flink/application_1646096734199_0013/plugins/external-resource-gpu/flink-external-resource-gpu-1.14.3.jar is not publicly accessible and as such cannot be part of the public cache.

3. 问题分析

此异常消息出自:


org.apache.hadoop.yarn.util.FSDownload

跟着进入isPublic方法:


org.apache.hadoop.yarn.util.FSDownload.isPublic(xxx)
跟踪进入checkPublicPermsForAll方法:
org.apache.hadoop.yarn.util.FSDownload.checkPublicPermsForAll(xxx)

再查看isPublic方法中的一行代码:

return ancestorsHaveExecutePermissions(fs, current.getParent(), statCache);

跟踪进入:


org.apache.hadoop.yarn.util.FSDownload.ancestorsHaveExecutePermissions(xxx)

从源代码分析可知,当YARN从HDFS上离线程序包时,要求程序包及程序包的祖先目录,对于other组,文件夹有r-x权限,文件有r--权限。
发现程序包的祖先目录“.flink”和“hadoop”文件夹的other组权限缺少“r-w”。


hdfs文件浏览

4. 解决办法

给“.flink”和“hadoop”文件夹的other组添加“r-w”权限。

[hadoop@XCloud152 bin]$ hadoop fs -chmod o+rx /user/hadoop
[hadoop@XCloud152 bin]$ hadoop fs -chmod o+rx /user/hadoop/.flink
上一篇下一篇

猜你喜欢

热点阅读