Hadoop 如何在LinuxContainerExecutor中设置用户
我有一个长时间运行的应用程序主控程序,它接受队列监视器的请求。在请求中,我有一个字段用户名-用户,我想从中启动容器上的作业 根据纱线文件: 在非安全集群中为Apache Hadoop设置的默认值为org.Apache.Hadoop.warn.server.nodemanager.DefaultContainerExecutor。此类以用户身份运行所有容器,以避免任意用户在NodeManager中执行意外操作 此属性的可选值为org.apache.hadoop.warn.server.nodemanager.LinuxContainerExecutor。此类使用container executor二进制文件执行容器,该二进制文件执行权限提升以作为提交应用程序请求的用户运行容器 我已将warn.nodemanager.container-executor.class更改为LinuxContainerExecutor。还将warn.nodemanager.linux-container-executor.nonsecure-mode.limit-users设置为false。如何设置将在容器上运行命令的用户?唯一类似于身份验证的方法是ContainerLaunchContext.setTokens。我有下一个代码: 私有def setupTokensuser:String:ByteBuffer={ val ugi=UserGroupInformation.createProxyUseruser,UserGroupInformation.getCurrentUser LOG.infosCreating代理用户${ugi.getUserName}由${UserGroupInformation.getCurrentUser}模拟 val凭据=ugi.getCredentials val dob=新数据输出缓冲区; credentials.writeTokenStorageToStreamdob; ByteBuffer.wrapdob.getData,0,dob.getLength.duplicate; } val cCLC=Records.newRecordclassOf[ContainerLaunchContext] cCLC.setCommandsListwhoami cCLC.setTokensSetTokensUser nmClient.startContainercontainer,cCLCHadoop 如何在LinuxContainerExecutor中设置用户,hadoop,yarn,Hadoop,Yarn,我有一个长时间运行的应用程序主控程序,它接受队列监视器的请求。在请求中,我有一个字段用户名-用户,我想从中启动容器上的作业 根据纱线文件: 在非安全集群中为Apache Hadoop设置的默认值为org.Apache.Hadoop.warn.server.nodemanager.DefaultContainerExecutor。此类以用户身份运行所有容器,以避免任意用户在NodeManager中执行意外操作 此属性的可选值为org.apache.hadoop.warn.server.nodema
但它仍然以运行AM的用户的身份执行,而不是指定的用户。RM将只向请求它的应用ID及其真正所有者授予令牌,也不可能以AM作为一个用户和容器作为另一个用户运行应用