2016-03-21 5 views
0

Ich füge in Cassandra mit Spark ein.Wie kann ich wissen, dass keine Zeilen mit Spark in Cassandra eingefügt werden

CassandraJavaUtil.javaFunctions(newRDD) 
      .writerBuilder("dmp", "dmp_user_user_profile_spark1", mapToRow(UserSetGet.class)).saveToCassandra(); 
      logger.info("DataSaved"); 

Meine Frage ist, wenn RDD 5k Zeilen hat, und beim Einfügen in Cassandra aus irgendeinem Grund schlägt der Auftrag fehl.

Wird es für die Zeilen werden Rollback, die 5k aus

wurden eingesetzt und wenn nicht, wie kann ich wissen, wie viele Zeilen tatsächlich eingefügt ist, so dass ich meine Arbeit von der ausgefallenen Zeile wieder starten kann.

Antwort

1

Einfache Antwort, Nein, es wird kein automatisches Rollback geben.

Welcher Datenfunke auch in Cassandra gespeichert werden konnte, bleibt in Cassandra erhalten.

Und nein, es gibt keine einfache Möglichkeit zu wissen, bis zu welchem ​​Dataset der Funke-Job erfolgreich speichern konnte. Tatsächlich kann ich nur daran denken, Daten aus Cassandra zu lesen, zu verbinden und aus dem Ergebnissatz herauszufiltern, basierend auf dem Schlüssel.

Um ehrlich zu sein, das scheint ziemlich und Overhead, wenn die Daten riesig sind, um humong Join machen. In den meisten Fällen können Sie den Job für Spark einfach erneut ausführen und ihn erneut in der Cassandra-Tabelle speichern lassen. Da in Cassandra Update und Einsätze funktionieren auf die gleiche Weise. Es wird kein Problem sein.

Nur Platz dies kann problematisch sein, wenn Sie Zähler Tabellen beschäftigen.

Aktualisierung: Für dieses spezielle Szenario können Sie Ihre RDD in Chargen Ihrer Größe aufteilen und dann versuchen, sie zu speichern. Auf diese Weise, wenn Sie auf einem RDD scheitern, wissen Sie, welche RDD fehlgeschlagen ist. Wenn nicht gesetzt, sollten Sie in der Lage sein, von nächsten RDD sicher abholen.

+0

Hallo Abhishek danke für die Antwort, aber das Problem hier ist in der Tabelle gibt es eine Spalte app_count, die bei jedem Update inkrementiert wird. Ich muss also wissen, welche Zeilen aktualisiert wurden, wenn der Fehler auftritt. –

+0

Die Antwort wurde aktualisiert. Oder wahrscheinlich sollten Sie eine zusätzliche Spalte hinzufügen, um diese Art von Dingen in Cassandra zu verfolgen, kann Date oder sogar eine ganze Spalte sein. –

+0

Hallo Abhishek, ich habe genau das selbe gemacht, dh die RDD in feste Längen zu teilen, aber meine Frage war, dass sie in der Mitte des Einfügens fehlschlagen würde. Von 5000 wurden nur 2000 eingefügt und dann ist es fehlgeschlagen. . Meine Tabelle ist riesig, also versuche ich eine zusätzliche Spalte (wie AutoIncrement int) mit zipWithIndex einzuführen. Wie auch immer, danke für die Antwort –

Verwandte Themen