处理存储在 Redshift 中的数据

数据挖掘 apache-hadoop aws
2021-09-20 20:55:24

我们目前使用 Redshift 作为我们的数据仓库,对此我们非常满意。但是,我们现在需要对仓库中的数据进行机器学习。考虑到所涉及的数据量,理想情况下,我希望在与数据相同的位置运行计算,而不是移动数据,但这对于 Redshift 来说似乎是不可能的。我看过 MADlib,但这不是一个选项,因为 Redshift 不支持 UDF(MADlib 需要)。我目前正在考虑将数据转移到 EMR 并使用 Apache Spark 机器学习库(或者可能是 H20、Mahout 或其他)对其进行处理。所以我的问题是:

  1. 有没有更好的办法?
  2. 如果没有,我应该如何让 Spark 可以访问数据?到目前为止,我已经确定的选项包括:使用 Sqoop 将其加载到 HDFS、使用 DBInputFormat、将 Redshift 导出到 S3 并让 Spark 从那里抓取它。使用 Spark 时,这些不同方法(以及任何其他方法)的优缺点是什么?

请注意,这是离线批量学习,但我们希望能够尽快完成此操作,以便我们可以快速迭代实验。

2个回答

新的亚马逊机器学习服务可能对您有用。它直接与 Redshift 一起工作,可能是一个很好的开始方式。http://aws.amazon.com/machine-learning/

如果您希望使用 EMR 进行处理,则可以使用 Redshift 的 UNLOAD 命令将数据放到 S3 上。然后,EMR 上的 Spark 可以直接访问它,而无需将其拉入 HDFS。

EMR 上的 Spark:https ://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923

你可以试试这个。 https://github.com/databricks/spark-redshift

否则使用 Rahul 的答案,将数据卸载到 s3,然后将其加载到 SPARK 中。EMR Spark 位于 YARN 之上,Spark 上下文的 textFile 方法原生支持“s3//”。