一、版本对比

公司版Mahout

  • 由于Mahout只能允许于hadoop0.20以上版本上,而百度的hadoop是hadoop0.19的一个分支。因此百度HPC组曾经将Mahout移植到百度的hadoop集群。
  • Mahout上古版本,只有itembased一种算法,且只能用于百度版hadoop。

开源Mahout

  • 运行于开源hadoop集群。
  • 建议Mahout0.8版本,支持多种算法。

二、安装、使用

1. 下载开源mahout

http://archive.apache.org/dist/mahout/

推荐用mahout 0.8版本

2. 配置

解压缩后编辑mahout-distribution-0.8/bin/mahout文件

HADOOP_CONF_DIR='/home/work/hadoop-opensource/conf

HADOOP_HOME='/home/work/hadoop-opensource'

3. 运行命令

sh mahout-distribution-0.8/bin/mahout

返回结果是参数说明,按照你的需求配置参数即可。

示例代码

date=$1
cd /home/work/mahout/mahout-distribution-0.8
sh bin/mahout hadoop fs -rmr /user/rp-rd/yitengfei/site-rec/cf/$1/temp/
sh bin/mahout recommenditembased \
-Dmapred.map.tasks=700 \
-Dmapred.reduce.tasks=700 \
-Dmapred.map.capacity=700 \
-Dmapred.reduce.capacity=700 \
-Dmapred.child.java.opts=-Xms4096m \
-Dmapred.reduce.child.java.opts=-Xms4096m \
--input /user/rp-rd/yitengfei/site-rec/data_item_id/$1 \
--output /user/rp-rd/yitengfei/site-rec/cf/$1/output \
--tempDir /user/rp-rd/yitengfei/site-rec/cf/$1/temp \
--similarityClassname SIMILARITY_COOCCURRENCE \
--numRecommendations 100
exit 0

三、踩过的坑

1. id只支持[0, 2^32-1]的正整数

mahout的输入userid、itemid是long型的,但内部会将id转成int型。所以只支持的32位无符号int的范围,即取值范围[0, 2^32-1]的数。

所以如果id类型是baiduid、cuid、url的话,需要先将id做32位签名。

2. OutOfMemoryError 内存不足错误

原因是:mahout在计算协同矩阵前有一轮job countObservations,它使用一个reduce统计用户数量,而且是用HashMap存储,导致数据量稍大,内存就超限。

但是在后续的计算中countObservations数据并没有使用到,这是一轮无用且导致致命错误的任务。

解决办法是使用mahout0.8,此坑只在mahout0.9中出现。

3. 另一种OutOfMemoryError 内存不足错误

即使在mahout0.8,也存在一些使用内存存储hashmap的情况,导致数据量大时oom

recommenditembased和itemsimilarity的第四轮job normsAndTranspose,map阶段分别用hashmap存储了每个item的norm、nonZeroEntries(非0评分用户数)、maxValues(最大pref)。

输入数据200G,item数3500万,oom。

解决办法只能是调大内存、调大map数。

Mahout踩坑之路的更多相关文章

  1. html2canvas的踩坑之路

    html2canvas的踩坑之路 前言 早有耳闻这个html2canvas比较坑,但无奈于产品需求的压迫,必须实现html转图片的功能,自此走上了填坑之路,好在最后的效果还算令人满意,这才没有误了产品 ...

  2. MySQL Connector/NET 使用小结(踩坑之路)

    背景描述 根据项目的需要,需连接MySQL获取数据. 首先,先了解一下项目的情况: 之前的代码是C#编写的的, 运行时:.NETFramework3.5. 由于项目已经部署上线,因此不能升级运行时,这 ...

  3. Android 上传开源项目到 jcenter 实战踩坑之路

    本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...

  4. Java踩坑之路

    陆陆续续学Java也快一年多了,从开始的一窍不通到现在的初窥门径,我努力过,迷茫过,痛过,乐过,反思过,沉淀过.趁着新年,我希望能把这些东西记下来,就当是我一路走来的脚印. 一.初识网站应用 记得第一 ...

  5. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

  6. jQuery升级踩坑之路

    1.使用了被废弃的jQuery.browser属性 jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更 ...

  7. webpack踩坑之路——构建基本的React+ES6项目

    转自:http://www.cnblogs.com/ghost-xyx/p/5483464.html webpack是最近比较火的构建工具,搭配上同样比较火的ReacJS与ES6(ES2015)一定是 ...

  8. webpack踩坑之路——图片的路径与打包

    转自:http://www.cnblogs.com/ghost-xyx/p/5812902.html 刚开始用webpack的同学很容易掉进图片打包这个坑里,比如打包出来的图片地址不对或者有的图片并不 ...

  9. 踩坑之路_"var name = ' ';"_迷之BUG

    情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达 ...

随机推荐

  1. Biba模型简介

    上周上信息安全的课,老师留了个Biba模型的作业.自己看书了解了一下,记录如下. 参考资料:石文昌<信息系统安全概论第2版> ISBN:978-7-121-22143-9 Biba模型是毕 ...

  2. 李洪强漫谈iOS开发[C语言-037]-if else 语句

    李洪强漫谈iOS开发[C语言-037]-if else 语句

  3. STL函数模板(即算法)一览

    查找算法 adjacent_find:找出一个串中第一个不符合次序的地方 find,find_if:找出第一个符合条件的元素 find_first_of:在一个串中寻找第一个与另一个串中任意一个元素相 ...

  4. java socket知识点

    3.用线程池实现TCP服务器端时,首先创建一个ServerSocket实例,然后创建N个线程,每个线程反复循环,从(共享的)ServerSocket实例接收客户端连接.当多个线程同时调用一个Serve ...

  5. 英特尔Intel

    公司名称 英特尔(集成电路公司)Intel Corporation(Integrated Electronics Corporation) 英特尔公司是全球最大的半导体芯片制造商,它成立于1968年, ...

  6. linux快速修改文件夹及文件下所有文件与文件夹权限

    分两部分改属主和权限: 更改权限,递归方式 chmod -R 755 /var/www/html/test.com 更改属主,递归 chown -R apache:apache /var/www/ht ...

  7. ubuntu 映射网络驱动器到本地

    公司办公都是在ubuntu服务器上,所以每每拷贝修改文件都要ftp之类的,实在不方便. 索性将服务器挂载到自己本地目录下. 服务器端参考其他samba安装和配置.这里只是说下本地自动挂载方法. 一.首 ...

  8. android bitmap out of memory总结、心得

    setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,这些函数在完成decode后,最终都是通过java层的creat ...

  9. 【Todo】【转载】ES6的学习记录

    粗略看了一遍React的内容,然后看了 ES6 的入门文章: http://es6.ruanyifeng.com/#docs/intro 通过这个链接可以查看浏览器对 ES6 的支持程度: http: ...

  10. 【Todo】JS跨域访问问题的解决

    做双十一,需要在主会场页面,嵌入我们产品的JS豆腐块.而这个豆腐块需要调用我们后端的数据接口,涉及跨域访问. 参考 http://www.cnblogs.com/2050/p/3191744.html ...