Apache spark 为什么spark submit会以“提交失败”;AnalysisException:kafka不是有效的Spark SQL数据源“;?
我使用Spark 2.1.0和Kafka 0.10.2.1 我编写了一个Spark应用程序,用于读取卡夫卡主题中的数据集 代码如下:Apache spark 为什么spark submit会以“提交失败”;AnalysisException:kafka不是有效的Spark SQL数据源“;?,apache-spark,apache-kafka,apache-spark-sql,spark-structured-streaming,Apache Spark,Apache Kafka,Apache Spark Sql,Spark Structured Streaming,我使用Spark 2.1.0和Kafka 0.10.2.1 我编写了一个Spark应用程序,用于读取卡夫卡主题中的数据集 代码如下: spark-submit \ --verbose \ --jars${echo /home/hduser1/spark/jars/*.jar | tr ' ' ',') \ --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.10 \ --class com.**** \ --mast
spark-submit \
--verbose \
--jars${echo /home/hduser1/spark/jars/*.jar | tr ' ' ',') \
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.10 \
--class com.**** \
--master (Spark Master URL) /path/to/jar
package.com.example;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.sql.SparkSession;
导入org.apache.spark.sql.SQLContext;
导入org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.Row;
公共类MLP{
公共静态void main(字符串[]args){
火花会话火花=火花会话
.builder()
.appName(“MLP”)
.getOrCreate();
数据集df=spark
.读()
.格式(“卡夫卡”)
.option(“kafka.bootstrap.servers”,“localhost:9092,localhost:9093”)
.选项(“订阅”、“结果主题”)
.load();
df.show();
spark.stop();
}
}
我的部署脚本如下所示:
spark-submit \
--verbose \
--jars${echo /home/hduser1/spark/jars/*.jar | tr ' ' ',') \
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.10 \
--class com.**** \
--master (Spark Master URL) /path/to/jar
但是我得到了一个错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException:
kafka is not a valid Spark SQL Data Source.;
我已经尝试将同一个应用程序与非Jafka数据源一起使用,并且正确创建了数据帧。我也尝试过在客户端模式下使用Thread,但我得到了相同的错误。Kafka作为非流数据帧的数据源-数据集将从JIRA的Spark 2.2中提供 正如@JacekLaskowski所提到的,将包更改为(将Jacek的版本修改为使用2.2): 此外,使用
readStream
读取数据流
您不能对流式数据源使用show
,而是使用console
格式
StreamingQuery query = df.writeStream()
.outputMode("append")
.format("console")
.start();
query.awaitTermination();
卡夫卡作为非流数据帧的数据源-数据集可从JIRA Spark 2.2获得 正如@JacekLaskowski所提到的,将包更改为(将Jacek的版本修改为使用2.2): 此外,使用
readStream
读取数据流
您不能对流式数据源使用show
,而是使用console
格式
StreamingQuery query = df.writeStream()
.outputMode("append")
.format("console")
.start();
query.awaitTermination();
首先,您应该将
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.10
(我怀疑它是否有效)替换为以下内容:
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.1.1
我认为2.10版
从未面世。如果您使用了2.1.0
(而不是2.10
),您可能会想到2.1.0
其次,删除spark加载的--jars${echo/home/hduser1/spark/jars/*.jar | tr'',')
,除了一些额外的jar,比如Kafka源代码
这应该使您能够访问
kafka
源代码格式。首先,您应该用以下内容替换--packagesorg.apache.spark:spark-sql-kafka-0-10_2.11:2.10
(我怀疑它是否有效):
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.1.1
我认为2.10
这个版本从来都没有出现过。如果您使用2.1.0
(而不是2.10
),您可能已经想到了2.1.0
)这个版本
其次,删除spark加载的--jars${echo/home/hduser1/spark/jars/*.jar | tr'',')
,除了一些额外的jar,比如Kafka源代码
这应该可以让你访问
kafka
源代码格式。就我所知,Spark 2.1中没有用于非流数据集的kafka源代码。是的,请看。因此,部分你的答案是正确的,部分是我的;)但是有人认为我的答案不正确o.OOuch。对了!很抱歉投了反对票。是我。修复了这个问题。Spark 2.1中没有K据我所知,非流式数据集的afka源代码是的,请参阅。因此,部分您的答案是正确的,部分是我的;)但是有人认为我的答案不正确o.OOuch.对!对不起,是我投了反对票。修复了。我没有投反对票:(.我删除了df.show();包括了查询,并包括了要在main()中引发的异常)。但现在我得到了“当流数据帧/数据集上没有流聚合时,不支持完整输出模式;”;卡夫卡“我有一个消费者设置,它轮询主题,并且主题存在。@如果您想使用流数据集或静态?对于静态,您必须将Spark升级到2.2检查附加
模式:)我没有否决您:(.我删除了df.show();并包含了查询,还包含了要在main()中抛出的异常。但现在我得到了“当流数据帧/数据集上没有流聚合时,不支持完整输出模式;;kafka”我有一个消费者设置,它轮询主题并且它存在。@Suf您想使用流数据集还是静态?对于静态,您必须将Spark升级到2.2Checkappend
mode:)