Apache Spark Structured Streaming(DataStreamWriter)写入Hive表

时间:2018-02-05 21:17:15

标签: apache-spark apache-kafka apache-spark-sql

我希望使用Spark Structured流来读取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")

1 个答案:

答案 0 :(得分:0)

我建议查看Kafka Connect for writing the data to HDFS。它是开源的,可用standaloneConfluent Platform的一部分。

要过滤和转换数据,您可以使用Kafka StreamsKSQL。 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感兴趣