Legen Sie den Benutzer des Hadoop-Systems für den in die Java-Webanwendung eingebetteten Client fest

Ich möchte MapReduce-Jobs von einer Java-Webanwendung an einen Remote-Hadoop-Cluster senden, kann jedoch nicht angeben, für welchen Benutzer der Job gesendet werden soll. Ich möchte einen Systembenutzer konfigurieren und verwenden, der für alle MapReduce-Jobs verwendet werden soll.

Derzeit kann ich keinen Benutzer angeben und egal, was der Hadoop-Job unter dem Benutzernamen des derzeit angemeldeten Benutzers des Client-Systems ausführt. Dies verursacht einen Fehler mit der Nachricht

Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x

... wobei "Alice" der lokale, angemeldete Benutzer auf dem Client-Computer ist.

Ich habe versucht

verschiedene Kombinationen des ErzeugensUserGroupInformation Instanzen (sowohl Proxies als auch normale Benutzer) undFestlegen der Java-Systemeigenschaft mit-Duser.name=hduser, wechselnUSER envar und als fest codiertSystem.setProperty("user.name", "hduser") Anruf.

... umsonst. Zu 1) Ich gebe zu, dass ich keine Ahnung habe, wie diese Klassen verwendet werden sollen. Beachten Sie auch, dass das Ändern der Java-Systemeigenschaft offensichtlich keine echte Lösung für die Verwendung in der Webanwendung darstellt.

Weiß jemand, wie Sie angeben, welcher Benutzer Hadoop verwendet, um eine Verbindung zu einem Remote-System herzustellen?

PS / Hadoop verwendet die Standardkonfiguration, dh, beim Herstellen einer Verbindung zum Cluster wird keine Authentifizierung verwendet und bei der Kommunikation mit den Remotecomputern wird Kerberos nicht verwendet.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage