Frage

Ich muß Schreibdaten in zu Hadoop (HDFS) aus anderen Quellen wie ein Fenster boxen. Im Moment habe ich das Kopieren der Daten auf die NameNode und mit HDFS der Befehl put es in den Cluster aufnehmen. In meinem Browsen des Code habe ich nicht sehe eine API für dies zu tun. Ich hoffe, jemand kann mir zeigen, dass ich falsch liegt, und es gibt eine einfache Möglichkeit, Code externe Kunden gegen HDFS.

War es hilfreich?

Lösung

Install Cygwin, installieren Sie lokal Hadoop (Sie müssen nur die binären und configs der Punkt, an Ihrem NN - keine Notwendigkeit, tatsächlich die Dienste laufen), laufen hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

Sie können auch den neue Cloudera Desktop verwenden, um eine Datei über den Web-UI zu laden, obwohl das vielleicht nicht eine gute Option für Riesen-Dateien sein.

Es gibt auch ein WebDAV-Overlay für HDFS, aber ich weiß nicht, wie stabil / zuverlässig das ist.

Andere Tipps

Es ist eine API in Java. Sie können es verwenden, indem Sie den Hadoop-Code in einem Projekt mit. Die JavaDoc ist sehr hilfreich im Allgemeinen, aber natürlich müssen Sie wissen, was Sie für * g suchen * http://hadoop.apache.org/common/docs/

Für Ihr spezielles Problem, haben Sie einen Blick auf: http: //hadoop.apache. org / common / docs / Strom / api / org / Apache / hadoop / fs / FileSystem.html (Dies gilt auch für die neueste Version, wenden andere JavaDocs für verschiedene Versionen!)

Ein typischer Aufruf wäre: Filesystem.get(new JobConf()).create(new Path("however.file")); Was Sie gibt einen Stream zurück Sie mit regelmäßigen JavaIO verarbeiten kann.

Für das Problem, die Daten des Ladens ich brauchte in HDFS zu setzen, wähle ich das Problem, sich umzudrehen.

Anstatt die Dateien auf HDFS vom Server hochgeladen, wo sie wohnte, schrieb ich eine Java-Karte / Job reduzieren, wo der Mapper die Datei aus dem Dateiserver zu lesen (in diesem Fall über https), es dann direkt auf HDFS schreiben ( über die Java API ) .

Die Liste der Dateien wird von dem Eingang zu lesen. Ich habe dann ein externes Skript, dass Füllt eine Datei mit der Liste der Dateien, die Datei in HDFS uploads zu holen (mit hadoop dfs-schöpferischen Leistungen ), starten Sie dann die Karte / reduziert Job mit einer guten Anzahl von Mapper.

Das gibt mir eine ausgezeichnete Übertragungsleistung, da mehrere Dateien gleichzeitig gelesen / geschrieben.

Vielleicht nicht die Antwort, die Sie suchen, aber hoffentlich hilfreich trotzdem: -).

Sie über 2 Jahre nach meiner letzten Antwort, gibt es nun zwei neue Alternativen - Hoop / HttpFS und WebHDFS.

In Bezug auf Hoop wurde zunächst in Cloudera Blog und kann aus einem github-Repository heruntergeladen werden. Ich habe es geschafft, diese Version zu bekommen, um zumindest Hadoop erfolgreich zu sprechen 0.20.1, kann es wahrscheinlich auch auf etwas älteren Versionen sprechen.

Wenn Sie mit Hadoop 0.23.1, die zur Zeit noch des Schreibens nicht freigegeben wird, Hoop statt als eigener Bestandteil Hadoop ist, der HttpFS. Diese Arbeit wurde im Rahmen des HDFS-2178 . Hoop / HttpFS kann einen Proxy nicht nur auf HDFS sein, sondern auch auf andere Hadoop-kompatible Dateisysteme wie Amazon S3.

Hoop / HttpFS läuft als eigener Standalone-Service.

Es gibt auch WebHDFS die läuft als Teil der NameNode und DataNode Dienstleistungen. Es bietet auch einen REST-API, das, wenn ich richtig verstehe, mit dem HttpFS API kompatibel ist. WebHDFS ist ein Teil von Hadoop 1.0 und eine seiner wichtigsten Funktionen ist, dass sie Datenlokalität bietet -. Wenn Sie eine Leseanforderung sind, erhalten Sie auf der WebHDFS Komponente auf dem DataNode weitergeleitet, wo sich die Daten befinden

Welche Komponente ein bisschen wählen auf Ihrem aktuellen Setup ab, und was muss man haben. Wenn Sie nun eine HTTP REST-Schnittstelle zu HDFS benötigen und Sie laufen eine Version, die nicht WebHDFS enthält, mit Band aus der Github-Repository beginnen scheint, wie die einfachste Option. Wenn Sie eine Version benutzen, die WebHDFS enthält, würde ich für das gehen, wenn Sie einige der benötigen Funktionen Hoop hat, dass WebHDFS fehlt (Zugang zu anderen Dateisystemen, Bandbreitenbeschränkung, etc.)

Es scheint, gibt es eine eigene Seite jetzt diese unter http://wiki.apache.org/hadoop / MountableHDFS :

  

Diese Projekte (aufgezählt unten) erlauben HDFS montiert werden (auf den meisten   Aromen von Unix) als Standard-Dateisystem mit dem Befehl montieren.   Einmal montiert, kann der Benutzer auf einer Instanz von hdfs arbeitet mit   Standard-Unix-Dienstprogramme wie 'ls', 'cd', 'cp', 'mkdir', 'finden',   ‚Grep‘, oder verwenden Sie Standard-Posix-Bibliotheken wie Öffnen, Schreiben, Lesen, in der Nähe   von C, C ++, Python, Ruby, Perl, Java, bash, etc.

Später beschreibt er diese Projekte

  
      
  • contrib / Sicherungs dfs auf Sicherung gebaut, einige C-Kleber, libhdfs und Hadoop-dev.jar
  •   
  • Sicherungs-j-hdfs auf Sicherung eingebaut ist, Sicherung für Java und die Hadoop-dev.jar
  •   
  • hdfs-Sicherung - ein Google-Code-Projekt ist sehr ähnlich zu contrib / Sicherungs dfs
  •   
  • webdav - hdfs als webdav Ressource ausgesetzt MapR - enthält eine Closed-Source-kompatibles Dateisystem HDFS, dass unterstützt Lese- / Schreib   NFS-Zugriff
  •   
  • HDFS NFS Proxy - Exporte HDFS als NFS ohne Verwendung von Sicherung. Unterstützt Kerberos und Nachbestellungen schreiben, so dass sie zu hdfs geschrieben   sequentiell.
  •   

Ich habe nicht eine dieser versucht, aber ich werde die Antwort bald aktualisieren, da ich das gleiche Bedürfnis wie die OP

habe

Sie können nun auch versuchen, Talend zu verwenden, die Komponenten für Hadoop-Integration umfasst.

Sie können versuchen, HDFS auf Ihrem Rechner Montage (nennen wir es machine_X), wo Sie Ihren Code ausführen und machine_X sollte InfiniBand-Verbindung mit den HDFS Check this out haben, https://wiki.apache.org/hadoop/MountableHDFS

Sie können auch HadoopDrive ( http://hadoopdrive.effisoft.eu ) verwenden. Es ist eine Windows-Shell-Erweiterung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top