我正在使用UDF
扩展课程开展HIVE工作。我想获得提交我的工作的用户的名字,所以我正在使用
System.getProperty("user.name");
获取用户名,但问题是返回用户 mapred ,而在jobtracker上,作业显示用户名 hdfs 。我当前以hdfs身份登录,因此作业由hdfs提交,所以y是
System.getProperty("user.name");
重新调整错误的值: - mapred
任何人都可以告诉我为什么会发生这种情况以及在UDF
的评估方法中获取用户名的任何其他方法
答案 0 :(得分:2)
假设您没有启用Kerberos身份验证,系统任务将作为TaskTrackers运行的同一用户运行(在本例中为mapred
,这很常见)。这是因为TaskTrackers正在运行您的流程,而不是您。
抱歉,我只能回答你问题的一半。我不知道如何从Hive UDF获取信息。
考虑到你对作业的所有UDF调用都有相同的用户......只需从脚本外部“注入”它。例如,您只需将whoami
添加到sql:
hive -e "select a.col, '`whoami`' from tab1 a"
此外,只需获取一次可能比每次UDF运行时连接到JobTracker更好。
答案 1 :(得分:1)
我认为您可以查看此Job History API以获取作业提交者的用户名。我希望这可能有所帮助。Job History link
答案 2 :(得分:1)
您需要将用户名作为参数从外部传递。然后在UDF class