2016-03-22 6 views
3

Ich bin ein Funke-Job, der eine Eingabe, die von der gleichen vorherigen Job generiert wird. Momentan gibt der Job die Ergebnisse an HDFS aus, damit der nächste Lauf eingelesen werden kann. Gibt es eine Möglichkeit, die Ausgabe jedes Jobs in Spark zwischenzuspeichern, so dass der folgende Lauf nicht aus HDFS lesen muss?Spark: Cache RDD in einem anderen Job verwendet werden

Update: oder ist es möglich, dass Funken RDD zwischen verschiedenen Anwendungen teilen?

+2

Apache Ignite wäre Ihre beste Wette. – morfious902002

+0

Wie wäre es, wenn Sie einen zweiten Job als Streaming-Job schreiben? Ist das machbar? –

+0

@ SumitKumarGhosh Nein, eigentlich sind diese beiden Jobs die gleichen, sie laufen einfach wiederholt, die Ausgabe eines Jobs wird die Eingabe desselben nächsten Jobs sein. – elgoog

Antwort

4

Direkt können Sie dies nicht erreichen. Es gibt jedoch einige Lösungen, die Ihnen helfen können.

Als @ morfious902002 erwähnt, können Sie Alluxio verwenden (aber Sie müssen es auf Ihrem Cluster installieren), die Art der geschichteten Speicher (Speicher/hdfs/s3) bietet.

Eine andere Möglichkeit wäre, einen Spark-Jobserver zu verwenden, der denselben Funke-Kontext enthält und Ihre Jobs über REST API an diesen Server sendet. Da alle Jobs unter demselben langfristigen Kontext ausgeführt werden, können Sie RDD zwischen Jobs austauschen.

4

EDIT: Veraltete

Nein, es ist nicht möglich RDD zwischen Anwendungen zu teilen.

Sie müssen es auf der Festplatte oder in einer Datenbank persistieren.

+1

Sie könnten Alluxio verwenden, um es für den zweiten Job schneller im Speicher zu halten. – morfious902002