前一段时间,终于抽出了点时间,在自己本地机器上尝试搭建完全分布式Hadoop集群环境,也是借助网络上虾皮的Hadoop开发指南系列书籍一步步搭建起来的,在这里仅代表hadoop初学者向虾皮表示衷心的感谢,他总结的系列文档确实帮我们扫除了很多hadoop环境搭建过程中的障碍。
自己不班门弄斧,就自己在搭建和调试过程中遇到的问题给出方案,希望以后的伙伴少走一点弯路,下面就搭建过程中遇到的几个问题给出总结:
说明: 本次搭建hadoop集群环境时,本人使用的是hadoop-2.2.0版本,目前Apache官网最新的版本是hadoop-2.6.2版本,服务器Linux环境是CentOS-6.4版本
1、首先说明下2.2版本的文件组成结构如下:
这个结构和1.0版本是存在差异的,不要为找不到conf目录而苦恼,都在etc目录下
2、中间1台Master和3台Slaver结点环境的构建和配置请参考:http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html,这里很详细。
3、环境搭建以后,通过./start-all.sh命令启动集群失败,很大一个原因就是服务器防火墙未关闭的原因,这时可以通过service iptables stop来关闭4台机器
上的防火墙。然后再重试启动
4、在本地windows环境下通过eclipse连接hadoop,需要注意2点:
第一点:下载或者自己编译hadoop-eclipse-plugin-1.0.0.jar文件,这一步很关键,是决定你本地eclipse能否连接hadoop的关键,这里网络上版本和方法
很多,我这里提供:http://pan.baidu.com/s/1qW279Fm可以下载。
第二点:在eclipse中指定本地hadoop的安装目录时,一定要指定到hadoop-core-1.*.jar所在的目录,而不是像虾皮文件中说的hadoop/下,主要原因是
不同hadoop版本中jar文件存放路径不同,如下:
请对照文章中第一张图的文字注释看,然后直接下一步就OK了。
5、按照虾皮文档运行第一个WordCount实例的时候,很多人在服务器上是成功的,但是在本地却一直在抛classNotFound的错误,我当初也很郁闷,
我本地的jar文件和类文件都在啊,为什么会找不到呢?
关于这个问题,网络上很多说法,但是都怎么靠谱,我找了很多资料,最后是通过下面的方式解决的,
下面这个是报错的时候我在main方法中的写法:
注意这里的写法,实际指定的是hdfs的主机地址,但是这里就是找不到类,改为下面的写法就OK了,至少不报classNotFound的错误了,
然后,可能有的伙伴又会遇到Exception in thread "main" java.io.IOException: Failed to set permissions of path: /tmp/hadoop-Administrator/mapred/staging/Administrator-4954228/.staging to 0700这样的错误,这个错误很简单,也很清楚,就是说没有操作文件的权限,这个是
windows环境下会出的一个问题,在linux上是不存在的,解决办法就是:修改/hadoop-1.0.2/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue方法,直接将该方法体注释掉,然后重新编译jar包,导入项目即可,这个地址可以直接下载到编译好的jar文件:http://download.csdn.net/detail/java2000_wl/4326323,
完成上面的所有步骤以后,应该就OK了。
正如虾皮博文所说的,这只是万里长征的第一步,搭建环境很简单,但也是最考验人的地方,希望有用到的伙伴参考。