如何从 EMR Spark 会话中获取数据?

How to fetch data from EMR Spark session?

我正在使用 Airflow 设计一些 ETL 数据管道。数据转换是通过配置 AWS EMR Spark 集群并发送其一些作业来完成的。作业从 S3 读取数据,处理它们并使用日期作为分区将它们写回 S3。

对于我的最后一步,我需要使用 SQL 脚本将 S3 数据加载到数据仓库,这些脚本使用 Python 脚本提交给 Redshift,但是我找不到一种干净的方法来检索需要加载哪些数据,即。在 Spark 转换期间生成了哪些日期分区(只能在作业执行期间知道,而不是事先知道)。

请注意,所有内容都是通过 Python 脚本使用 boto3 库编排的,该脚本来自无法从外部访问的公司虚拟机 运行。

从 EMR 获取此信息的最佳方式是什么?

目前我正在考虑不同的解决方案: - 将信息写入日志文件。通过 Python 脚本使用 SSH 从 Spark 主节点获取数据 - 将信息写入S3文件 - 将信息写入数据库(RDS?)

我正在努力确定这些解决方案的优缺点。我还想知道通知数据转换已经结束并且可以获取元数据的最佳方式是什么。

提前致谢

最直接的就是使用S3作为临时存储。 Spark 执行完成后(Writing result to S3),你可以再添加一个步骤将数据写入S3 bucket,你想在下一步中获得。

RDS 的方法应该与 S3 类似,但它需要比 S3 更多的实现。您需要设置 RDS、维护架构、实施才能与 RDS 一起使用...

使用 S3 tmp 文件,在 EMR 终止和 AF 运行 下一步之后,使用 Boto 获取该 tmp 文件(S3 路径取决于您的要求)就是这样。