首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NoSuchMethodError: org.apache.spark.storage.BlockManager

java.lang.NoSuchMethodError: org.apache.spark.storage.BlockManager
EN

Stack Overflow用户
提问于 2017-04-03 01:15:00
回答 1查看 862关注 0票数 0

当我连接到一个运动流时,我得到了以下错误消息。

代码语言:javascript
复制
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)

我的火花流代码是,

代码语言:javascript
复制
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

最初,流是空白的,因为连接到Kinesis流需要一段时间。但突然之间,它破坏了密码。剩下的痕迹是,

代码语言:javascript
复制
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)

我使用以下命令提交我的工作,

代码语言:javascript
复制
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

我正在本地机器上运行代码。因此,如果我给5克内存,执行者应该可以正常工作。同样的代码适用于Spark1.6。最近,我更改为Spark2.1,无法运行这段代码。我也更新了我的动态jar和Py4j。

我通过编写一个Kinesis使用者来测试我的代码,它可以很好地获得流。

有谁能告诉我什么是可能的问题吗?空流是否会产生问题?如果是,为什么我在使用火花流时得到一个空流?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-03 03:04:59

spark-streaming-kinesis-asl是星火本身的内部库,并且正在使用星火内部API(例如,BlockManager.get)。BlockManager.get的方法签名在https://github.com/apache/spark/commit/29cfab3f1524c5690be675d24dda0a9a1806d6ff#diff-2b643ea78c1add0381754b1f47eec132L605中被更改了,所以如果火花版本是>= 2.0.1,那么您将看到NoSuchMethodError,但是spark-streaming-kinesis-asl版本是< 2.0.1。

通常,因为Spark并不承诺不破坏版本之间的内部API,所以您必须使用spark-streaming-kinesis-asl与同一版本的Spark。

对于最新的Spark版本,由于潜在的许可证问题1,移动asl程序集jar被移除,因此您可能无法找到程序集jar。但是,您可以使用--packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.1.0spark-streaming-kinesis-asl及其依赖项自动添加到类路径中,而不是自己构建程序集jar。

1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43175244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档