我正在用Airflow设计一些ETL数据管道。数据转换是通过预配AWS EMR Spark集群并发送其一些作业来完成的。作业从S3读取数据,对其进行处理,然后使用date作为分区将其写回到S3。
对于我的最后一步,我需要使用SQL脚本将S3数据加载到数据仓库,该SQL脚本使用Python脚本提交给Redshift,但是我找不到一种干净的方法来检索需要加载的数据。在Spark转换期间生成了哪些日期分区(只能在作业执行过程中知道,而不能事先知道)。
请注意,所有事情都是通过使用boto3库通过Python脚本编排的,该库是从无法从外部访问的公司VM运行的。
从EMR中获取此信息的最佳方法是什么?
目前,我正在考虑不同的解决方案: -将信息写入日志文件。通过Python脚本使用SSH从Spark主节点获取数据 -将信息写入S3文件 -将信息写入数据库(RDS?)
我正在努力确定这些解决方案的优缺点。我还想知道通知数据转换已结束并且可以获取元数据的最佳方法是什么。
预先感谢
答案 0 :(得分:0)
最直接的方法是将S3用作您的临时存储。完成Spark执行(将结果写入S3)后,您可以再添加一步将数据写入到S3存储桶中,以在下一步中获取。
使用RDS的方法应该类似于S3,但是它比S3需要更多的实现。您需要设置RDS,维护架构,实现才能与RDS一起使用...
对于S3 tmp文件,在EMR终止且AF运行下一步之后,使用Boto来获取该tmp文件(S3路径取决于您的要求)。