zoukankan      html  css  js  c++  java
  • MaxTemperature程序Mapper ClassNotFoundException

    错误: 执行hadoop权威指南上MaxTemperature程序出现Mapper类ClassNotFoundException异常:

    解决: 将书上的

    JobConf job = new JobConf(MaxTemperature.class) ;
    改为:
    JobConf job = new JobConf() ;
    
    job.setJar("/root/hadoop-resources/code/maxtemperature.jar");

    下面是我解决过程:

    郁闷一天了,明明照着书(hadoop权威指南)上写的,但是在执行hadoop MaxTemperature 时总是出现Mapper类找不到。

    发现可能是环境变量的问题。于是在/etc/profile中配置hadoop环境变量:

    export hadoop_HOME="/usr/hadoop"
    for f in $hadoop_HOME/hadoop-*.jar; do
    HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f
    done
    for f in $hadoop_HOME/lib/*.jar;do
    HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f
    done
    export HADOOP_CLASSPATH=".$HADOOP_CLASSPATH"

    执行,错误仍然存在。

    然后发现网上说是需要打包,我认为应该不需要打包的,书上都没有到打包,我用的hadoop版本和他用的是一样的。但是首先解决问题吧,于是退而求其次。

    将生成的class文件打包为jar:

    jar -cvf classes/*.class

    然后使用:

    hadoop jar maxtemperature.jar Maxtemperature input/sample.txt output

    执行命令,发现错误依旧。

    然后发现网上别人的程序执行就正常了,发现他的jar是放在hadoop安装目录的bin下的。于是我充满疑问的将我的jar复制到bin下,然后执行,好了~~~!!!!

    所以这是一种解决方案,将jar复制到hadoop下就可以正常运行了。

    但这种方案实在太死板了,最后又在stackoverflow上找到一种方法,书上的示例代码写的是

    JobConf job = new JobConf(MaxTemperature.class) ;

    改为:

    JobConf job = new JobConf() ;
    
    job.setJar("/root/hadoop-resources/code/maxtemperature.jar");

    然后打包,运行,不算完美的解决~~~~

  • 相关阅读:
    SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)
    服务注册与发现Nacos
    Nacos配置管理
    Spring Cloud Stream
    MySQL查询优化explain
    索引
    MySQL架构
    mysql事务、视图
    多表查询
    分布式为什么使用python
  • 原文地址:https://www.cnblogs.com/caiyao/p/5137444.html
Copyright © 2011-2022 走看看