Ich erhalte folgende Fehlermeldung, während ich mich mit einem Kinesis-Stream verbinde.java.lang.NoSuchMethodError: org.apache.spark.storage.BlockManager
java.lang.NoSuchMethodError: org.apache.spark.storage.BlockManager.get(Lorg/apache/spark/storage/BlockId;)Lscala/Option;
at org.apache.spark.streaming.kinesis.KinesisBackedBlockRDD.getBlockFromBlockManager$1(KinesisBackedBlockRDD.scala:104)
Mein Funke Streaming-Code ist,
sc = SparkContext(appName="PythonStreamingTest")
ssc = StreamingContext(sc, 10)
dstream = KinesisUtils.createStream(
ssc, "PythonStreamingTest", "questions", "https://kinesis.us-west-2.amazonaws.com", "us-west-2", InitialPositionInStream.TRIM_HORIZON, 1)
dstream.foreachRDD(stream_rdd)
def stream_rdd(rdd):
if not rdd.isEmpty():
return rdd.foreach(classify)
def classify(ele):
if ele!="":
print ele
Zunächst wird der Strom kommt leer, da es eine Weile dauert, bis der Kinesis-Stream zu verbinden. Aber dann bricht es plötzlich den Code auf. Der Rest der Spur ist,
17/04/02 17:52:00 ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1)
java.lang.NoSuchMethodError: org.apache.spark.storage.BlockManager.get(Lorg/apache/spark/storage/BlockId;)Lscala/Option;
at org.apache.spark.streaming.kinesis.KinesisBackedBlockRDD.getBlockFromBlockManager$1(KinesisBackedBlockRDD.scala:104)
at org.apache.spark.streaming.kinesis.KinesisBackedBlockRDD.compute(KinesisBackedBlockRDD.scala:117)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
ich meine Arbeit mit dem folgenden Befehl einreichen,
spark-submit --jars spark-streaming-kinesis-asl-assembly_2.11-2.0.0.jar --driver-memory 5g Question_Type_Classification_testing_purpose/classifier_streaming.py
ich auf einem lokalen Rechner den Code leite. Wenn ich also 5g Speicher spende, sollte der Executor gut funktionieren. Der gleiche Code funktioniert für Spark 1.6. Vor kurzem habe ich Spark 2.1 geändert und kann diesen Code nicht mehr ausführen. Ich habe mein Kinesisglas und Py4j aktualisiert.
Ich habe meinen Code getestet, indem ich einen Kinesis-Consumer geschrieben habe, und der Stream ist vollkommen in Ordnung.
Kann mir bitte jemand sagen, was das mögliche Problem sein kann? Ist der leere Stream ein Problem? Wenn ja, warum erhalte ich bei der Verwendung von Spark-Streaming einen leeren Stream? Jede Hilfe wird wirklich geschätzt.
Spark-2 könnte die Methode entfernt haben, die in 1.6 gearbeitet ... Lesen Sie die API-Dokumentation –
, welche Methode Sie sprechen? Ich verwende hier nur eine Methode, die "createStream()" ist und die in der Bibliothek vorhanden ist. – Alvin
'NoSuchMethodError' ...' org.apache.spark.storage.BlockManager.get' ... Woher wissen Sie, dass diese Methode existiert? –