.NET for Apache Spark连接Kafka失败及spark-submit报错求助
解决.NET for Apache Spark连接Confluent Cloud Kafka时「Failed to find data source: kafka」的问题
1. 确认Spark-Kafka依赖包的版本匹配
Spark 3.2.1对应的Kafka集成包版本必须完全一致,且对应正确的Scala版本(Spark 3.2.1默认使用Scala 2.12),正确的包坐标是:org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.1
2. 正确传递--packages参数到.NET Spark运行命令
单独执行spark-submit --packages会报错「Missing application resource」,因为该命令需要指定要运行的应用程序。针对.NET Spark,有两种正确的传递方式:
方式一:通过spark-submit直接提交
使用DotnetRunner作为主类,同时指定包依赖和你的.NET应用DLL路径:
spark-submit \ --class org.apache.spark.deploy.dotnet.DotnetRunner \ --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.1 \ /path/to/dotnet-runner.jar \ /path/to/your-app.dll
注:dotnet-runner.jar的路径通常在你的.NET Spark安装目录下,或可通过NuGet包获取
方式二:设置环境变量后用dotnet run
在运行dotnet run前,设置SPARK_SUBMIT_OPTS环境变量注入包依赖:
- Linux/macOS:
export SPARK_SUBMIT_OPTS="--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.1" dotnet run
- Windows:
set SPARK_SUBMIT_OPTS="--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.1" dotnet run
3. 手动添加依赖包(如果自动下载失败)
如果上述方式仍未自动下载依赖包,可以手动下载所需jar包放到Spark的jars目录:
- 下载
spark-sql-kafka-0-10_2.12-3.2.1.jar及其依赖(如kafka-clients-2.8.0.jar、spark-token-provider-kafka-0-10_2.12-3.2.1.jar等) - 将这些jar包复制到
$SPARK_HOME/jars目录(Windows对应%SPARK_HOME%\jars)
4. 验证Confluent Cloud配置正确性
当依赖问题解决后,确保你的代码中Confluent Cloud的连接配置正确,关键配置项示例:
var streamingDF = spark.ReadStream() .Format("kafka") .Option("kafka.bootstrap.servers", "<你的Confluent Cloud bootstrap服务器>") .Option("kafka.sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username='<你的API Key>' password='<你的API Secret>';") .Option("kafka.security.protocol", "SASL_SSL") .Option("kafka.sasl.mechanism", "PLAIN") .Option("subscribe", "<要订阅的Topic名称>") .Load();
内容的提问来源于stack exchange,提问作者Kenci
相关产品推荐
相关产品推荐

