【Hadoop】安装与配置Hadoop2.6

于是,Hadoop,终于还是到来了

本文是2015年清明节放假期间安装配置Hadoop的总结,犯了很多错,跳了很多坑,最终Hadoop还是跑起来了。谨以此记。

准备工作:

VM :VMWare 9  【链接暂缺】

OS:CentOS 6.4  【链接暂缺】

JDK :jdk7  64位,Linux  【链接:http://pan.baidu.com/s/1jGGds3c 密码:iamf】

Eclipse :eclipse-luna 64位,Linux【 链接:http://pan.baidu.com/s/1mgN0Jqg 密码:jymw】

Hadoop :hadoop2.6 【链接:http://pan.baidu.com/s/1pJoOIDX 密码:uwdb】

Hadoop For Eclipse 插件:【链接:http://pan.baidu.com/s/1c0iz8Xy 密码:mxjh】

以上,就够了。建议都下载下来,这是必须的。然后……下面还会出现很多很多下载链接,见证了我一次次的犯错和跳坑,有兴趣的也可以下载。

正文开始

1、VM和OS

我一直选用的是虚拟机VMWare 9+ CentOS 6.4 来做有关Linux的操作与练习,Hadoop也不例外。关于VM与系统的安装我不想多讲,感兴趣的可以查看很久以前写过的博客 VMWare安装CentOS ,我想说的是:初学者,建议用虚拟机方式开发,这是为了避免犯的错误不能补救——系统坏了以后直接删除就好了,我当时弄MongoDB的时候就重新弄了3次;但是,如果你有Linux经验,强烈建议用Linux系统去做Linux相关开发!双系统咯!虽然我机子上有Ubuntu,但我还是没有贸然使用Ubuntu(后面你就会发现这是一个多么明智的选择!)。OK,你现在有了Linux环境了。

2、安装JDK

以前一直在用jdk6,有一段时间用过 jdk8【链接:http://pan.baidu.com/s/1pJ7fBir 密码:04iy】 ,但是也不知道为什么这次就鬼使神差的用了 jdk7,,然后发现我在官网上下载的 hadoop 2.6.0 也正好推荐使用 jdk7,那么就来安装吧。linux下面安装软件,我总结出来一个过程,那就是:【解压->移动到某一个位置->配置环境变量->测试安装信息->OK】这个规律对安装 jdk 、eclipse以及Maven都适用(后面会介绍到)。

现在遇到了第一个问题:如何把自己现在电脑上的文件复制到虚拟机中去?

解决方式:

看到了吧,点击那个Reinstall VMware Tools 以后你的桌面会出现一个文件夹,看到以后就可以做一件神奇的事情了:选中你在Win下面的文件,然后到VM的桌面上,右键,你会发现paste!所以这个问题就解决了,你应该把前文中提到的那些软件都下载好,并且复制到你的VM中CentOS的桌面上。

下面,解压你的各种压缩文件:jdk、eclipse、hadoop (插件不要解压!你没看到那个是个jar么)

打开你的 terminal ,转换到桌面上,(你应该能转换到桌面上)解压,用到的命令是:


tar -zxvf  xxxx.tar.gz

xxxx你要替换成相应的文件,同时,这个操作我建议是在root用户下面做,即你要讲你的用户转到root下面,(用到命令su 以及填写密码),只是为了少犯错。

解压好以后,你应该会看到三个文件夹,名字类似 jdk1.7.x、hadoop-2.6.x 、eclipse这样子的。然后建议将这些文件都放在另外一个地方去做操作,不要放在桌面上。我在【/opt】下面建立了名为 【java】 的文件夹,准备将所有操作都放在这个下面,所以我把上面的解压好的文件夹和那个插件都移动到了【/opt/java】 下面,用到了如下命令


mkdir /opt/java

mv xxx /opt/java

xxx代表需要移动的文件夹,移动完毕以后,转到【 /opt/java】文件夹下面,(使用【 cd /opt/java】)

当然你如果觉得jdk1.7.x或者hadoop-2.6.x这种文件夹名字写起来很麻烦,那么你也可以考虑改名(我改名了,我觉得这是一个好建议,在配置环境变量的时候很清晰方便),改名的命令是

 mv jdk1.7.x  jdk 

,这个操作是在【/opt/java】下面做的,【mv】后面第一个参数是原文件名,第二个是新的文件名,中间用空格分开。改名以后,你会发现在【/opt/java】下面执行【  ls  】命令会出现你想要的文件夹(我分别改成了jdk、eclipse 和hadoop),现在,你应该确定,你的jdk目录是 【/opt/java/jdk】,你的eclipse 目录是 【/opt/java/eclipse】 ,你的hadoop目录是 【/opt/java/hadoop 】。这三个目录很重要(当然你的不会和我的完全一样,我只是强调这个目录一定要记住)。

现在需要配置环境变量,打开【 /etc/profile 】文件,(命令:【vi  /etc/profile】)添加如下内容:


