zoukankan      html  css  js  c++  java
  • hadoop下跑mapreduce程序报错

    mapreduce真的是门学问,遇到的问题逼着我把它从MRv1摸索到MRv2,从年前就牵挂在心里,连过年回家的旅途上都是心情凝重,今天终于在eclipse控制台看到了job completed successfully,当时的兴奋难以形容,都有些不敢相信自己的眼睛,压抑住激动的心情再试了一遍,特么真的跑通了,喜极而泣。 

    总结起来就是两处 

    1.报错Class not found 或者 No job jar file set 

    这是由于及集群中没有我们提交的jar包,所以namenode不知道怎么执行我们的job任务,所以就会报空指针异常错误,所以要自己打jar提交给集群。

    解决方法: 所以先给自己的mapreduce程序打成jar包,然后放到工程的根目录下,然后在代码中添加JobConf conf=new JobConf();conf.setJar("hope.jar");这样就可以了。

    引用参考资料4里面的解释:

    虽然网上各种说是job.setJarByClass("WordCount.class")既可以解决,但实际上job.setJarByClass(WordCountTest.class)这个语句设置作业Jar包并没有成功。这是为什么呢?因为这个方法使用了WordCount.class的类加载器来寻找包含该类的Jar包,然后设置该Jar包为作业所用的Jar包。但是我们的作业 Jar包是在程序运行时才打包的,而WordCount.class的类加载器是AppClassLoader,运行后我们无法改变它的搜索路径,所以使用setJarByClass是无法设置作业Jar包的。我们必须使用JobConf里的setJar来直接设置作业Jar包。 

    2.cannot init cluster,无法启动集群

     由于我们环境用的是CDH4.5.0所以包含了MRv1和MRv2,而我程序用的是MRv2的写法,MRv2引入Resource Manager就没有了job tracker的概念,所以在mapred-site.xml的文件里把如下配置注释掉 

    <property>

      <name>mapred.job.tracker</name>

      <value>master:8021</value>

    </property>

    <property>

      <name>mapred.job.tracker.http.address</name>

      <value>0.0.0.0:50030</value>

    </property> 

    如果你的程序没有问题,基本你就要从MRv1和MRv2的区别上入手去解决问题了,由于本人技术水平有限,还是个菜鸟,虽然二者的区别,理论我学习了很多,可是实际中eclipse一跑起来,我还真不知道到底能从哪里看出来当前跑的环境是1还是2。本人程序是继承新接口的MRv2,所以在mapred-site.xml的文件里添加如下配置 

    <property>

      <name>mapreduce.framework.name</name>

      <value>yarn</value>

    </property> 

    设置mapreduce程序跑在Yarn上。

    此时不仅Mapreduce程序能跑,sqoop程序也能跑了,欢喜之至。

    sqoop程序当时报错,cannot  init cluster

    如果你也遇到这样的问题,请查看你的mapreduce跑的框架配置。 

    3.上面搞完了之后mapreduce倒是能跑了,但是之前好好的hive不能跑了,shell下hive语句都还能正常执行,但是java程序里面的hive调用就不能跑了。

    修改hive/conf下hive-site.xml文件,在底部添加如下内容: 

      <property>

        <name>hive.aux.jars.path</name><value>file:///opt/cloudera/parcels/CDH/lib/hive/lib/hive-hbase-handler-0.10.0-cdh4.5.0.jar,file:///opt/cloudera/parcels/CDH/lib/hbase/hbase-0.94.6-cdh4.5.0-security.jar,file:///opt/cloudera/parcels/CDH/lib/zookeeper/zookeeper-3.4.5-cdh4.5.0.jar</value>

      </property> 

    此处切记, <value> </value>中间的内容一定不能加换行或者空格,就因为犯此弱智问题,在<value>后,</value>前手欠加了换行,就报找不到jar包的问题,还以为我把hive环境搞坏了,害我苦苦查找了两天。 

    参考资料: 

    1. 新旧hadoop MapReduce实例解析  http://blog.csdn.net/liuxiaochen123/article/details/8786715

    2. ClassNotFoundException: Job$Mapper问题及解决  http://hi.baidu.com/yangls06/item/a17251b6a447d77f244b0928

    3. MapReduce提交作业常见问题 http://yu06206.iteye.com/blog/1402084

    4. Hadoop作业提交分析(五)http://www.cnblogs.com/spork/archive/2010/04/21/1717592.html

  • 相关阅读:
    Java 日期时间类
    JavaMail
    PHP连接 SQLSERVER 注意事项(经典中的经典)
    Spring 依赖注入的 几种方式
    ms sql 备份指令
    Struts2 日期类型编辑器 和 struts.xml 的存放路径
    如何将二维数组作为函数的参数传递
    gcc编译
    关于fflush(stdin)的使用与scanf输入缓冲区的问题
    LINUX socket 连接的几个问题
  • 原文地址:https://www.cnblogs.com/cl1234/p/3544832.html
Copyright © 2011-2022 走看看