flink和spark怎么搭配使用,spark只做改造?
how to use flink and spark together,and spark just for transformation?
假设 mongodb 中有一个集合 "goods",如下所示:
{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写的,比如上面的"explode",所以我的问题是:
是否可以使用flink获取source并保存到sink,但在中间使用spark转换数据集?
如果不可能,如何将它保存到临时接收器,比方说,一些 json 文件,然后 spark 读取文件并转换并保存到 hive.But 我恐怕这没有任何意义,因为对于spark来说,它也是增量的data.Use flink然后使用spark与直接使用spark Structured Streaming是一样的。
没有。如果不更改代码,Apache Spark 代码无法在 Flink 中使用。由于这两者是两者提供的不同处理框架和API,并且其语法彼此不同。框架的选择应该真正由用例驱动,而不是像 Flink 比 Spark 更好这样的通用语句。一个框架可能非常适合您的用例,但在其他用例中可能表现不佳。顺便说一句,Spark 不仅仅是微批处理。它有批处理、流式处理、图形、ML 和其他东西。由于没有提到完整的用例,因此很难建议哪个更适合这个场景。但是,如果您的用例可以承受亚秒级延迟,那么我不会浪费时间转移到另一个框架。
此外,如果事情是动态的,并且预计处理框架将来可能会发生变化,那么最好使用像 apache beam 这样的东西,它提供了对大多数处理引擎的抽象。使用 apache beam 处理 API 可以让您灵活地随时更改底层处理引擎。这里是 link 阅读更多关于光束的信息 - https://beam.apache.org/。
假设 mongodb 中有一个集合 "goods",如下所示:
{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写的,比如上面的"explode",所以我的问题是: 是否可以使用flink获取source并保存到sink,但在中间使用spark转换数据集?
如果不可能,如何将它保存到临时接收器,比方说,一些 json 文件,然后 spark 读取文件并转换并保存到 hive.But 我恐怕这没有任何意义,因为对于spark来说,它也是增量的data.Use flink然后使用spark与直接使用spark Structured Streaming是一样的。
没有。如果不更改代码,Apache Spark 代码无法在 Flink 中使用。由于这两者是两者提供的不同处理框架和API,并且其语法彼此不同。框架的选择应该真正由用例驱动,而不是像 Flink 比 Spark 更好这样的通用语句。一个框架可能非常适合您的用例,但在其他用例中可能表现不佳。顺便说一句,Spark 不仅仅是微批处理。它有批处理、流式处理、图形、ML 和其他东西。由于没有提到完整的用例,因此很难建议哪个更适合这个场景。但是,如果您的用例可以承受亚秒级延迟,那么我不会浪费时间转移到另一个框架。
此外,如果事情是动态的,并且预计处理框架将来可能会发生变化,那么最好使用像 apache beam 这样的东西,它提供了对大多数处理引擎的抽象。使用 apache beam 处理 API 可以让您灵活地随时更改底层处理引擎。这里是 link 阅读更多关于光束的信息 - https://beam.apache.org/。