
# Flink业务程序无法读取NFS盘上的文件
#### 问题现象
用户开发的Flink业务程序中需要读取用户定义的配置文件，该配置文件放在NFS盘上，NFS盘是挂载在集群节点上的，集群的所有节点均可以访问该盘。用户提交Flink程序后，业务代码访问不到客户自定义的配置文件，导致业务程序启动失败。
#### 原因分析
该问题的根因是NFS盘上的根目录权限不足，导致Flink程序启动后无法访问该目录。
MRS的Flink任务是在YARN运行，当集群未启用Kerberos认证时，在YARN上运行任务的用户为yarn_user。用户自定义的配置文件如果在任务启动之后使用，则文件以及文件的父目录（NFS上的文件所在的父目录，非集群节点上的软连接），必须允许yarn_user可以访问，否则程序中无法获取文件内容。当集群为启用Kerberos认证的集群时，则文件的权限必须允许提交程序的用户访问。
#### 处理步骤
1. 以**root**用户登录集群的Master节点。
2. 执行如下命令查看用户自定义配置文件所在父目录的权限。 
   **ll** *\<文件所在路径的父目录路径\>*
   
   
3. 进入NFS盘待访问文件所在目录，修改用户自定义配置文件所在父目录的权限为755。 
   **chmod 755 -R /** *\<文件所在路径的父目录路径\>*
   
   
4. 确认Core或者Task节点是否可以访问到该配置文件。 
   1. 以**root** 用户登录Core/Task节点。
      如果当前集群已启用Kerberos认证，请以**root**用户登录Core节点。
      
   
   2. 执行**su - yarn_user** 命令切换到yarn_user用户。
      如果当前集群已启用Kerberos认证，请执行 **su -** *提交作业的用户*命令切换用户。
      
   
   3. 执行如下命令查看用户权限，文件所在路径请使用该文件的绝对路径。 **ll** *\<文件所在路径\>*
      
   
   
   
   
 
#### 建议与总结
当用户提交的任务中要访问自定义的配置文件时，特别是挂载NFS盘时，除了确认文件的权限之外，还要确认文件所在父目录的权限是否正确。NFS盘挂载到MRS集群节点上，一般会新建软连接到NFS目录，这个时候需要查看NFS上的目录权限是否正确。
