Ich führe einen HIVE-Job mit meiner erweiterten Klasse UDF
aus. Ich möchte den Namen des Benutzers erhalten, der meinen Job übermittelt, also verwende ich
um den Benutzernamen zu erhalten, aber das Problem ist, dass der Benutzer mapred zurückgegeben wird und der Auftrag im Jobtracker den Benutzernamen hdfs anzeigt. Ich bin momentan als hdfs angemeldet, also wird der Job von hdfs eingereicht, also ist y
%Vor%Neuabstimmung eines falschen Wertes: - mapped
Kann mir bitte jemand sagen, warum das passiert und wie man den Benutzernamen in der Methode evaluate von UDF
Angenommen, Sie haben keine Kerberos-Authentifizierung aktiviert, werden die Systemtasks als derselbe Benutzer ausgeführt, auf dem auch die TaskTrackers laufen (in diesem Fall mapred
, was ziemlich häufig vorkommt). Dies liegt daran, dass die TaskTrackers Ihren Prozess ausführen, nicht Sie.
Entschuldigung, ich kann nur die Hälfte Ihrer Frage beantworten. Ich weiß nicht, wie ich die Informationen von einem Hive UDF bekomme.
Wenn Sie alle Ihre UDF-Aufrufe für den Job berücksichtigen, müssen Sie den gleichen Benutzer haben ... einfach "injizieren" Sie ihn von außerhalb des Skripts. Zum Beispiel können Sie einfach whoami
zu Ihrem Aufruf von sql hinzufügen:
Außerdem ist es wahrscheinlich besser, es nur einmal zu bekommen, als jedes Mal, wenn das UDF ausgeführt wird, mit dem JobTracker zu verbinden.
Ich denke, Sie können sich in dieser Job History-API nach dem Benutzernamen des Auftraggebers umsehen. Ich hoffe, dass dies helfen kann. Jobverlauf-Link
Sie müssen den Benutzernamen als Parameter von außen übergeben. Dann benutze es in UDF class