Amazon Elastic Map Reduce使用Apache Mahout计算建议
Apache Mahout是一個“可擴展的機器學習庫”,其中包含各種單節(jié)點和分布式推薦算法的實現(xiàn)。 在我的上一篇博客文章中, 我描述了如何在單個節(jié)點上實現(xiàn)在線推薦系統(tǒng)來處理數(shù)據。 如果數(shù)據太大而無法放入內存(> 100M首選項數(shù)據點)怎么辦? 然后我們別無選擇,只能看一下Mahout的分布式推薦器實現(xiàn)!
分布式推薦器基于Apache Hadoop。 這是一項需要輸入用戶偏好列表,計算項目共現(xiàn)矩陣并為每個用戶輸出前K個建議的工作。 有關此博客如何工作以及如何在本地運行的介紹性博客,請參見此博客文章 。
我們當然可以在自定義的Hadoop群集上運行此作業(yè),但是僅使用預先配置的作業(yè)(如EMR)會更快(且痛苦更少)。 但是,有一個小問題。 EMR上可用的最新Hadoop版本是1.0.3,其中包含Apache Lucene 2.9.4的jar。 但是,推薦器作業(yè)取決于Lucene 4.3.0,這將導致以下漂亮的堆棧跟蹤:
2013-10-04 11:05:03,921 FATAL org.apache.hadoop.mapred.Child (main): Error running child : java.lang.NoSuchMethodError: org.apache.lucene.util.PriorityQueue.<init>(I)Vat org.apache.mahout.math.hadoop.similarity.cooccurrence.TopElementsQueue.<init>(TopElementsQueue.java:33)at org.apache.mahout.math.hadoop.similarity.cooccurrence.RowSimilarityJob$UnsymmetrifyMapper. map(RowSimilarityJob.java:405)at org.apache.mahout.math.hadoop.similarity.cooccurrence.RowSimilarityJob$UnsymmetrifyMapper. map(RowSimilarityJob.java:389)at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:771)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:375)at org.apache.hadoop.mapred.Child$4.run(Child.java:255)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)at org.apache.hadoop.mapred.Child.main(Child.java:249)如何解決呢? 好吧,我們“只是”需要在EMR Hadoop安裝中更新Lucene。 我們可以為此使用引導操作 。 具體步驟如下:
該腳本將在Hadoop節(jié)點上運行,并將更新Lucene版本。 確保更改腳本并輸入正確的存儲桶名稱和存儲桶路徑,以使其指向公共Lucene存檔。
這也是指定S3上輸入數(shù)據的位置以及應將輸出寫入何處的地方。
- 內存密集型配置(否則您會很快看到一個OOM)
- 我們的自定義update-lucene操作(路徑應指向S3,例如s3://bucket_name/bucket_path/update-lucene.sh )
就是這樣! 現(xiàn)在,您可以創(chuàng)建并運行作業(yè)流程,在幾分鐘/幾小時/幾天之后,您將在S3上等待結果。
翻譯自: https://www.javacodegeeks.com/2013/10/amazon-elastic-map-reduce-to-compute-recommendations-with-apache-mahout.html
總結
以上是生活随笔為你收集整理的Amazon Elastic Map Reduce使用Apache Mahout计算建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是期货高频交易?
- 下一篇: 用Java递增Map值的最有效方法–仅搜