如何使用 RedShift 查询的输出作为 EMR 作业的输入?
Posted
技术标签:
【中文标题】如何使用 RedShift 查询的输出作为 EMR 作业的输入?【英文标题】:How to use output of RedShift query as input of an EMR job? 【发布时间】:2013-07-17 21:59:21 【问题描述】:所以我对 Redshift 的了解有限,这是我解决问题的计划......
我想获取查询结果,并将它们用作 EMR 作业的输入。以编程方式解决此问题的最佳方法是什么。
目前,我的 EMR 作业将 S3 中的平面文件作为输入,我使用 Amazon Java SDK 来设置此作业和所有内容。
我是否应该将 RedShift 查询的输出写入 S3,并将我的 EMR 作业指向那里,然后在 EMR 作业完成后删除该文件?
或者 RedShift 和 AWS SKD 是否提供了一种更有资源的方式来将查询从 RedShift 直接传送到 EMR,从而省去 S3 步骤?
谢谢
最近与 Amazon Redshift 团队的成员进行了交谈,他们说解决方案正在开发中。
【问题讨论】:
【参考方案1】:这很简单——不需要 Sqoop。在您的作业前面添加一个Cascading Lingual 步骤,该步骤将Redshift UNLOAD
命令执行到S3:
UNLOAD ('select_statement')
TO 's3://object_path_prefix'
[ WITH ] CREDENTIALS [AS] 'aws_access_credentials'
[ option [ ... ] ]
然后您可以直接在 S3 上处理导出,或者添加一个S3DistCp 步骤以首先将数据导入 HDFS。
这将比添加 Sqoop 性能更高,维护也更简单。
【讨论】:
以上是关于如何使用 RedShift 查询的输出作为 EMR 作业的输入?的主要内容,如果未能解决你的问题,请参考以下文章
在 EMR 中使用 spark ad scala 从 redshift 加载数据
S3->Redshift 和 S3->EMR->Redshift 之间有啥不同/好处?