/ / Spark / Spark Streaming in der Produktion ohne HDFS - scala, apache-spark, hdfs, spark-streaming

Spark / Spark Streaming in der Produktion ohne HDFS - scala, apache-spark, hdfs, spark-streaming

Ich habe Anwendungen mit entwickeltSpark / Spark-Streaming verwendet aber bisher immer HDFS für Dateispeicher. Ich habe jedoch ein Stadium erreicht, in dem ich erkunde, ob es ohne HDFS möglich ist (in der Produktion, rund um die Uhr). Ich habe versucht, die Spark-Benutzergruppe zu sieben, habe aber noch keine konkrete Antwort gefunden. Beachten Sie, dass ich Checkpoints und Stateful Stream-Verarbeitung mit verwenden updateStateByKey.

Antworten:

1 für die Antwort № 1

Abhängig vom Streaming (ich habe Kafka benutzt) brauchen Sie keine Checkpoints usw.

Seit funken 1.3 haben sie einen direkten Ansatz mit so vielen Vorteilen implementiert.

Vereinfachte Parallelität: Sie müssen keine Kafka-Streams mit mehreren Eingängen erstellen und sie vereinigen. Mit directStream erstellt Spark Streaming als viele RDD-Partitionen wie es Kafka-Partitionen zu konsumieren gibt werden alle Daten von Kafka parallel lesen. Es gibt also eins zu eins Mapping zwischen Kafka und RDD-Partitionen, was einfacher ist verstehen und abstimmen.

Effizienz: Im ersten Ansatz wird ein Null-Datenverlust erreicht die Daten, die in einem Write Ahead-Protokoll gespeichert werden sollen, die weiter repliziert werden die Daten. Dies ist tatsächlich ineffizient, da die Daten effektiv erhalten werden zweimal repliziert - einmal von Kafka und ein zweites Mal von Write Ahead Log. Dieser zweite Ansatz beseitigt das Problem, da es keine gibt Empfänger, und daher keine Notwendigkeit für Write Ahead Logs.

Exakt-einmal-Semantik: Der erste Ansatz verwendet die High-Level-API von Kafka um verbrauchte Offsets in Zookeeper zu speichern. Dies ist traditionell der Weg Daten von Kafka konsumieren. Während dieser Ansatz (in Kombination mit Protokolle schreiben) kann einen Datenverlust von Null gewährleisten (d. h. mindestens einmal Semantik), gibt es eine geringe Chance, dass einige Datensätze konsumiert werden zweimal unter einigen Fehlern. Dies tritt aufgrund von Inkonsistenzen auf zwischen Daten, die von Spark Streaming zuverlässig empfangen werden, und verifizierten Offsets von Zoowärter. Daher verwenden wir in diesem zweiten Ansatz die einfache Kafka-API Das verwendet keinen Zookeeper und Offsets, die nur von Spark verfolgt werden Streaming innerhalb seiner Checkpoints. Dies beseitigt Inkonsistenzen zwischen Spark Streaming und Zookeeper / Kafka, und so ist jeder Datensatz Spark-Streaming effektiv genau einmal trotz Misserfolge erhalten.

Wenn Sie Kafka verwenden, können Sie hier mehr erfahren: https://spark.apache.org/docs/1.3.0/streaming-kafka-integration.html

Ansatz 2.