wake-up-neo.com

Festlegen des Benutzernamens beim Ablegen von Dateien auf HDFS von einem Remotecomputer aus

Ich habe ein Hadoop-Cluster-Setup und arbeite unter einem gemeinsamen Standardbenutzernamen "user1". Ich möchte Dateien von einem Remotecomputer, der nicht Teil des Hadoop-Clusters ist, in Hadoop ablegen. Ich habe die Hadoop-Dateien auf dem Remote-Computer so konfiguriert, wie wenn

hadoop dfs -put file1 ...

wird von der entfernten Maschine aufgerufen und legt die Datei 1 im Hadoop-Cluster ab.

das einzige Problem ist, dass ich auf dem Remotecomputer als "Benutzer2" angemeldet bin und nicht das erwartete Ergebnis erhalte. Tatsächlich kann der obige Code nur auf dem Remote-Computer ausgeführt werden als:

hadoop dfs -put file1 /user/user2/testFolder

Was ich jedoch wirklich möchte, ist, die Datei speichern zu können als:

hadoop dfs -put file1 /user/user1/testFolder

Wenn ich versuche, den letzten Code auszuführen, gibt hadoop aufgrund von Zugriffsberechtigungen einen Fehler aus. Kann ich den Benutzernamen trotzdem im Befehl hadoop dfs angeben?

Ich suche etwas wie:

hadoop dfs -username user1 file1 /user/user1/testFolder

vielen Dank

31
reza

Standardmäßig ist die Authentifizierung und Autorisierung in Hadoop deaktiviert. Nach dem Hadoop - The Definitive Guide (übrigens Nizza Buch - würde empfehlen, es zu kaufen)

Die Benutzeridentität, die Hadoop für Berechtigungen in HDFS verwendet, wird durch Ausführen des Befehls whoami auf dem Client-System bestimmt. Ebenso werden die Gruppennamen aus der Ausgabe laufender Gruppen abgeleitet.

Sie können also einen neuen whoami -Befehl erstellen, der den erforderlichen Benutzernamen zurückgibt, und diesen in geeigneter Weise in PATH eintragen, sodass die erstellte whoami gefunden wird, bevor die tatsächliche whoami, die mit Linux geliefert wird, gefunden wird. Auf ähnliche Weise können Sie auch mit dem Befehl groups spielen.

Dies ist ein Hack und funktioniert nicht, sobald die Authentifizierung und Autorisierung aktiviert wurde.

11
Praveen Sripati

Wenn Sie die Umgebungsvariable HADOOP_USER_NAME verwenden, können Sie HDFS mitteilen, mit welchem ​​Benutzernamen gearbeitet werden soll. Beachten Sie, dass dies nur funktioniert, wenn Ihr Cluster keine Sicherheitsfunktionen (z. B. Kerberos) verwendet. Beispielsweise:

HADOOP_USER_NAME=hdfs hadoop dfs -put ...
82

Das mag für niemanden von Bedeutung sein, aber ich benutze dafür einen kleinen Hack.

Ich exportiere HADOOP_USER_NAME in .bash_profile, sodass der Benutzer bei jeder Anmeldung festgelegt wird.

Fügen Sie einfach die folgende Codezeile zu .bash_profile hinzu:

export HADOOP_USER_NAME=<your hdfs user>
15
bioShark

Es gibt noch einen ähnlichen Beitrag, mit dem Sie mithilfe von Streaming über ssh Abhilfe schaffen können:

cat file.txt | ssh [email protected] "hadoop fs -put - /path/in/hdfs/file.txt"

Weitere Informationen finden Sie unter Einfügen einer Remote-Datei in Hadoop, ohne sie auf die lokale Festplatte zu kopieren

0
Chris White