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 表

大数据(8s)Spark结构化流

将 Spark SQL 批处理源转换为结构化流接收器

通过点击流分析确定热门主题,Apache Spark + Kafka 组合了解一下!

如何将 Spark 结构化流数据写入 REST API?

Spark 结构化流中的临时视图