JAVA_HOME=/opt/java/jdk
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

主要做的就是添加JAVA_HOME,CLASSPATH,以及PATH 。然后保存,退出。执行  【source /etc/profile 】

不出意外,你的Java应该是搭建好了,你在命令行输入【java -version】应该会看到:

恭喜你你的jdk安装好了,你现在可以写Java了!

我要说的是,我曾在这里犯了一个很大的错误!我第一次下载了 32位的jdk,试图将其安装到64位的系统上面,很壮烈的没有看到上面的那个图片上的内容。这个错误后面还会接着犯。

3、安装eclipse

本来这个步骤应该是 配置SSH免密码登陆,但是既然已经安装好了java,顺便吧eclipse也安装上吧。因为很简单啊!

修改配置文件就好。打开 【/etc/profile 】加上eclipse的路径,


export PATH="/opt/java/eclipse":$PATH

不出意外你的eclipse就已经安装好了!你在命令行中执行【eclipse】应该是可以看到你的eclipse在启动了。

以上最好都在root用户下面操作,我第一次没有转换用户,配置好以后发现打不开,说是权限错误,所以最好是用root用户。如果报错说找不到java,那么你就需要修改一下eclipse的配置文件了:在eclipse目录下面有一个【eclipse.ini】,打开以后,添加java的路径就好【/opt/java/jdk/bin/java】。OK,到此为止,你已经可以在Linux下面开心的用eclipse写java了。

4、配置SSH免密码登陆

几乎每一个教程上面都强调了SSH免密码登陆,看起来是一个必须要做的事情,但事实上这个操作仅仅是简化我们启动hadoop的时候输入密码的操作。步骤是先安装SSH,然后生成一对秘钥,然后配置免密码登陆。CentOS已经安装好了SSH,你可以在命令行中输入 【ssh -version】 ,这时候你需要输入密码,输入以后你会看到有关ssh的版本信息。然后你尝试以SSH协议链接你的主机localhost的时候,输入【ssh localhost】,你也要输入密码(即root用户的密码),像这样子:

接下来你需要打开你的 .ssh 文件夹,这是一个隐藏的文件夹,在你的 home/user下面,即和你的额DeskTop桌面在一个路径下,但是你执行【ls】的时候是看不到这个文件夹的,你需要执行【ls -a】这样可以显示隐藏的文件夹,不需要进入.ssh文件夹,在和桌面同级的目录下面执行


ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

第一句是生成一对秘钥,注意大写的【P】和小写的 【f】 ,以及 【~ 】这个符号和 【.ssh】前面的点,后面一句是将秘钥放在认证的文件中,注意【>>】有两个,【authorized_keys】不要写错了。执行好以后,你在执行【ssh -version】和【ssh localhost】的时候就不要写密码了,像这样:

我在这里犯的错误就是没有注意那个大写的【P】和小写的【f】,导致我的第一次免密码登陆没有配置成功,当时我想书上说了这个不是必须的,所以我就没有继续配置,后来在启动hadoop的时候,让我填了4次密码!所以我那时候就觉得需要重新配置一下这个了, 必定一次一次填密码很麻烦。存在,即合理。这话没错

5、安装hadoop

终于到这里了!

主要做的工作,【配置环境->配置XML文件->格式化HDFS->开启服务->查看状态】

【配置环境】

打开【/etc/profile】添加如下代码:


export  HADOOP_PERFIX="/opt/java/hadoop"

export PATH="$HADOOP_PERFIX/bin":$PATH

即指定hadoop的路径HADOOP_PERFIX,然后加到PATH里面。有的教程中写的是HADOOP_HOME,我觉得是类似的。

还要配置一个文件【etc/hadoop/hadoop-env.sh】,配置Java的路径:这个命令在【/opt/java/hadoop】目录下执行


export JAVA_HOME="/opt/java/jdk "

这样就hadoop可以找到java了

【配置XML文件】

这里采用伪分布式来配置,原来的版本都介绍是主要是要配置3个文件,都在【opt/java/hadoop/etc/hadoop】文件夹下面,【core-site.xml】【hdfs-site.xml】和【mapred-site.xml】,但是hadoop2.6采用了yarn框架,所以还需要配置一个文件【yarn-site.xml】,并且需要把【mapred-site.xml.template】改名成【mapred-site.xml】再做配置。配置的代码如下:


## core-site.xml##

 fs.default.name
 hdfs://localhost:9000

hadoop.tem.dir
 /opt/java/hadoop/tem

## hdfs-site.xml##

 dfs.replication
 1

 dfs.namenode.name.dir
 /opt/java/hadoop/dfs/name

 dfs.datanode.data.dir
 /opt/java/hadoop/dfs/data

##mapred-site.xml##

 mapred.job.tracker
 localhost:9001

##yarn-site.xml##

