我和我的妈妈在做一个Hive工作 UDF
扩展类。我想获取提交我的作业的用户的名称,因此我使用
System.getProperty("user.name");
但问题是,这返回的是user mapred,而jobtracker上的作业显示的是用户名hdfs。我当前以hdfs的身份登录,所以作业是由hdfs提交的,所以y是
System.getProperty("user.name");
重新调整不正确的value:- mapred
有谁能告诉我为什么会发生这种情况,以及在的evaluate方法中获取用户名的任何替代方法吗 UDF
3条答案
按热度按时间wfypjpf41#
您需要从外部将用户名作为参数传递。然后在里面用
UDF class
zlwx9yxi2#
假设您没有启用kerberos身份验证,系统任务将以tasktracker运行的用户身份运行(在本例中)
mapred
,这很常见)。这是因为TaskTracker正在运行您的进程,而不是您。对不起,我只能回答你一半的问题。我不知道如何从蜂群自定义项中获取信息。
考虑到您对作业的所有udf调用都具有相同的用户。。。只是从脚本之外的某个地方“注入”它。例如,您可以添加
whoami
对sql的调用:此外,只获取一次可能比每次运行udf时都连接到jobtracker要好。
fxnxkyjh3#
我想你可以通过查看这个工作历史api来获得工作提交者的用户名。我希望这能有所帮助。工作经历链接