我们目前正在使用redshift作为我们的数据仓库,我们对此非常满意。然而,我们现在需要对仓库中的数据进行机器学习。考虑到所涉及的数据量,理想情况下,我希望在与数据相同的位置运行计算,而不是将数据四处移动,但这似乎不可能使用红移。我看过madlib,但这不是一个选项,因为redshift不支持udfs(madlib需要udfs)。我目前正在考虑将数据转移到emr,并使用apachespark机器学习库(或者h20,或者mahout,或者其他什么)对其进行处理。所以我的问题是:
有更好的办法吗?
如果没有,我应该如何让spark访问数据?到目前为止,我确定的选项包括:使用sqoop将其加载到hdfs中,使用dbinputformat,执行红移导出到s3,并让spark从那里获取它。使用spark时,这些不同方法(以及其他方法)的优缺点是什么?
请注意,这是离线批量学习,但我们希望能够尽快做到这一点,以便我们可以快速迭代实验。
2条答案
按热度按时间qeeaahzv1#
您可以将spark作为单独的服务在同一台机器上启动,从而与现有hadoop集群一起运行。要从spark访问hadoop数据,只需使用hdfs://url(通常是hdfs://:9000/path,但您可以在hadoop namenode的web ui上找到正确的url)。或者,您可以为spark设置一个单独的集群,并且仍然让它通过网络访问hdfs;这将比磁盘本地访问速度慢,但如果您仍在同一个局域网中运行(例如,您在每个安装了hadoop的机架上放置了几个spark机器),则可能不需要担心。您可以使用数据管道服务或只复制命令将数据从红移移移到hdfs。无论如何,您可以使用红移进行机器学习,这取决于您使用的工具或实现的算法。不管怎么说,它的数据库更少,存储的数据更多,所有的优点和缺点都在背后。
dba5bblo2#
如果您想在spark中查询红移数据,并且您使用的是spark 1.4.0或更新版本,请查看
spark-redshift
,一个支持将数据从redshift加载到spark sql dataframes并将dataframes保存回redshift的库。如果要查询大量数据,这种方法的性能应该比jdbc更好,因为它能够并行地卸载和查询数据。如果计划对红移数据运行许多不同的ml作业,那么可以考虑使用spark-redshift
将其从红移中导出并以有效的文件格式(如parquet)保存到s3。披露:我是
spark-redshift
.