让用户运行HIVE工作?

时间:2013-12-10 11:15:25

标签: java hadoop hive

我正在使用UDF扩展课程开展HIVE工作。我想获得提交我的工作的用户的名字,所以我正在使用

System.getProperty("user.name");

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

  System.getProperty("user.name");

重新调整错误的值: - mapred

任何人都可以告诉我为什么会发生这种情况以及在UDF评估方法中获取用户名的任何其他方法

3 个答案:

答案 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

中使用它