环境:
hadoop-2.5.0-cdh5.2.0
mahout-0.9-cdh5.2.0

步骤:
基本思路是,将mahout下的全部jar包都引入hadoop的classpath就可以,所以改动了$HADOOP_HOME/etc/hadoop/hadoop-env.sh,加入例如以下代码将mahout的全部jar包引入hadoop的classpath:
for b in $MAHOUT_HOME/lib/*.jar; do
  if [ "$HADOOP_CLASSPATH" ]; then
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$b
  else
    export HADOOP_CLASSPATH=$b
  fi
done

for c in $MAHOUT_HOME/*.jar; do
  if [ "$HADOOP_CLASSPATH" ]; then
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$c
  else
    export HADOOP_CLASSPATH=$c
  fi
done

加入完代码,准备好基础数据,上传好jar包后,运行命令:
hadoop jar gul-itemcf-hadoop.jar ItemCFHadoop

注意:
该jar包没有包括全部的依赖包,仅包括了mapreduce类。
用maven添加全部依赖包的做法会导致终于的jar包十分臃肿,这种做法是十分不优雅的,而且会添加网络和内存的负担。所以放弃。


遇到问题
顺利完毕第一个job的运行,从第二个job開始,先抛出例如以下异常
Error: java.lang.ClassNotFoundException: org.apache.mahout.math.Vector
然后抛出例如以下异常
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /RecommenderSystem/                               JiLinSMEPSP/RecommenderEngine/Service/GuessULike/tmp/1414042683946/preparePreferenceMatrix/numUser                              
s.bin

看到第一条错误相信大家都明确,这是hadoop没有识别到第三方(mahout)依赖jar包的问题。

解决思路
首先能确定,向$HADOOP_HOME/etc/hadoop/hadoop-env.sh中加入HADOOP_CLASSPATH的方法是好使的,由于去掉最開始加入的语句后。连mahout的cf相关class都识别不到,可是,为什么仅仅识别了一部分呢?难道是冲突?
随后,我也饶了一些弯路,參照网上众多大神的招数,比方将jar包拷到$HADOOP_HOME/lib,但全部招数都不好使,最后思路还是回到“包冲突”思路上来。


终极解决方式
通过对照$MAHOUT_HOME下的几个jar包得知。mahout-core-0.9-cdh5.2.0-job.jar包括了全部运行job须要用到的class。而且和mahout-math-0.9-cdh5.2.0.jar都反复包括了org.apache.mahout.math.Vector,看来就是冲突导致的不识别该class,所以。终极解决方式非常easy,$HADOOP_HOME/etc/hadoop/hadoop-env.sh中引入一个jar包就可以
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$MAHOUT_HOME/mahout-core-0.9-cdh5.2.0-job.jar

然后,程序成功运行,世界一片光明!

【甘道夫】怎样在cdh5.2上执行mahout的itemcf on hadoop的更多相关文章

  1. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具

    目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.z ...

  2. 【甘道夫】MapReduce实现矩阵乘法--实现代码

    之前写了一篇分析MapReduce实现矩阵乘法算法的文章: [甘道夫]Mapreduce实现矩阵乘法的算法思路 为了让大家更直观的了解程序运行,今天编写了实现代码供大家參考. 编程环境: java v ...

  3. 【甘道夫】基于Mahout0.9+CDH5.2执行分布式ItemCF推荐算法

    环境: hadoop-2.5.0-cdh5.2.0 mahout-0.9-cdh5.2.0 引言 尽管Mahout已经宣布不再继续基于Mapreduce开发,迁移到Spark.可是实际面临的情况是公司 ...

  4. 【甘道夫】CDH5.2的Maven依赖

    之前一直结合Maven开发Hadoop2.2.0的程序.环境换成CDH5.2后报错,发现是Maven依赖库的问题. 之前一直使用 http://mvnrepository.com/ 查找maven依赖 ...

  5. 【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】

    介绍 之前具体写了一篇HBase过滤器的文章.今天把基础的表和数据相关操作补上. 本文档參考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 全部代码均基于& ...

  6. 【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制

    前言 HDFS为管理员提供了针对文件夹的配额控制特性,能够控制名称配额(指定文件夹下的文件&文件夹总数),或者空间配额(占用磁盘空间的上限). 本文探究了HDFS的配额控制特性,记录了各类配额 ...

  7. 【甘道夫】Hive 0.13.1 on Hadoop2.2.0 + Oracle10g部署详细解释

    环境: hadoop2.2.0 hive0.13.1 Ubuntu 14.04 LTS java version "1.7.0_60" Oracle10g ***欢迎转载.请注明来 ...

  8. 【甘道夫】HBase连接池 -- HTablePool是Deprecated之后

    说明: 近期两天在调研HBase的连接池,有了一些收获,特此记录下来. 本文先将官方文档(http://hbase.apache.org/book.html)9.3.1.1节翻译,方便大家阅读,然后查 ...

  9. 【甘道夫】Ubuntu群集配置 - 免费登陆

    引言 这是几年前写的文章,但一直以来该问题被反复问到.所以我决定将它又一次搬上屏幕. 正文 三个节点:masternode    slavenode1   slavenode2 第一步:全部节点分别生 ...

随机推荐

  1. 新建android系统服务

    一.Android系统服务 Android提供了很多系统服务:如ActivityManger,PowerManger,WindowManger,WifiManger等等. 这些服务都是系统启动开始就一 ...

  2. 第10章 PHP异常处理

    1. 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行. 既然抛出异常会中断程序执行,那么 ...

  3. 跳转到QQ聊天界面和QQ群界面

    // uin=2977046873为QQ号 NSString *urlString = @"mqq://im/chat?chat_type=wpa&uin=2977046873&am ...

  4. [500lines]500行代码写web server

    项目地址:https://github.com/aosabook/500lines/tree/master/web-server.作者是来自Mozilla的Greg Wilson.项目是用py2写成. ...

  5. 利用js加载本地图片预览功能

    直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...

  6. JQuery语法总结和注意事项

    1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...

  7. jquery选择器专题

    $(“p”).addClass(css中定义的样式类型); 给某个元素添加样式$(“img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值 ...

  8. .NET,你真的 知道了吗

    搞清自己是干什么的 有人问你是做什么的,回答是:"我是做,NET开发的",有的人也会问:"那.NER.是什么?"刚开始我认为是一个开打工具,后认为是一个平台,一 ...

  9. 9 Palindrome Number(判断是否为回文数Easy)

    题目意思:判断是否为回文数,不许使用额外空间 ps:一直不理解额外空间的意思,int能用吗 思路:1.比较头尾 2.翻转,越界问题需考虑 class Solution { public: bool i ...

  10. 解决WebService本地访问正常,远程无法访问的问题

    发布webservice后部署到自己的服务器上,然后本机,外网远程访问都没事,在用户服务器上部署后只能本机访问,远端访问不了,通过网络搜索到下面方法,但改后仍然不行.原来在自己服务器部署时是在默认网站 ...