Windows下运行MapReduce程序处理集群中hdfs数据所踩到的坑

前言

遇到了很多坑,一步一步百度和谷歌解决了。其实还是对原理不太了解导致的。

步骤

步骤网上有很多,例如
https://my.oschina.net/u/999578/blog/180343

遇到的问题及解决方案

有些错误具体报错信息找不到了,只记得一些解决方案了

Exception in thread "main" java.net.ConnectException: Call From yitechWin7/192.168.1.130 to 192.168.1.129:8020 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

将主节点上core-site.xml中原来的端口9000改为8020

后来遇到许多切片,块分配的问题,网上也没有解答。后来才发现,把所有节点的core-site.xml上的端口都改为8020

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory /wc/output/_temporary/0. Name node is in safe mode.
The reported blocks 3 has reached the threshold 0.9990 of total blocks 3. The number of live datanodes 2 has reached the minimum number 0. In safe mode extension. Safe mode will be turned off automatically in 12 seconds.

只是由于当前namenode处于安全模式导致的,等一段时间或者关闭namenode安全模式即可。关闭namenode安全模式命令如下:

hadoop dfsadmin -safemode leave

(1)

Could not locate executable null\bin\winutils.exe in the Hadoop binaries.  ...

将hadoop.dll、winutils.exe放到win下hadoop的bin目录下,hadoop.dll放到C:\Windows\System32目录下。

(2)

然而并没有解决,还是报同样的错误,经过折腾发现可能是由于windows下的环境变量没有配好。

HADOOP_HOME:
C:\hadoop-2.6.0
PATH追加:
%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin\winntils.exe

如果没有生效,重启即可。如果不想重启的话,可以在代码中添加:

System.setProperty("hadoop.home.dir", "C:\\hadoop-2.6.0");

(3)

但是后来还是出现了很奇怪的问题,后来得知,是hadoop.dll和hadoop的版本不一致导致的。2.4.0版本前后所用到的hadoop.dll版本不一样,下载的使用需要注意。

hadoop2.6(x64)V0.2 可以在我的CSDN资源页下载: http://download.csdn.net/download/yangzheng0515/9981734

报关于log4j.properties的错误,或者控制台没有任何信息。

将CentOS下hadoop配置文件目录下的log4j.properties 复制到win下MR项目的src目录下即可。当然core-site.xml和hdfs-site.xml也要放入src目录下。

报错信息:

Unable to initialize MapOutputCollector org.apache.hadoop.mapred.MapTask$MapOutputBuffer

这里写图片描述
我是对map的输出key类型仅仅实现了Writable,而没有实现comparable. 由上图可知,会进行shuffle阶段对key进行分类,相同的key,会把value收集在一起,就是reduce 的Iterable value.
解决办法: 需要map阶段输出的key类型实现 compareTo. 如果只进行序列化是可以仅仅实现Writable接口 write(),readFile的map到reduce时存在shuffle,若作为key,则需要实现WritableComparable.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值