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

  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/cl1234/p/3544832.html
Copyright © 2011-2022 走看看