无法使用Spark SQL读取Kafka

时间:2019-06-21 13:08:20

标签: java maven apache-spark apache-kafka spark-streaming

我正在尝试使用spark读取kafka,但我猜想遇到了一些与库相关的问题。

我正在向kafka主题推送一些事件,这些事件我可以通过kafka控制台使用者读取,但无法通过spark读取。我正在使用spark-sql-kafka库,并且该项目是用maven编写的。 Scala版本是2.11.12,spark版本是2.4.3。

            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.4.3</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql-kafka-0-10 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql-kafka-0-10_2.11</artifactId>
            <version>2.4.3</version>
            <scope>provided</scope>
        </dependency>

我的Java代码如下:-

SparkSession spark = SparkSession.builder()
                .appName("kafka-tutorials")
                .master("local[*]")
                .getOrCreate();

        Dataset<Row> rows = spark.readStream().
                format("kafka").option("kafka.bootstrap.servers", "localhost:9092")
                .option("subscribe", "meetup-trending-topics")
                .option("startingOffsets", "latest")
                .load();

        rows.writeStream()
                .outputMode("append")
                .format("console")
                .start();

        spark.streams().awaitAnyTermination();
        spark.stop();

下面是我得到的错误消息:-

线程“主”中的异常org.apache.spark.sql.AnalysisException:无法找到数据源:kafka。请按照“结构化流+ Kafka集成指南”的部署部分部署应用程序。         在org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:652)         在org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:161)

解决方案:- 1)创建uber jar或ii)--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.3 我之前在mainclass之后给出了--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.3选项。

1 个答案:

答案 0 :(得分:2)

此:

<scope>provided</scope>

表示您负责提供适当的jar。我(和许多其他人)更喜欢避免使用此范围,而是构建一个uberjar进行部署。