自动化标准Mahout推荐器

时间:2016-07-29 17:15:06

标签: hadoop aws-lambda amazon-emr mahout-recommender

我对Mahout / Hadoop环境很新,所以如果这个问题很简单,请道歉,但我还没有找到任何直截了当的答案。

有一个带Mahout的EMR集群,在那里我可以提交以下标准推荐人工作:

mahout recommenditembased --input s3a://input-bucket/ratings_small.csv 
--output s3a://output-bucket/out/ --numRecommendations 2 
--similarityClassname SIMILARITY_COSINE

一切都很好,但它需要我通过SSH连接到主节点。

现在我正在考虑自动执行此操作,以便专用的Lambda函数向EMR提交一个步骤并忘记它。这可能是最简单的方法吗?是否可以将其作为HARop的JAR步骤提交而无需在Java中编写整个推荐应用程序?

------更新时间04/10/2016 ------

经过一段时间的挖掘后,最简单的选择(至少对我来说)是一个" Custom JAR"使用以下参数在EMR集群上工作:

  1. 名称:任意步骤名称

  2. JAR位置:/usr/lib/mahout/mahout-mr-0.12.2-job.jar

  3. 参数:

    org.apache.mahout.cf.taste.hadoop.item.RecommenderJob 
    --input s3a://your-bucket/input/ 
    --output s3a://your-bucket/output/ 
    --similarityClassname SIMILARITY_EUCLIDEAN_DISTANCE 
    --tempDir temp/random_guid/
    
  4. 失败时采取行动 - 继续。

  5. 显然,您还可以通过AWS CLI或SDK以编程方式提交上述作业。

    注意:我在参数中使用--tempDir,因为每次执行推荐程序时,Mahout都会在HDFS中创建一个临时目录(默认情况下为temp/) 。但是,一旦计算完成,Mahout 就不会删除该目录。因此,如果您提交2个连续的推荐作业,则第二个将失败并出现类似于

    的错误
    Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory temp/preparePreferenceMatrix/itemIDIndex already exists 
    

    当我以编程方式提交推荐人工作时,我决定使用不同的临时目录和随机guid来完成每项工作。或者,您可以在提交新目录之前手动删除由上一个作业创建的临时目录。

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用EMR数据管道模板,这非常适合自动化。

答案 1 :(得分:0)

这取决于这个集群是否会保持一段时间? AWS Data Pipeline实际上是为单一用途群集而设计的。对于需要安排作业定期运行的长时间运行的集群来说,这并不能很好地解决这个问题。

如果您希望定期运行此功能,则可以考虑使用常规EMR群集,然后使用Oozie安排工作。在这里你需要创建一个包含所有Mahout内容的jar。

最后,如果您发现要缩小和扩展群集以用于更大和更小的作业,您可以使用调整大小工具,使您可以使用EMR群集,而不支持自动缩放开箱即用,看看这篇文章

http://www.lopakalogic.com/articles/hadoop-articles/dynamically-resize-emr/

源代码可在Github上找到,链接在文章中。