开发者社区> 问答> 正文

如何使用flink和spark,以及spark只是为了转换?

"
假设mongodb中有一个“商品”集合,如下所示:

{name:""A"",attr:[""location"":""us""],""eventTime"":""2018-01-01""}
{name:""B"",attr:[""brand"":""nike""],""eventTime"":""2018-01-01""}
在过去,我使用spark来压扁它并保存到hive:

goodsDF.select($""name"",explode($""attribute""))
但是,现在我们需要处理增量数据,例如,第二天第三行有一个新的商品

{name:""A"",attr:[""location"":""us""],""eventTime"":""2018-01-01""}
{name:""B"",attr:[""brand"":""nike""],""eventTime"":""2018-01-01""}
{name:""C"",attr:[""location"":""uk""],""eventTime"":""2018-02-01""}
我们的一些团队认为flink在流媒体上更好,因为flink有事件驱动应用程序,流管道和批处理,但spark只是微批。

所以我们改为使用flink,但是有很多代码已经由spark编写,例如上面的“explosion”,所以我的问题是:是否可以使用flink来获取源并保存到接收器,但是在中间,使用spark来转换数据集?

如果不可能的话,如何将它保存到临时接收器,让我们说,一些json文件,然后spark读取文件并转换并保存到hive.But我担心这没有意义,因为对于spark,它也是增量数据。使用flink然后使用spark就像直接使用spark Structured Streaming一样。"

展开
收起
flink小助手 2018-11-28 16:38:03 2416 0
1 条回答
写回答
取消 提交回答
  • flink小助手会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关flink的问题及回答。

    "不能在没有对代码进行更改的情况下在Flink中使用Apache Spark代码。由于这两者是不同的处理框架和由两个提供的API,它的语法彼此不同。框架的选择应该由用例驱动,而不是像Flink那样通用语句比Spark更好。框架可能对你的用例很有用,并且在其他用例中可能表现不佳。顺便说一句,Spark不仅仅是微批。它有批量,流媒体,图形,ML和其他东西。由于没有提到完整的用例,因此很难说明哪种情况更适合这种情况。但是,如果你的用例可以提供亚秒级延迟,那么我不会浪费时间转移到另一个框架。

    此外,如果事物是​​动态的并且预计处理框架将来可能会发生变化,那么最好使用像apache beam这样的东西来提供大多数处理引擎的抽象。使用apache beam处理API可以让您随时灵活地更改底层处理引擎。以下是阅读更多关于beam的链接 - https://beam.apache.org/。"

    2019-07-17 23:16:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载