2016-11-15 2 views
3

LOAD Funktion/Befehl lädt Daten von HDFS oder Local FS. ex: -Unter der Haube? Wo speichert PIG Zwischenergebnisse/Beziehungsdaten?

gurnt >employees = LOAD 'hdfs://localhost:9090/pig_dir/data.txt' USING PigStorage(',') as (id:int, salary:int, ...etc) 

wonach Schwein Befehle ausgeführt werden können - wie

grunt >wellpaid_employees = FILTER employees BY salary > '100000'; 

Also begann ich zu denken, wo Schwein "Mitarbeiter" Daten/Beziehung speichert. Welches wird verwendet, wenn eine weitere Verarbeitung erforderlich ist, d. H. Erzeugen wellpaid_employees.
1) Mitarbeiter Beziehung - Wenn es nur speichert die Mitarbeiter in einem Temp-Verzeichnis (was auf der Konfiguration basiert), was ist der Vorteil. Es kann jederzeit die Daten von HDFS lesen. Und die Datei kann von 1 GB bis 1 TB oder mehr groß sein. Also werde ich annehmen, dass LOAD die Daten nirgendwo sonst dupliziert. Es funktioniert träge. Und es verwendet die Original-Dateien in HDFS zum Ausführen von Pig-Jobs (das sind MR-Jobs hinter dem Bildschirm).
2) wellpaid_employees Beziehung - wenn Schwein Prozess Mitarbeiter Beziehung wellpaid_employees Beziehung zu erzeugen. Wo speichert es dieses Ergebnis? Denn wenn ich die weitere Verarbeitung auf „wellpaid_employees“ zu tun haben gerne alles gut bezahlte Mitarbeiter in einer bestimmten Stadt bekommen - Beispiel

grunt >wellpaid_employees_in_newyork = FILTER wellpaid_employees BY city == 'NY'; 

In diesem Fall habe ich die benfit von PIG sehen die Speicherung aller Zwischen und Endergebnis/relatios einige wo. So funktioniert Schwein.

Wie (Format usw.) und wo (physischer Standort) speichert Pig die Zwischenergebnisse/Relationen und wie werden diese Aspekte konfiguriert?

Aber wenn das Zwischenergebnis auch zu groß ist - sagen wir mehrere GB, wie funktioniert dann der Trade (zwischen der Verarbeitung der vorherigen Phasen jedes Mal oder dem Speichern des Ergebnisses). Kann es auch konfiguriert werden.

+1

Pig behält die Beziehung im Speicher, bis sie ausläuft. Dann wird es auf die Festplatte ausgelaufen. Aber es speichert nicht die Beziehung, nichts ist dauerhaft. Sie können nicht auf einen anderen Pig-Job zugreifen, es sei denn, Sie speichern es aktiv. – Andrew

Antwort

2

Alle Transformationen sind faul, da sie ihre Ergebnisse nicht sofort berechnen. außer in DUMP und STORE und in allen anderen Befehlen wird nur die Syntax für Fehler ausgewertet.

Und Statements sind im Speicher und Execute, sobald Aktion (Sotre/Dump) verwendet werden.

+0

Wenn eine Relation (wellpaid_employees) in HDFS gespeichert wird und dann eine andere Relation (wellpaid_employees_in_newyork) basierend auf der vorherigen Relation verarbeitet wird. Dann nimmt Schwein die gespeicherte Datei intelligent zur weiteren Verarbeitung auf oder die gesamte Kette wird erneut bearbeitet (Mitarbeiter -> wellpaid_employees -> wellpaid_employees_in_newyork). (Ich sehe, es gibt eine Menge Mapreduce im Underhood. So erzeugt Schwein MR-Job, der die gespeicherte Datei verwendet oder erzeugt nur einen MR-Job, der alles in Brand setzen kann) – samshers

+0

Mein Verständnis wird es den ganzen Weg zurück zur ersten Beziehung gehen, Sie können versuchen, indem Sie Beispiel, wenn Sie LOAD -> Filter -> FOREACH, und zuerst LOAD hat eine falsche dir Weg es wird nicht beschweren, bis Sie Dump oder speichern, –

Verwandte Themen