java - 在 Kubernetes 上使用 Kafka 进行 Spark 作业

标签 java apache-spark kubernetes apache-kafka

我们有一个 Spark Java 应用程序,它从数据库读取数据并在 Kafka 上发布消息。当我们使用以下参数在 Windows 命令行上本地执行作业时,它会按预期工作:

bin/spark-submit -class com.data.ingestion.DataIngestion --jars  local:///opt/spark/jars/spark-sql-kafka-0-10_2.11-2.3.0.jar local:///opt/spark/jars/data-ingestion-1.0-SNAPSHOT.jar

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.0 --class com.data.ingestion.DataIngestion data-ingestion-1.0-SNAPSHOT.jar

同样,当尝试使用 k8s master 运行命令时

bin/spark-submit --master k8s://https://172.16.3.105:8443 --deploy-mode cluster --conf spark.kubernetes.container.image=localhost:5000/spark-example:0.2 --class com.data.ingestion.DataIngestion --jars  local:///opt/spark/jars/spark-sql-kafka-0-10_2.11-2.3.0.jar local:///opt/spark/jars/data-ingestion-1.0-SNAPSHOT.jar

它给出以下错误:

Exception in thread "main" java.util.ServiceConfigurationError: 
org.apache.spark.sql.sources.DataSourceRegister: Provider 
org.apache.spark.sql.kafka010.KafkaSourceProvider could not be instantiated

最佳答案

根据错误,表明集群中至少有一个节点没有 /opt/spark/jars/spark-sql-kafka-0-10_2.11-2.3.0.jar

我建议您创建一个包含 Kafka Structured Streaming 包的 uber jar,或者使用 --packages 而不是本地文件,此外还设置像 Rook 或 MinIO 这样的解决方案以在 k8s 中拥有共享文件系统/ Spark

关于java - 在 Kubernetes 上使用 Kafka 进行 Spark 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434461/

相关文章:

java.io.FileNotFoundException : localhost/broadcast_1

docker - kubernetes 1.12.2 加载 Kubelet 配置文件/var/lib/kubelet/config.yaml 失败

Java - 为什么将 F 附加到 `float a=0.32F` 告诉它在 a 中存储 32 位 float ,但执行 `float a = 0.32` 却告诉它你想存储 64 位 double ?

java - 无法启动 HSQLDB (java.net.BindException : Address already in use)

python - PySpark 数据帧 : Find closest value and slice the DataFrame

apache-spark - Spark Standalone - Tmp 文件夹

kubernetes - EKS负载平衡器上的SSL(ACM)

kubernetes - 即使删除了命名空间,CRD 也不会被删除

java - 如何防止数字(0-9)在JAVA中用作变量?

java - 在 JAVA 上将 2D 播放器位置 A 转换到 B