如何将flink和spark一起使用,并仅将其用于转换?

时间:2018-10-22 02:17:48

标签: apache-spark spark-streaming apache-flink

我们说在mongodb中有一个这样的集合“商品”:

{name:"A",attr:["location":"us"],"eventTime":"2018-01-01"}
{name:"B",attr:["brand":"nike"],"eventTime":"2018-01-01"}

过去,我使用spark将其弄平并保存为蜂巢:

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已经编写了很多代码,例如,上面的“爆炸”,所以我的问题是: 是否可以使用flink来获取源并保存到接收器,但是在中间,可以使用spark来转换数据集?

如果不可能的话,如何将其保存到一个临时接收器中,比如说,一些json文件,然后火花读取文件并转换并保存为hive。但是,这恐怕是没有意义的,因为对于spark,它也是增量数据。使用flink然后使用spark与直接使用spark结构化流相同。

1 个答案:

答案 0 :(得分:0)

不。未经更改,不能在Flink中使用Apache Spark代码。由于这两个是不同的处理框架和两者提供的API,并且语法彼此不同。框架的选择实际上应该由用例驱动,而不是由通用语句(例如Flink)胜于Spark。框架可能适合您的用例,而在其他用例中可能表现不佳。顺便说一句,Spark不仅是微型批次。它具有批处理,流,图,ML和其他内容。由于没有提到完整的用例,因此很难建议哪种方案更适合这种情况。但是,如果您的用例可以承受亚秒级的延迟,那么我就不会在转移到另一个框架上浪费时间。

此外,如果事物是​​动态的,并且预计处理框架将来可能会发生变化,则最好使用诸如Apache Beam之类的东西,它可以为大多数处理引擎提供抽象。使用apache光束处理API将使您能够随时灵活地更改基础处理引擎。这是更多有关梁的链接-https://beam.apache.org/