将Spark ML中的ALS潜在因素保存到S3需要太长时间

时间:2017-01-05 19:23:36

标签: amazon-web-services apache-spark amazon-s3 pyspark

我使用Python脚本使用Spark ML的ALS例程计算用户和项目潜在因素,如here所述。

在计算潜在因素后,我试图使用以下内容将这些保存到S3:

model = als.fit(ratings)

# save items latent factors
model.itemFactors.rdd.saveAsTextFile(s3path_items)

# save users latent factors
model.userFactors.rdd.saveAsTextFile(s3path_users)

大约有1.5亿用户。快速计算LFA(约15分钟),但将潜在因子写出到S3需要将近5个小时。很明显,有些事情是不对的。你能帮忙找出问题吗?

我在使用ALS计算LFA时使用了100个用户块和100个项块 - 以防这些信息可能相关。

使用100台r3.8x大型机器完成工作。

1 个答案:

答案 0 :(得分:1)

这是EMR,官方ASF Spark版本还是其他什么?

这里的一个问题是S3客户端倾向于将所有内容缓冲到磁盘上,然后才开始上传。

如果是ASF代码,您可以确保使用Hadoop 2.7.x,使用s3a://作为输出模式,并使用快速输出流选项,它可以执行增量写入得到生成。它在2.7中有点脆弱,在2.7中会更好。

如果您使用EMR,那么您就是自己的。

另一个可能的原因是S3限制客户端向S3的特定分片生成大量HTTPS请求,这意味着:S3存储桶的特定位,前5-8个字符显然确定了分片。如果你可以在那里使用非常独特的名字,那么你可能会受到更少的限制。