zoukankan      html  css  js  c++  java
  • MapReduce提交作业常见问题

    1.从HDFS上传下载文件到
    第一种错误:

    <SPAN style="FONT-SIZE: medium">Exception inthread"main"java.lang.IllegalArgumentException:    
      
    Wrong FS: hdfs://192.168.1.11:9000/usr/yujing/wordcount,    
      
    expected: hdfs://master:9000 </SPAN>  


    这个很多人都遇到过,不管是在ubuntu还是windows系统中,在连接集群的时候,不能直接使用hdfs://192.168.1.11:9000,要在hosts文件中添加192.168.1.11的映射,有人可能不知道windows下hosts文件在哪?C:\Windows\System32\drivers\etc\hosts(这个是隐藏文件你可以显示出来),在host文件中添加192.168.1.11 master就可以了。
    第二种错误:

    <SPAN style="FONT-SIZE: medium">org.apache.hadoop.ipc.RemoteException:    
      
    org.apache.hadoop.hdfs.server.namenode.SafeModeException:    
      
    Cannot create file/usr/yujing/wordcount. Name node is in    
      
    safe mode.   
    The ratio of reported blocks 0.0000 has not reached the    
      
    threshold 0.9990. Safe mode will be turned off    
      
    automatically.</SPAN>  

     
    这个错误出现的原因是client对集群中HDFS的操作没有权限
    解决办法:
    (1)在代码中加上一行代码
    conf.set("dfs.permissions","false");
    (2)在集群配置文件hdfs-site.xml
    property>
         <name>dfs.permissions</name>
        <value>false</value>
    </property>
    然后重启
    1.对于hadoop提供的wordcount例子
    第一种错误:

    <SPAN style="FONT-SIZE: medium">12/02/10 14:24:59 INFO ipc.Client: Retrying connect to    
      
    server: localhost/127.0.0.1:9000. Already tried 0 time(s).   
    12/02/10 14:25:01 INFO ipc.Client: Retrying connect to  </SPAN>  


    当你在代码中明明写的是集群的IP,但是它连接就是localhost,这是因为mapreduce默认连接的是localhost
    解决办法:
    conf.set("fs.default.name", "hdfs://master:9000");
    conf.set("hadoop.job.user", "yujing");
    conf.set("mapred.job.tracker", "master:9001");
    这样JobClient就会把Job任务提交到hadoop集群中
    第二种错误:

    <SPAN style="FONT-SIZE: medium">Exception in thread "main"    
      
    org.apache.hadoop.mapreduce.lib.input.InvalidInputException   
      
    : Input path does not exist:    
      
    hdfs://master:9000/user/yujing/D:/qq.txt</SPAN>  


    这种错误是因为向集群中提交job任务是文件的输入路径必须要是HDFS上的文件路径,输出路径也要是HDFS上的文件
    第三种错误:

    <SPAN style="FONT-SIZE: medium">2/02/10 14:52:36 WARN mapred.JobClient: No job jar file    
      
    set.  User classes may not be found. See JobConf(Class) or    
      
    JobConf#setJar(String).   
    12/02/10 14:52:36 INFO mapred.JobClient: Cleaning up the    
      
    staging area hdfs://master:9000/tmp/hadoop-   
      
    hadoop/mapred/staging/yujing/.staging/job_201202091335_0293</SPAN> 


    以上的错误是由于mapreduce的输出路径已存在,必须先删除掉那个文件
    正确的运行结果:

    <SPAN style="FONT-SIZE: medium">12/02/10 14:59:35 INFO input.FileInputFormat: Total input    
      
    paths to process : 1  
    12/02/10 14:59:35 INFO mapred.JobClient: Running job:    
      
    job_201202091335_0299   
    12/02/10 14:59:36 INFO mapred.JobClient:  map 0% reduce 0%   
    12/02/10 14:59:48 INFO mapred.JobClient:  map 100% reduce    
      
    0%   
    12/02/10 15:00:04 INFO mapred.JobClient:  map 100% reduce    
      
    100%   
    12/02/10 15:00:09 INFO mapred.JobClient: Job complete:    
      
    job_201202091335_0299   
    12/02/10 15:00:09 INFO mapred.JobClient: Counters: 25</SPAN>  
    
    12/02/10 14:59:35 INFO input.FileInputFormat: Total input 
    
    paths to process : 1
    12/02/10 14:59:35 INFO mapred.JobClient: Running job: 
    
    job_201202091335_0299
    12/02/10 14:59:36 INFO mapred.JobClient:  map 0% reduce 0%
    12/02/10 14:59:48 INFO mapred.JobClient:  map 100% reduce 
    
    0%
    12/02/10 15:00:04 INFO mapred.JobClient:  map 100% reduce 
    
    100%
    12/02/10 15:00:09 INFO mapred.JobClient: Job complete: 
    
    job_201202091335_0299
    12/02/10 15:00:09 INFO mapred.JobClient: Counters: 25 


    2.自己写的mapReduce程序
    第一种错误:

    <SPAN style="FONT-SIZE: medium">java.lang.RuntimeException:    
      
    java.lang.ClassNotFoundException: cn.hadoop.InvertedIndex   
      
    $InvertedIndexMapper   
        at org.apache.hadoop.conf.Configuration.getClass   
      
    (Configuration.java:866)   
        at    
      
    org.apache.hadoop.mapreduce.JobContext.getMapperClass   
      
    (JobContext.java:195)</SPAN>  


    第一种解决方法:
    这是由于及集群中没有我们提交的jar包,所以namenode不知道怎么执行我们的job任务,所以就会报空指针异常错误,所以要自己打jar提交给集群。
    解决方法: 所以先给自己的程序打成jar包,然后放到工程的根目录下,然后在代码中添加JobConf conf=new JobConf
    ();conf.setJar("pr.jar");这样就可以了,这个错误困扰了我们很久。
    第二种解决方法:
    使用eclipse插件解决,有很多人刚刚开始的时候使用插件老是会出不来想要的结果,这个可能和eclipse或者是插件包的版本有关,有的版本的eclipse不兼容hadoop插件,还有就是hadoop-eclipse-plugin-0.20.203.0.jar的插件里面少了一些包,要自己进行手动修改,这个网上又怎么修改的方法,关于在eclipse安装插件就是要多试试就可以了,当插件完成后,然后点击run hadoop,插件内部会打包你的程序提交到集群上。


    第三种解决方法:
    自己在程序中打包自己的mapreduce程序,然后提交job任务,这方面这部分代码在eclipse插件中也是实现了的,我们这里就是要用代码实现插件的功能。
    第二种错误:
     

    <SPAN style="FONT-SIZE: medium">2/02/10 14:59:35 INFO input.FileInputFormat: Total input    
      
    paths to process : 1  
    12/02/10 14:59:35 INFO mapred.JobClient: Running job:    
      
    job_201202091335_0299   
    12/02/10 14:59:36 INFO mapred.JobClient:  map 0% reduce 0%   
    12/02/10 14:59:48 INFO mapred.JobClient:  map 100% reduce  
    0%</SPAN>  


    这种错误出现的原因是mapreduce默认的reduce个数是1个,所以如果当map的个数很大时,reduce过程迟迟不会进行,解决方法是在代码中添加job.setNumReduceTasks(4);设置reduced的个数。

    转自:http://yu06206.iteye.com/blog/1402084

  • 相关阅读:
    一些tips
    微信小程序之后端处理
    微信小程序之前端代码篇
    微信小程序踩坑之前端问题处理篇
    Vue组件封装之一键复制文本到剪贴板
    读别人的代码之bug的发现
    解析webpack插件html-webpack-plugin
    数组去重方法整理
    如何理解EventLoop--浏览器篇
    axios和vue-axios的关系
  • 原文地址:https://www.cnblogs.com/94julia/p/3023017.html
Copyright © 2011-2022 走看看