Hadoop现时官网值提供1.x版本与2.x版本,而且力推2.x版本,然而现在市面上大多数书籍与资料都是经典的hadoop-0.20.2.tar.gz版本,据说,其属于Hadoop1.x版本体系,Hadoop1.x版本的安装是大同小异,区别于Hadoop2.x完全推翻重写。
不过我觉得还是从现在具有大多数研究的Hadoop0.20.2学起,在官方网站上已经删除了这个2010年的历史版本下载了。不过通过搜索引擎还能够找到。我给找到之后给大家上传了一份:http://download.csdn.net/detail/yongh701/9416878
一、虚拟机中Linux的安装
hadoop-0.20.2.tar.gz只能在Linux中安装,虽然现在Hadoop2.x貌似已经可以直接在Windows安装了,但是还是建议在Linux虚拟机上安装Hadoop,具体请看《【Linux】Ubuntu12.04的下载与安装》(点击打开链接)、《【Linux】在Ubuntu12.04安装VMware Tools》(点击打开链接)
Hadoop相当于一个服务器,类似于Apache服务器的角色。我们可以在Linux上运行hadoop0.20.2,而在Windows下用改装的Eclipse开发Hadoop的Mapreduce应用。其中,这里Mapreduce是Hadoop的组件之一。
二、Java的安装
Hadoop是基于Java开发的,如同《【Linux】在Debian配置JDK1.7,与Linux Java Helloworld》(点击打开链接)一样,在Linux配置好Java环境。
三、SSH的安装、配置
同时使用Hadoop之前,我们先要在Linux中安装SSH免登录认证,用于避免使用Hadoop时的权限问题。
首先在终端中输入以下命令:
sudo apt-get install ssh
输入密码之后,让Linux完成ssh的下载、安装,如下图所示:
之后,我们要为ssh生成一个密匙,用于构建连接,输入以下命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
密匙生成完毕,如下图所示:
最后,还要输入如下代码,为密匙授权:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
如下图所示,这一步成功之后是没有任何提示信息的:
因此,我们再输入如下命令,查看ssh是否安装成功:
ssh localhost
ssh成功安装会显示如下的信息:
至此,Hadoop的前置环境安装完毕。可以正式安装Hadoop了。
四、Hadoop0.20.2的安装
1、将下载的hadoop-0.20.2.tar.gz拖到Linux中解压,得到一个hadoop-0.20.2文件夹。
2、先对里面的conf目录的部分文件进行修改,需要修改的文件如下图所示:
(1)首先是hadoop-env.sh文件的修改:
如上图,先将第9行中表示JDK,前面的#除去,再于后面指明Linux中jdk的位置。
这个位置可以在终端利用如下的命令:
$JAVA_HOME
如下图地查出,当然前提是你成功在Linux中配置Java:
(2)core-site.xml、hdfs-site.xml、mapred-site.xml
类似的,需要修改的xml文件一开始都是如下的样式,在configuration中留下的一大片空白让你填写:
不填写Hadoop还真启动不了。
首先是core-site.xml,修改成如下的代码:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/pc/hadoop-0.20.2/tmp/hadoop-${user.name}</value> </property> </configuration>
org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
原因就是hadoop在Linux对系统的tmp文件没有权限什么的,反正你指定一个在主文件目录下子目录给它就没有一个问题了。
上述的代码,文件夹hadoop后接一个当前用户的用户名。用于标识不同用户的临时文件。届时,编译成功之后,tmp目录下就会产生不同的文件夹。如我当前的Linux的用户名是pc,则产生如下的文件夹:
之后是hdfs-site.xml,标识此乃单机模式,先按单节点模式打开Hadoop吧,以后根据自己程序的需要,再回来修改:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>最后是组件mapreduce的配置文件mapred-site.xml:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
3、格式化Hadoop
至此,Hadoop配置完毕,我们需要对Hadoop的文件夹进行所谓的“格式化”,这区别于清除所有磁盘数据的“格式化”,完全不同的概念,就大概相当于将上述的配置应用的Hadoop而已。
先在终端中,通过命令进入Hadoop下的bin文件夹:
cd /home/pc/hadoop-0.20.2/bin
再通过如下的命令,以-format参数运行hadoop下的namenode类,用sudo也行,不用sudo也可以的。
./hadoop namenode -format
运行成功如下图所示:
这里,有些资料非常坑爹,如果你在Hadoop0.20.2格式化这一步,出现如上图的“错误:找不到或无法加载主类 NameNode”那么完全就不是什么问题,就是这些资料将这个NameNode的大小写写错了,用vi或者gedit来看Hadoop这个可执行文件,你会发现里面根本没有NameNode,就只有namenode,核心问题是系统区分大小写的,自然找不到这个类了!至少在Hadoop0.20.2中就有namenode这个东东,也正是这个东东。
4、打开Hadoop
这是大功告成的一步了,最后同在这个bin目录下,通过如下的命令打开Hadoop服务器
./start-all.sh
此后,在Hadoop的运行过程中,无论出错与否还是什么的,都不会将内容打印都控制台,而是直接输出的log文件夹各个文件夹中,具体如下图所示:
打开Linux自带的野狐禅浏览器访问http://localhost:50030,看是否能看到如下网页,证明Mapreduce组件打开成功了:
再有就是最关键的namenode组件,也就是Hadoop的核心,用浏览器访问:http://loaclhost:50070看是否能够看到如下的网页,证明整个Hadoop运行成功了:
这里补充一句,利用如下命令,也就是在Hadoop0.20.2下的bin节点访问stop-all.sh可以关闭Hadoop服务器。
./stop-all.sh
类似与《【Linux】用Winscp远程访问无图形界面的Linux系统》(点击打开链接)连同虚拟机与主机。
在虚拟机中通过如下的命令,查出当前虚拟机所在的内网IP,
-ifconfig
比如此处,我的Linux所在的内网IP是:192.168.230.129
那么你就在Windows下打开一个IE,输入http://192.168.230.129:50070,如果你可以看到如下的画面,证明可以在Windows下访问虚拟机下的Hadoop了。