<!-- Site specific YARN configuration properties -->

 mapreduce.framework.name
 yarn

 yarn.nodemanager.aux-services
 mapreduce_shuffle

需要注意的是,原来的hadoop不需要配置【yarn-site.xml】,并且,这所有的配置文件都可以写在一个文档中的!
【格式化HDFS】
在【/opt/java/hadoop/】目录下面,执行

bin/hadoop namenode -format
或者
bin/hdfs namenode -format

这里我不知道这两种命令的区别是什么(可能没有区别)总之需要执行一个格式化语句。
如果你前面没有配置好SSH免密码登陆的话,这时候你需要输入好几次密码!我第一次就是那么狼狈……
【开启服务】
格式化以后,开启服务,执行

sbin/start-all.sh

这里要注意的是,很多书上和博客上都写的是【bin/start-all.sh】但是hadoop2.6的bin目录下面木有那些启动的shell文件,被移动到了【sbin】文件夹中。
当然你也可以单独启动hdfs或者mapreduce,执行sbin文件夹下相应的命令就好。
不出意外的话,你的hadoop已经可以跑了。
【查看状态】
如果你的hadoop已经可以跑了的话,输入【jps】,查看一下你的java进程,如果顺利的话你会看到这样的:

然后,打开你的浏览器,输入【localhost:50070】你会看到这样的界面:

恭喜你!你成功了哦!你的hadoop可以跑了呢!

本来这篇文章应该是结束了,但是鉴于我第一次弄的时候出来各种各样的问题,我不能允许这篇文就这么简简单单的结束了,接下来,我会将一个很搞的问题。
按道理,看到最后那个界面,就证明你的hadoop是可以了,你就能够去操作hdfs了,比如查看文件,上传本地文件到HDFS,新建文件夹之类的。我也是这么想的,我很高兴的看到我的hadoop弄好了,所以就执行了一下这样的命令,想新建一个文件夹

bin/hadoop fs -mkdir /input

然后发现,报这样的错误:
【WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform…
using builtin-java classes where applicable】
你体会过一盆冷水劈头盖脸的感觉么?是的,就是那样子的!查了一下,说是hadoop官方版本是在32位机器下面编译的,你现在是64位系统,所以不能调用本地库,需要在本地重新编译一下。恩,重新编译一下,于是我就找到了这么一篇博客:编译hadoop如获至宝!因为这个问题不是我一个人遇到的哦!那么正好有这个博客,我就照着来吧。恩,下载一些奇怪的东西:hadoop源码【链接:http://pan.baidu.com/s/1pVlgU 密码:onn5】、Maven、Protobuf、Cmake 【链接:http://pan.baidu.com/s/1kTKKXoV 密码:sfdz】然后照着一步一步来,然后……就是编译不通过啊!卡住了啊!他说等20分钟啊,我等了近1个小时啊!于是编译不成功……我只能找别的方式,看了很多的博客,基本上都是说要自己编译一份hadoop,我很沮丧啊!差点搞的不睡觉了,那时候已经快3点了(4月6号)!索性睡觉,明天搞。昨天晚上的雷声好大啊啊啊啊啊!今天(4月7号)早晨我还是想编译一下的,于是我依然执行了一下编译,但是还是没有办法……直到我找到了这一篇博客:Unable to load native-hadoop 他也是遇到这样的问题,然后提供了一个下载的链接!我感动的快哭了!这是链接【链接:http://pan.baidu.com/s/1qWNsDy8 密码:q9d7】于是换上这个库,然后又执行了一下

bin/hadoop fs -mkdir /input

发现卡住了……但是没有报错!什么都没有输出,我觉得应该是成了!于是在浏览器那边查看了一下HDFS的状态,发现真的有一个新建的文件夹啊!!!好开心好开心!至此,我的hadoop应该才算是真的好了吧!给我点个赞!

【结束语】

本文参考了很多文章,互联网的开放分享精神是我们这个时代最大的财富,我将所有的参考文章链接放在这里,对这些帮助我的人统一说一下谢谢:

http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html

http://blog.csdn.net/vcchen_bo_qiang/article/details/5160281

http://blog.csdn.net/flm_0722/article/details/3531623

http://www.cnblogs.com/dplearning/p/4140352.html

http://blog.csdn.net/stark_summer/article/details/43484545

http://blog.itpub.net/25854343/viewspace-1394651/

http://www.secdoctor.com/html/yyjs/31101.html

http://blog.csdn.net/ggz631047367/article/details/42497557

http://www.linuxidc.com/Linux/2015-01/112367.htm

还参考了《hadoop权威指南》和《hadoop实战》对这两本书的作者说声感谢!

【Todo】

接下去,会写如何在eclipse下面写hadoop有关的程序,例如写MapReduce 和HDFS相关的东西。我会坚持记录我的学习与操作过程的,给自己加油!

刘凯宁
20150407

Share

【Hadoop】安装与配置Hadoop2.6》上有 1 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>