使用spark将数据流存储在配置单元中

时间:2017-09-06 17:00:36

标签: scala hadoop apache-spark hive spark-streaming

我正在创建一个应用程序,在其中获取进入kafka然后火花的流数据。使用数据,应用一些登录,然后将处理后的数据保存到配置单元中。数据速度非常快。我在1分钟内获得50K记录。火花流中有1分钟的窗口,它处理数据并将数据保存在配置单元中。

我的问题是生产前瞻性架构好吗?如果是,我如何将流数据保存到配置单元中。我正在做的是,创建1分钟窗口数据的数据帧,并使用

将其保存在配置单元中
results.write.mode(org.apache.spark.sql.SaveMode.Append).insertInto("stocks")

我还没有创建管道。没关系,或者我必须修改架构?

由于

1 个答案:

答案 0 :(得分:3)

我会试一试!

但是kafka-> spark-> hive不是你用例的最佳pipline。

  1. hive通常基于hdfs,它不适用于少量插入/更新/选择。 因此,您的计划可能会遇到以下问题:
    • 许多以不良表现告终的小文件
    • 你的窗口变小,因为它需要很长时间
  2. 建议:

    选项1:   - 使用kafka作为缓冲队列并设计你的管道   - kafka-> hdfs(例如带火花或水槽) - >批量火花到hive / impala表

    选项2:

    • kafka-> flume / spark to hbase / kudu->批量火花到蜂巢/黑斑羚

    选项1没有"实时"分析选项。这取决于您运行批处理火花的频率

    option2是我推荐的一个不错的选择,在hbase中存储30天,在hive / impala中存储所有旧数据。通过视图,您可以加入新旧数据进行实时分析。 Kudu使架构更加容易。

    如果您想将数据分区并通过HIVEsql使用它,那么将数据保存到配置单元表中会非常棘手。

    但基本上它会像以下一样起作用:

    xml.write.format("parquet").mode("append").saveAsTable("test_ereignis_archiv")
    

    BR