执行Hadoop DistCp从HDFS到GCS时提示Yarn用户xxx不存在
以下是针对该错误的具体排查方向和解决方法:
确认用户在集群节点的存在性
直接在Hadoop集群的任意节点执行命令:id xxx如果命令返回"no such user",说明该用户未在系统中创建。需要在所有集群节点(或通过LDAP/AD等集中认证系统)创建该用户:
useradd xxx检查Hadoop用户映射配置
打开core-site.xml,查看hadoop.security.auth_to_local参数,确保配置规则能正确将当前运行用户映射为Hadoop认可的身份。如果是Kerberos环境,要保证规则能正确解析xxx的Kerberos主体:<property> <name>hadoop.security.auth_to_local</name> <value>RULE:[1:$1] RULE:[2:$1]</value> </property>修改后需重启Hadoop相关服务生效。
验证DistCp运行的身份参数
如果是模拟其他用户执行迁移,需确保hadoop.job.ugi参数指定的用户存在且有权限:hadoop distcp -D hadoop.job.ugi=xxx,xxx-group /user/a.txt gs://user/a.txt若未指定该参数,确认执行命令的当前用户是否与xxx一致,避免身份混淆。
检查YARN队列与权限配置
查看YARN队列的ACL配置(通常在capacity-scheduler.xml或队列专属配置文件),确认xxx用户拥有提交任务的权限。如果队列限制了用户访问,需添加对应权限条目:<property> <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name> <value>xxx,*</value> </property>GCS连接器与存储桶权限验证
确认GCS存储桶gs://user/的IAM策略中,xxx用户(或其所属组)拥有storage.objects.create、storage.objects.list等必要权限。同时检查Hadoop的GCS连接器配置(core-site.xml中的fs.gs.auth.service.account.json.keyfile等参数)是否正确,服务账号具备操作目标桶的权限。
内容的提问来源于stack exchange,提问作者Liem Nguyen

