Grundsätzlich würden in meinem Programm Aufgaben an eine HDFS-Datei angehängt werden. Ich möchte jedoch nicht, dass zwei Aufgaben die Datei gleichzeitig anhängen. Gibt es einen Mechanismus, bei dem nur eine Aufgabe an eine HDFS-Datei angehängt wird? Im Grunde eine Mutex-Art von Mechanismus. Ich brauche auch solche Mutex beim Erstellen der Datei.Gegenseitiger Schreibzugriff für HDFS-Datei?
Antwort
Nach meinem besten Wissen können Sie nicht mehr als einen Handler haben, der in die gleiche HDFS-Datei schreibt.
Dies ist keine Spark-Einschränkung, so ist HDFS konzipiert. In HDFS Dateien sind unveränderbar. Sie haben einen einzelnen Schreiber pro Datei und keine Anhänge, nachdem sie geschlossen wurden. Dies ist ideal für Big Data und Spark, da Sie immer wissen, dass die gleiche Datei zu den gleichen Daten führt.
Die Lösung in Hadoop ist, dass jeder Writer seine eigene Datei schreibt und dann einen endgültigen MapReduce-Job hat, um sie zu einer Datei zusammenzufügen (wenn dies wirklich etwas ist).
Die meiste Zeit können Sie nur mit diesen mehreren Dateien arbeiten. Der Trick besteht darin, den Ordner als Container zu haben; z. B. /a/b/people
, wo der Personenordner viele verschiedene Dateien enthält, die jeweils unterschiedliche Untergruppen von "Personen" enthalten. Spark hat kein Problem damit, mehrere Dateien zu lesen und sie in denselben DataFrame oder RDD zu laden.
Ihr zweiter Vorschlag, genau das mache ich, aber das Problem ist, dass ich Hunderte von Dateien kombinieren muss. Wenn das produzierende Teil nur eine Datei erstellt, hätte ich den Aufwand für das Lesen von so vielen Dateien im konsumierenden Teil reduziert. – pythonic
Ich denke es gibt keinen Weg um HDFS zu benutzen. Sie können HBase alternativ dazu verwenden, um die Daten zu speichern, so dass Sie Daten nicht auf Dateiebene verwalten müssen. Oder Sie können alles in einer Warteschlange hinzufügen (sagen wir Kafka) und dann einen Leser haben, der aus dem Q liest und nur eine Datei erstellt. – marios
@Marios: Es kann mit DataFrames nach spark 1.5 erreicht werden (wir haben das wie unten getan. Um unten Antwort zu erarbeiten, empfangen wir Nachrichten vom Nachrichtensystem für spezifische cobdate/business/env/so machen wir unsere Ordnerstruktur von HDFS wie cobdate/business/env/0-9 (partitionierte Ordner) in der Verschlussseite.In der Verarbeitungsseite laden wir diese partitionierten Ordner aus dem Datenrahmen, den wir nach Logik verarbeiten.Für ein bestimmtes Geschäft/cobdate/env gibt es mehrere Ordner 0-9 und konnte sie als Parkett-Avro-Dateien speichern (natürlich nicht 1 Datei) –
DataFrames in Spark1.5 und höher bieten die Möglichkeit, einen vorhandenen DF auf HDFS anzuhängen. Spark verwendet intern die von @marios in der anderen Antwort beschriebenen Techniken.
Zum Beispiel (in Java):
dataframe.write().mode(SaveMode.Append).
format(FILE_FORMAT).partitionBy("parameter1", "parameter2").save(path);
Wenn Sie HDFS überprüfen werden Sie (Beispiel des Schreibens "Hallo") sehen:
-rw-r--r-- 3 vagrant supergroup 0 2016-05-13 17:48 /home/hello/_SUCCESS
-rw-r--r-- 3 vagrant supergroup 281 2016-05-13 17:48 /home/hello/_common_metadata
-rw-r--r-- 3 vagrant supergroup 2041 2016-05-13 17:48 /home/hello/_metadata
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:46 /home/hello/part-r-00000-182e0b9b-a15d-47f9-8a3e-07739d6f2534.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:48 /home/hello/part-r-00000-a8cf0223-69b3-4c2c-88f6-91252d99967c.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:46 /home/hello/part-r-00001-182e0b9b-a15d-47f9-8a3e-07739d6f2534.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:48 /home/hello/part-r-00001-a8cf0223-69b3-4c2c-88f6-91252d99967c.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:46 /home/hello/part-r-00002-182e0b9b-a15d-47f9-8a3e-07739d6f2534.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:48 /home/hello/part-r-00002-a8cf0223-69b3-4c2c-88f6-91252d99967c.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:46 /home/hello/part-r-00003-182e0b9b-a15d-47f9-8a3e-07739d6f2534.gz.parquet
-rw-r--r-- 3 vagrant supergroup 499 2016-05-13 17:48 /home/hello/part-r-00003-a8cf0223-69b3-4c2c-88f6-91252d99967c.gz.parquet
Bitte verschiedene Möglichkeiten der Sparmodi siehe geeignet für Ihre Anforderung here
Wenn Sie Spark1.4 verwenden Bitte haben Blick in zu SaveMode doc
- 1. Gegenseitiger Ausschluss für N asynchrone Threads
- 2. Python-Implementierung von gegenseitiger Information
- 3. Erlauben spezifischen Benutzer Schreibzugriff
- 4. POSIX-Raw-Lese-/Schreibzugriff
- 5. Openshift mysql Schreibzugriff von PHP
- 6. Schreibzugriff auf den Ordner "Programme"
- 7. C++: Überladen des [] -Operators für Lese- und Schreibzugriff
- 8. Kein SQLite Schreibzugriff für django-apache-wsgi App
- 9. Schreibzugriff auf Array in PHP zulassen preg_replace_callback
- 10. Test, ob die Festplatte Schreibzugriff hat
- 11. Warum benötigt SGEN.EXE Schreibzugriff auf referenzierte Assemblys?
- 12. iOS-Metall-Shader - Textur Lese- und Schreibzugriff?
- 13. Möglicher Schreibzugriff auf Adresse (x86 - linux)
- 14. Tracing Schreibzugriff auf Klasseninstanz/Speicherbereich in gdb
- 15. Ermitteln, ob eine Datei Schreibzugriff in .NET hat
- 16. Wie verhindere ich, dass SQL Server-sysadmin-Benutzer Schreibzugriff erhalten?
- 17. Sind in C# Lese- und Schreibzugriff auf Eigenschaften atomar?
- 18. Kein Lese-/Schreibzugriff auf meiner GWT-Anwendung Runtime (java.io.FilePermission)
- 19. AngularJS wenden Klasse auf mehrere Tasten in gegenseitiger exklusiver Weise an
- 20. Warum Slapd Schreibzugriff auf meine Bindung dn nicht gewährt?
- 21. Protokoll für Quelle 'blah' kann nicht geöffnet werden. Sie haben möglicherweise keinen Schreibzugriff. Eh?
- 22. Schreibzugriff für Iteratoren? Oder: Senden von Werten an Generatoren von numpigen Arrays
- 23. Wie bekomme ich Schreibzugriff für einen Deployment-Key auf bitbucket oder so?
- 24. AWS S3-Bucket-Richtlinie für Lese-/Schreibzugriff von aws Machine Learning
- 25. So öffnen Sie eine Datei für nicht-exklusiven Schreibzugriff mit .NET
- 26. Synchronisieren Schreibzugriff auf flüchtige Feld (Günstige Lese-Schreib-Block)
- 27. C#: Überprüfen Sie, ob Administrator Schreibzugriff auf eine Datei hat
- 28. Überprüfen Sie Ordner als Schreibzugriff, Air-App, Flex
- 29. Schreibzugriff auf aus DLL oder SO exportierte Symbole
- 30. Wie kann der Schreibzugriff in Firebase ohne Lesezugriff bereitgestellt werden?
Welche Version von Spark verwenden Sie? –
Ich benutze Spark 1.6 – pythonic
andere Ergebnisse als Dataframe .. bitte halten Sie auf dem Laufenden. Ich würde gerne wissen, ob noch etwas anderes da ist. Thx –