结构化流式Kafka 2.1-> Zeppelin 0.8-> Spark 2.4:spark不使用jar

时间:2019-07-19 09:24:56

标签: python apache-spark pyspark apache-kafka apache-zeppelin

我有一个Kafka 2.1消息代理,想对Spark 2.4中的消息数据进行一些处理。我想使用Zeppelin 0.8.1笔记本进行快速原型制作。

我下载了spark-streaming-kafka-0-10_2.11.jar,它是结构化流(http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.htm)所必需的,并将其作为“ Dependencies-artifact”添加到Zeppelin的“ spark”解释器中(还处理%pyspark段落)。我重新启动了这个解释器(还有齐柏林飞艇)。

我还在笔记本的第一段中加载了jar(我首先认为这是不必要的...):

%dep z.load("/usr/local/analyse/jar/spark-streaming-kafka-0-10_2.11.jar")
res0: org.apache.zeppelin.dep.Dependency = org.apache.zeppelin.dep.Dependency@2b65d5

因此,我没有出现任何错误,因此加载似乎可以正常进行。现在,我要进行测试,kafka服务器使用该端口在同一台计算机上运行,​​并且还有一个主题“ test”:

%pyspark
# Subscribe to a topic
df = spark \
  .readStream \
  .format("kafka") \
  .option("kafka.bootstrap.servers", "localhost:9092") \
  .option("subscribe", "test") \
  .load()

但是我得到了错误

  

无法执行第6行:.option(“ subscribe”,“ test”)\ Traceback   (最近通话最近):文件   “ /usr/local/analyse/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,   第63行,在装饰中       返回f(* a,** kw)文件“ /usr/local/analyse/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,   第328行,位于get_return_value中       格式(target_id,“。”,名称),值)py4j.protocol.Py4JJavaError:调用o120.load时发生错误。 :   org.apache.spark.sql.AnalysisException:无法找到数据源:   卡夫卡。请按照的“部署”部分部署应用程序   《结构化流+ Kafka集成指南》。在   org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:652)     在   org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:161)     在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)在   py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)在   py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)在   py4j.Gateway.invoke(Gateway.java:282)在   py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)     在py4j.commands.CallCommand.execute(CallCommand.java:79)处   py4j.GatewayConnection.run(GatewayConnection.java:238)在   java.lang.Thread.run(Thread.java:748)

     

在处理上述异常期间,发生了另一个异常:

     

回溯(最近通话最近):文件   “ /tmp/zeppelin_pyspark-312826888257172172599.py”,第380行,在       exec(code,_zcUserQueryNameSpace)文件“”,文件中的第6行   “ /usr/local/analyse/spark/python/lib/pyspark.zip/pyspark/sql/streaming.py”,   负载中的第400行       返回self._df(self._jreader.load())文件“ /usr/local/analyse/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,   第1257行,在致电中       答案,self.gateway_client,self.target_id,self.name)文件“ /usr/local/analyse/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,   69行,在装饰中       引发AnalysisException(s.split(':',1)[1],stackTrace)pyspark.sql.utils.AnalysisException:'未能找到数据源:   卡夫卡。请按照的“部署”部分部署应用程序   “《结构化流+ Kafka集成指南》”。'

我想知道至少应该进行一项调整(解释器配置或直接加载)。

我还尝试在控制台上执行spark-submit --jar /usr/local/analyse/jar/spark-streaming-kafka-0-10_2.11.jar,但这似乎仅在我提交程序的情况下有效。

因此,我还将spark-streaming-kafka-0-10_2.11.jar复制到了/ usr / local / analyse / spark / jars /中,其中所有其他jar都是jar。但是重新启动后,我总是得到相同的错误。

1 个答案:

答案 0 :(得分:2)

第一个问题是,您已经下载了用于火花流的软件包,但是尝试创建结构化的流对象(使用readstream())。请记住,火花流和火花结构化流是两个不同的事物,需要区别对待。

对于结构化流,您需要下载软件包spark-sql-kafka-0-10_2.11及其依赖项kafka-clientsslf4j-apisnappy-javalz4-javaunused。您的依赖项部分应如下所示,以加载所有必需的软件包:

z.load("/tmp/spark-sql-kafka-0-10_2.11-2.4.0.jar")
z.load("/tmp/kafka-clients-2.0.0.jar")
z.load("/tmp/lz4-java-1.4.0.jar")
z.load("/tmp/snappy-java-1.1.7.1.jar")
z.load("/tmp/unused-1.0.0.jar")
z.load("/tmp/slf4j-api-1.7.16.jar")