2012-06-30 4 views
29

Ich schreibe ein Shell-Skript, um Daten in Hadoop zu schreiben, sobald sie erzeugt werden. Ich kann ssh zu meinem Master-Knoten, kopieren Sie die Dateien in einen Ordner dort und dann in hadoop. Ich suche nach einem Shell-Befehl, um die Datei auf den lokalen Datenträger auf dem Master-Knoten zu kopieren. SSH-Verbindung bereits Setup mit den Tasteneine Remote-Datei in Hadoop setzen, ohne sie auf die lokale Festplatte zu kopieren

scp test.txt [email protected]:/folderName/ 

Ich habe besser zu erklären, was ich brauche, kann hier unten finden, was ich bisher habe:

1) kopieren Sie die Datei auf der lokalen Festplatte des Master-Knoten. Daher ist kein Passwort erforderlich.

2) Ich kann ssh verwenden, um remote auf die hadoop ausführen setzen Befehl:

ssh [email protected] "hadoop dfs -put /folderName/test.txt hadoopFolderName/" 

was ich suche ist, wie Rohr/kombinieren diese beiden Schritte in ein und die lokale Kopie der Datei überspringen auf lokale Festplatte von MasterNode.

dank

Mit anderen Worten, ich mag mehr Pipe-Befehl in eine Weise, die ich kann

+0

Piping-Problem ist gelöst. Die Ausführung von Piping ist jedoch wesentlich langsamer als das Kopieren von Dateien zuerst auf die lokale Festplatte des Master-Knotens und das anschließende Kopieren dieser Dateien nach Hadoop. Irgendeine Idee? – reza

Antwort

35

diese (nicht getestet) Versuchen:

cat test.txt | ssh [email protected] "hadoop dfs -put - hadoopFoldername/" 

Ich habe Ähnliche Tricks zu kopieren Verzeichnisse um:

tar cf - . | ssh remote "(cd /destination && tar xvf -)" 

Dieser sendet die Ausgabe von Lokal- tar in den Eingang von Remote-tar.

+0

Nein, das funktioniert nicht. aus 2 Gründen: 1) hadoop dfs -put/dev/stdin existiert nicht 2) meine Dateien sind Binärformat. in der Tat ist es test.bin eher als test.txt – reza

+2

Binär würde nicht wichtig sein - 'ssh' mangelt nicht 8-Bit-Inhalte. Versuchen Sie '-' anstelle von'/dev/stdin'? – sarnold

+0

Also in diesem Fall ist das einzige Problem, dass hadoop dfs -put/dev/stdin nicht funktioniert.In der Tat habe ich gerade versucht und es scheitern :( – reza

2

Hadoop bietet eine Reihe von REST-Schnittstellen. Überprüfen Sie Hoop und WebHDFS. Sie sollten in der Lage sein, die Datei zu kopieren, ohne die Datei aus Nicht-Hadoop-Umgebungen auf den Master zu kopieren.

+0

WebHDFS Link funktioniert nicht – serup

+0

Das sollte funktionieren: https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#File+and+Directory+Operations – Babu

8

Der Knoten, auf dem Sie die Daten generiert haben, ist in der Lage, jeden Ihrer Clusterknoten (den Namen Knoten und alle Datenknoten) zu erreichen.

Wenn Sie Daten-Konnektivität zu tun haben, dann können Sie nur die hadoop fs ausführen -Setzen von der Maschine befehlen, wo die Daten erzeugt werden (vorausgesetzt, Sie haben die Hadoop-Binärdateien auch dort installiert ist):

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/ 
+0

Leider hat der Knoten, auf dem ich die Daten erstelle, keinen direkten Zugriff auf den Hoop-Cluster. – reza

+0

Wissen Sie, welche minimale Hadoop-Installation erforderlich ist? –

0

(ungetestet)

Da der Knoten, wo Sie Ihre Daten erstellen, Zugang zum Internet hat, dann könnten Sie vielleicht die hadoop Client-Knoten-Software installieren und dann zum Cluster hinzufügen - nach normalem hadoop fs -put, dann trennen und entfernen Sie Ihren temporären Knoten - Das Hadoop-System sollte dann automatisch die Replikation Ihrer Dateiblöcke in Ihrem hadoop cl vornehmen uster

Verwandte Themen