繁体   English   中英

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

[英]structured streaming Kafka 2.1->Zeppelin 0.8->Spark 2.4: spark does not use jar

我有一个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.html )并添加了它作为“依赖关系 - 神器”到Zeppelin的“火花” - 解释器(也涉及%pyspark段落)。 我重新启动了这个解释器(以及zeppelin)。

我还在第一个笔记本段中加载了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行,在deco返回f(* a,** kw)文件”/usr/local/analyse/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py“ ,第328行,采用get_return_value格式(target_id,“。”,name),value)py4j.protocol.Py4JJavaError:调用o120.load时发生错误。 :org.apache.spark.sql.AnalysisException:无法找到数据源:kafka。 请按照“Structured Streaming + Kafka Integration Guide”的部署部分部署应用程序。 在sun.reflect的org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:652)org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:161)。 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)中的NativeMethodAccessorImpl.invoke0(Native Method)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)的java.lang.reflect.Method.invoke(方法。 java:498)at py4j.reflection.MethodInvoke.invoke(MethodInvoker.java:244)py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)py4j.Gateway.invoke(Gateway.java:282)py4j。在Java.lang.Thread.run(线程)py4j.GatewayConnection.run(GatewayConnection.java:238)的py4j.commands.CallCommand.execute(CallCommand.java:79)上的commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)的.java:748)

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

回溯(最近一次调用最后一次):文件“/tmp/zeppelin_pyspark-312826888257172599.py”,第380行,在exec(代码,_zcUserQueryNameSpace)文件“”,第6行,在文件“/ usr / local / analyze / spark / python中/lib/pyspark.zip/pyspark/sql/streaming.py“,第400行,在加载返回self._df(self._jreader.load())文件”/ usr / local / analyze / spark / python / lib / py4j -0.10.7-src.zip/py4j/java_gateway.py“,第1257行,在调用 answer,self.gateway_client,self.target_id,self.name)文件”/ usr / local / analyze / spark / python / lib / pyspark.zip/pyspark/sql/utils.py“,第69行,在deco中引发AnalysisException(s.split(':',1)[1],stackTrace)pyspark.sql.utils.AnalysisException:'无法找到数据来源:卡夫卡。 请按照“Structured Streaming + Kafka Integration Guide”的部署部分部署应用程序。

我想知道,因为至少有一个调整(解释器配置或直接加载)应该有效。

我还在控制台上尝试了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 / analyze / spark / jars /其他所有其他jar的spark。 但重启(火花和齐柏林飞艇)后我总是得到同样的错误。

与此同时,我发现我可以在webbrowser中查看spark的环境变量,然后在“Classpath Entries”部分找到spark-streaming-kafka-0-10_2.11.jar,其源代码为“System Classpath”以及“由用户添加”(似乎是Zeppelin的翻译部分中的工件)。 所以看来我的前两个尝试应该有效。

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

对于结构化的数据流,你需要下载软件包火花-SQL卡夫卡0-10_2.11及其附属卡夫卡的客户端SLF4J的API活泼的JavaLZ4的Java闲置 您的依赖项部分应如下所示加载所有必需的包:

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM