最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[MapReduce] MapReduce 提交作业常见问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-14 15:14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
今天在hadoop集群上跑MapReduce程序,遇到的一些问题和解决的方法,希望对大家有帮助!
1.从HDFS上传下载文件到
第一种错误:
[AppleScript] 纯文本查看 复制代码
<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就可以了。
第二种错误:


[AppleScript] 纯文本查看 复制代码
<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例子
第一种错误:
[AppleScript] 纯文本查看 复制代码
<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集群中
第二种错误:
[AppleScript] 纯文本查看 复制代码
<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上的文件
第三种错误:
[AppleScript] 纯文本查看 复制代码
<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的输出路径已存在,必须先删除掉那个文件
正确的运行结果:
[AppleScript] 纯文本查看 复制代码
<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>  


2.自己写的mapReduce程序
第一种错误:
[AppleScript] 纯文本查看 复制代码
<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插件中也是实现了的,我们这里就是要用代码实现插件的功能。
第二种错误:
[AppleScript] 纯文本查看 复制代码
<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的个数。



楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-24 14:33

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表