让用户运行配置单元作业?

b1zrtrql  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(240)

我和我的妈妈在做一个Hive工作 UDF 扩展类。我想获取提交我的作业的用户的名称,因此我使用

System.getProperty("user.name");

但问题是,这返回的是user mapred,而jobtracker上的作业显示的是用户名hdfs。我当前以hdfs的身份登录,所以作业是由hdfs提交的,所以y是

System.getProperty("user.name");

重新调整不正确的value:- mapred
有谁能告诉我为什么会发生这种情况,以及在的evaluate方法中获取用户名的任何替代方法吗 UDF

wfypjpf4

wfypjpf41#

您需要从外部将用户名作为参数传递。然后在里面用 UDF class

zlwx9yxi

zlwx9yxi2#

假设您没有启用kerberos身份验证,系统任务将以tasktracker运行的用户身份运行(在本例中) mapred ,这很常见)。这是因为TaskTracker正在运行您的进程,而不是您。
对不起,我只能回答你一半的问题。我不知道如何从蜂群自定义项中获取信息。
考虑到您对作业的所有udf调用都具有相同的用户。。。只是从脚本之外的某个地方“注入”它。例如,您可以添加 whoami 对sql的调用:

hive -e "select a.col, '`whoami`' from tab1 a"

此外,只获取一次可能比每次运行udf时都连接到jobtracker要好。

fxnxkyjh

fxnxkyjh3#

我想你可以通过查看这个工作历史api来获得工作提交者的用户名。我希望这能有所帮助。工作经历链接

相关问题