如何使用 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-redshift 连接超时异常

在 EMR 中使用 spark ad scala 从 redshift 加载数据

Amazon EMR 与 Amazon Redshift

S3->Redshift 和 S3->EMR->Redshift 之间有啥不同/好处?

如何在 Redshift 中仅输出随机 xx% 的查询输出记录?

结合 AWS EMR 输出