环境:
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. jsp中的c标签

    核心标签库 引用: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> ...

  2. node.js动态调试

    supervisor node ./bin/www npm start 不会动态运行和调试程序,相当于动态部署

  3. 手动导出Excel及Excel导出原理探究

    前言:不知道大家有没碰到过,官方大型网站(例如中国移动)上很多地方查询列表是不提供数据导出的,而且界面上的筛选也无法满足我们的需求. 这时候我就想,如果能导出成Excel并借助自带的数据筛选方便多了. ...

  4. android handler机制简单介绍

    我们需要了解4个类: handler:处理者,用于发送和接收信息 massage:消息.里面可以存储消息的许多信息 looper:循环泵,用于循环取出消息队列中的消息 MessageQueue(一般不 ...

  5. jquery val() and text().

    .val() works on input elements (or any element with a value attribute?) and .text() will not work on ...

  6. Xcode7 通过 Single View Application 得到一个 Empty Application 工程

    方法: 创建一个 Empty Application 工程 下面还是详细的说一下通过一个 Single View Application 工程得到一个 Empty Application 工程的方法: ...

  7. 认识CSS样式

    CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小.颜色.字体加粗等. 如下列代码: p{ font-size: ...

  8. Swift - 27 - 使用元组让函数返回多个值

    //: Playground - noun: a place where people can play import UIKit // 定义一个数组 var userScores:[Int]? = ...

  9. Eclipse代码注释模板修改

    /** * @ClassName: ${type_name} * @author: <font color="red"><b>ZF</b>< ...

  10. underscorejs-find学习

    2.5 find 2.5.1 语法: _.find(list, predicate, [context]) 2.5.2 说明: 对list集合的每个成员依次进行匹配(根据predicate迭代函数检测 ...