java - 为什么 KafkaUtils.createDirectStream 会抛出 NoSuchMethodError?

标签 java apache-spark apache-kafka

HashSet<String> topicsSet = new HashSet<String>(Arrays.asList(config.getKafkaTopics().split(",")));
HashMap<String, String> kafkaParams = new HashMap<String, String>();
kafkaParams.put("metadata.broker.list", config.getKafkaBrokers());

// Create direct KAFKA stream with brokers and topics
JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(jssc, String.class, String.class,
        StringDecoder.class, StringDecoder.class, kafkaParams, topicsSet);

我正在使用 KafkaUtils 中的 createDirectStream 函数创建 Kafka 流,如上所示。我认为它非常标准,并且我认为它适用于 Spark-1.5.1。

我切换到Spark-1.6.1,虽然我不确定这是否是版本的原因,但它会抛出以下错误:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:58)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
    at kafka.api.RequestKeys$.<init>(RequestKeys.scala:39)
    at kafka.api.RequestKeys$.<clinit>(RequestKeys.scala)
    at kafka.api.TopicMetadataRequest.<init>(TopicMetadataRequest.scala:53)
    at org.apache.spark.streaming.kafka.KafkaCluster.getPartitionMetadata(KafkaCluster.scala:122)
    at org.apache.spark.streaming.kafka.KafkaCluster.getPartitions(KafkaCluster.scala:112)
    at org.apache.spark.streaming.kafka.KafkaUtils$.getFromOffsets(KafkaUtils.scala:211)
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:484)
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:607)
    at org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream(KafkaUtils.scala)
    at com.analytics.kafka.consumer.SystemUserAnalyticsConsumer.main(SystemUserAnalyticsConsumer.java:59)
    ... 6 more

这提供了很少的关于问题到底是什么的信息。

这里有什么问题吗?

最佳答案

您正在使用与编译/构建时和运行时使用的 Scala 版本不兼容的 spark-streaming-kafka-0-10 版本,即

libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.0.1"

确保 Scala 版本相似(并注意处理它并依赖于 scalaVersion 的两个百分号)。

关于java - 为什么 KafkaUtils.createDirectStream 会抛出 NoSuchMethodError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36490723/

相关文章:

java - 如何将 mssql jdbc 驱动程序安装到 confluence/kafka

java - 新的 SimpleDateFormat ("hh:mm a", Locale.getDefault()).parse ("04:30 PM")给出 Unparseable 异常

java - 多个 MongoDB 连接到多个 mongo 路由器 (mongos.exe)

java - JAX-RS 子资源 @PathParam 值与 java 方法及其封闭 java 类型的任何 @Path 注释模板参数不匹配

java - Apache Spark : get the executor ID in the map reduce pipeline

python - 如何将 printSchema 的结果保存到 PySpark 中的文件中

filter - Kafka connect (Single message transform) 行过滤

java - 如何按2个约束排序?

hadoop - 在高速缓存中找不到 token (<USER>的HDFS_DELEGATION_TOKEN token 210)

apache-kafka - 如何使用 KeyValueMapper 将输入 KStream <String,String> 映射到 <String, CarClass> 中?