Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Can';t访问kafka.serializer.StringDecoder_Apache Kafka_Spark Streaming - Fatal编程技术网

Apache kafka Can';t访问kafka.serializer.StringDecoder

Apache kafka Can';t访问kafka.serializer.StringDecoder,apache-kafka,spark-streaming,Apache Kafka,Spark Streaming,我添加了卡夫卡和spark streaming的sbt包,如下所示: "org.apache.spark" % "spark-streaming_2.10" % "1.6.1", "org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.1" 但是,当我想使用kafkadirect流时,我无法访问它 val topics="CCN_TOPIC,GGSN_TOPIC" val topicsSet = topics.split(",").to

我添加了卡夫卡和spark streaming的sbt包,如下所示:

"org.apache.spark" % "spark-streaming_2.10" % "1.6.1",
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.1"
但是,当我想使用kafkadirect流时,我无法访问它

val topics="CCN_TOPIC,GGSN_TOPIC"
val topicsSet = topics.split(",").toSet
val kafkaParams = Map[String, String]("metadata.broker.list" -> kafkaBrokers)

val messages= org.apache.spark.streaming.kafka.KafkaUtils[String, String, kafka.serializer.StringDecoder, StringDecoder](
  ssc, kafkaParams, topicsSet)
编译器无法识别kafka.serializer.StringDecoder

 object serializer is not a member of package org.apache.spark.streaming.kafka
编辑: 我也试过了

 import  _root_.kafka.serializer

…但其中没有StringDecoder..

请尝试以下操作:添加文件

卡夫卡2.11-0.10.0.0.jar


您的项目依赖关系。它应该可以修复您的错误。

如果我使用了错误的术语,我表示歉意,我不是依赖项、链接等方面的专家。下面的方法使用HDP 2.4.3工作

1.找到正确的罐子 您需要在您的环境中找到正确的卡夫卡罐子

下面的shell脚本对于创建所有jar中所有类的常规列表并将它们转储到文件(当需要查找特定类的jar时,可以使用egrep搜索该文件)非常有用

我正在使用HDP,所以我指定HDP安装的根目录作为搜索JAR的点。您的平台罐可能在其他地方

all_hdp_classes () {
  find -L /usr/hdp/current -maxdepth 20 -name "*.jar" -print | while read line; do
    for i in `jar tf $line | grep .class`
    do
    echo $line : $i
    done 
  done
}
all_hdp_classes > ~/all_hdp_classes
获得列表后,可以按如下方式搜索文件:

egrep 'kafka' ~/all_hdp_classes | grep Decoder
import org.apache.spark.streaming._
import _root_.kafka.serializer.StringDecoder
注意:Ambari仅在Kafka代理所在的节点上安装Kafka代理库。因此,您需要在该节点上搜索,否则将找不到任何内容(或者只找到spark示例)。 然后将Jar复制到运行Spark的节点上

在Kafka broker节点上,我发现以下Jar包含StringDecoder类:

/usr/hdp/current/kafka-broker/libs/kafka_2.10-0.10.1.2.1.2.0-10.jar
请注意,这是一个与kafka_2.11-0.10.0.0.jar不同的文件,正如另一个答案中所建议的,它不包含Decoder类(至少在我的环境中)

还要检查scala版本的2.10或2.11,确保Jar对齐

2.将Jar添加到Spark类路径 在Spark类路径中包含Jar

方法取决于是否要使用spark shell或spark submit仅更新单个会话的类路径,或者是否要更新所有spark会话的类路径(例如使用Ambari)

对于spark shell会话:

spark-shell --jars /path/to/jar/on/this/node/kafka_2.10-0.10.1.2.1.2.0-10.jar
请注意,spark文档中提到的spark-streaming-kafka-maven依赖项可能会在导入步骤中导致冲突,稍后将对此进行解释

如果需要,您仍然可以继续使用--packages选项添加它

示例(Spark 1.6.2和scala 2.10,您的可能有所不同):

3.导入到会话中 您可能会遇到以下错误:

error: object serializer is not a member of package org.apache.spark.streaming.kafka
在我上面的示例中,maven包包含了另一个kafka包,因此它作为“org.apache.spark.streaming.”的一部分导入

要解决此问题,请执行以下操作:

egrep 'kafka' ~/all_hdp_classes | grep Decoder
import org.apache.spark.streaming._
import _root_.kafka.serializer.StringDecoder

导致此问题的一个潜在原因是您导入了

导入org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream
之前

导入kafka.serializer.StringDecoder

正确的顺序是

首先导入kafka.serializer.StringDecoder//
导入org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream

从KafkaUtils类调用
createDirectStream
方法的地方?添加根。帮助