我对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提交一个步骤,而忽略了它。这样做最简单的方法是什么?是否可以在不使用Java编写整个推荐应用程序的情况下将其作为Hadoop的JAR步骤提交?

------更新04/10/2016 ------

深入研究之后,最简单的选择(至少对我来说)是在EMR集群上使用以下参数进行“自定义JAR”作业:
  • 名称:任意步骤名称
  • JAR位置:/usr/lib/mahout/mahout-mr-0.12.2-job.jar
  • 参数:
    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/
    
  • 对失败采取的措施-继续。

  • 显然,您也可以通过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的其他临时目录。或者,您可以在提交新目录之前手动删除由上一个作业创建的临时目录。

    最佳答案

    最简单的方法是使用EMR数据管道模板,这对于自动化来说非常有用。

    关于hadoop - 自动化标准Mahout推荐器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38664208/

    10-13 02:25