查找使用JavaAPI提交应用程序的用户

查找使用JavaAPI提交应用程序的用户,java,hadoop,apache-spark,yarn,Java,Hadoop,Apache Spark,Yarn,我需要获得使用Java在集群中提交纱线应用程序的用户的详细信息 我可以使用CLI查看这些详细信息 yarn application -list 它提供包含用户详细信息的作业详细信息列表 现在,需要找到提交当前运行作业的用户,并在访问集群中的某些文件之前对其进行授权。我该怎么做呢?欢迎任何有效的输入。 如果是warn应用程序,warn脚本使用org.apache.hadoop.warn.client.cli.ApplicationCLI,那么就获取源代码(在我的例子中是org.apache.ha

我需要获得使用Java在集群中提交纱线应用程序的用户的详细信息

我可以使用CLI查看这些详细信息

yarn application -list
它提供包含用户详细信息的作业详细信息列表

现在,需要找到提交当前运行作业的用户,并在访问集群中的某些文件之前对其进行授权。我该怎么做呢?欢迎任何有效的输入。

  • 如果是
    warn应用程序
    warn
    脚本使用
    org.apache.hadoop.warn.client.cli.ApplicationCLI
    ,那么就获取源代码(在我的例子中是org.apache.hadoop:hadoop-warn-client:2.7.0)

  • ApplicationCLI
    中,有一个方法
    listApplications
    ,您可以从中提取用户:

List appsReport=client.getApplications(appTypes,
(美国);
  • 因此,一种方法是复制一份
    ApplicationCLI
    ,去掉所有不需要的部分


至于从作业“内部”获取应用程序ID,有
SparkContext.applicationId

据我了解,我们可以获取提交作业的用户名,如下所示:

job.getConfiguration().get(MRJobConfig.USER_NAME);

谢谢,但是我们如何从应用程序本身中找到应用程序id?您是指“在”作业中的应用程序id吗?有
SparkContext.applicationId
。至于“外部”:有
ApplicationReport.getApplicationId()
。是的,它来自应用程序本身。根据您在回答中提供的信息,我推断我们可以使用应用程序列表中的应用程序Id详细信息来获取提交的用户名。我正在ApacheSpark和ApacheApex上试用我的POC。因此,我们想知道是否有办法使用Thread或Hadoop_用户名而不是SparkContext检索当前作业id。