【问题标题】:Scala manifest not Found Spark Streaming未找到 Scala 清单 Spark Streaming
【发布时间】:2019-07-10 23:17:04
【问题描述】:

我是 Spark Streaming 的新手, 从 Spark Streaming,我使用 KafkaUtils 创建了到 Kafka 的直接流。如下所示

jssc = new JavaStreamingContext(sparkConf, Durations.seconds(KafkaConfig.getInstance().getBatchDuration()));

HashMap<String, String> kafkaParams = new HashMap<>();

kafkaParams.put(KafkaConstants.ZOOKEEPER_CONNECTION_STRING, zookeeperHost + ":" + zookeeperPort);
kafkaParams.put(KafkaConstants.METADATA_BROKER_LIST_STRING, bootstrapHost  + ":" + bootstrapPort);
kafkaParams.put(KafkaConstants.GROUP_ID_STRING, groupId);

HashSet<String> topicSet = new HashSet<String>();
topicSet.add(topic);

JavaPairInputDStream<String, String> topicStream = KafkaUtils.createDirectStream(jssc, String.class,
        String.class, StringDecoder.class, StringDecoder.class, kafkaParams, topicSet);

JavaDStream<String> topicMessages = topicStream.map(Tuple2::_2);
topicMessages.print()

当我尝试运行作业时,它抛出错误

java.lang.NoClassDefFoundError: scala/reflect/ClassManifest

全栈在这里:

线程“主”java.lang.NoClassDefFoundError 中的异常: scala/reflect/ClassManifest 在 kafka.utils.Log4jController$.(Log4jController.scala:29) 在 kafka.utils.Log4jController$.(Log4jController.scala) 在 kafka.utils.Logging$class.$init$(Logging.scala:29) 在 kafka.api.TopicMetadataRequest$.(TopicMetadataRequest.scala:28) 在 kafka.api.TopicMetadataRequest$.(TopicMetadataRequest.scala) 在 org.apache.spark.streaming.kafka.KafkaCluster.getPartitionMetadata(KafkaCluster.scala:130) 在 org.apache.spark.streaming.kafka.KafkaCluster.getPartitions(KafkaCluster.scala:119) 在 org.apache.spark.streaming.kafka.KafkaUtils$.getFromOffsets(KafkaUtils.scala:211) 在 org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:484) 在 org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:607) 在 org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream(KafkaUtils.scala) 在 consumer.spark.KafkaConsumer.consumeMessages(KafkaConsumer.java:103) 在 consumer.spark.KafkaConsumer.executeStream(KafkaConsumer.java:142) 在 consumer.spark.KafkaConsumerService.main(KafkaConsumerService.java:27) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:743) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187) 在 org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 引起 作者:java.lang.ClassNotFoundException:scala.reflect.ClassManifest at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 23 更多

这是我的 pom.xml

<!-- Scala version -->
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.3</version>
</dependency>

<!--Spark Core -->
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.1.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-8_2.11 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
    <version>2.1.1</version>
</dependency>

<!--Spark Streaming -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.1.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive_2.10 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.1.1</version>
</dependency>

<!--Kafka -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.8.2.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.1.1</version>
</dependency>

请告诉我如何解决这个问题。

【问题讨论】:

    标签: java maven spark-streaming kafka-consumer-api


    【解决方案1】:

    您已经定义了Scala version -&gt; 2.10.3,并且您已经编写了artifactID with 2.11。您应该将每个依赖项的 artifactID 更改为 2.10,然后它应该可以工作。

    【讨论】:

      【解决方案2】:

      在您的 pom.xml 中将 scala 版本更改为 2.11 即可使用

      【讨论】:

        【解决方案3】:

        除了按照上面的答案更改 scala 版本之外,您应该检查 scala 相关依赖项的 scala 版本(例如:spark-streaming...),因此请在将它们包含到您的项目之前检查依赖项的 scala 版本。

        Please check the scala version before including the dependency

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-20
          • 1970-01-01
          • 1970-01-01
          • 2015-01-20
          • 2018-10-05
          • 1970-01-01
          • 2021-12-16
          • 2018-08-05
          相关资源
          最近更新 更多