Apache Spark 结构化流 (DataStreamWriter) 写入 Hive 表
Posted
技术标签:
【中文标题】Apache Spark 结构化流 (DataStreamWriter) 写入 Hive 表【英文标题】:Apache Spark Structured Streaming (DataStreamWriter) write to Hive table 【发布时间】:2018-02-05 21:17:15 【问题描述】:我希望使用 Spark 结构化流从 Kafka 读取数据并对其进行处理并写入 Hive 表。
val spark = SparkSession
.builder
.appName("Kafka Test")
.config("spark.sql.streaming.metricsEnabled", true)
.config("spark.streaming.backpressure.enabled", "true")
.enableHiveSupport()
.getOrCreate()
val events = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "xxxxxxx")
.option("startingOffsets", "latest")
.option("subscribe", "yyyyyy")
.load
val data = events.select(.....some columns...)
data.writeStream
.format("parquet")
.option("compression", "snappy")
.outputMode("append")
.partitionBy("ds")
.option("path", "maprfs:/xxxxxxx")
.start()
.awaitTermination()
这确实创建了一个镶木地板文件,但是我如何更改它以模仿类似的东西,以便它写入可以使用 (select * from) 从 hive 或 spark-sql 读取的表格式
data.write.format("parquet").option("compression", "snappy").mode("append").partitionBy("ds").saveAsTable("xxxxxx")
【问题讨论】:
您是否考虑过为此目的使用 Kafka Connect?这要简单得多。 @RobinMoffatt 我们对来自 Kafka 的消息进行了大量转换和过滤,您认为 Kafka connect 会是更好的选择吗? 【参考方案1】:我建议查看Kafka Connect for writing the data to HDFS。它是开源的,可通过standalone 或作为Confluent Platform 的一部分使用。
要过滤和转换数据,您可以使用Kafka Streams 或KSQL。 KSQL 在 Kafka Streams 之上运行,并为您提供了一种非常简单的方法来连接数据、过滤数据和构建聚合。
这是一个在 KSQL 中聚合数据流的示例
SELECT PAGE_ID,COUNT(*) FROM PAGE_CLICKS WINDOW TUMBLING (SIZE 1 HOUR) GROUP BY PAGE_ID
在this blog 中查看 KSQL 的实际应用。您可能还对this talk 感兴趣,了解如何使用这些组件构建流数据管道
【讨论】:
以上是关于Apache Spark 结构化流 (DataStreamWriter) 写入 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 结构化流 (DataStreamWriter) 写入 Hive 表