Hadoop是我在Ubuntu-Linux下的入门玩具,反复安装过多次,从此大爱Ubuntu和VIM。本文面向的是Ubuntu-Linux和Hadoop新手,记录的是如何在多台计算机上搭建Hadoop集群,以两台为例。


1. 创建用户

必须保证所有的计算机的用户名是一样的,此处命名为grid。


那么我们有两个用户分布在grid1-desktop, grid2-desktop两台计算机上:


grid@grid1-desktop 

 grid@grid2-desktop


2. 修改hosts

ifconfig命令后,我们知道了grid1-desktop, grid2-desktop两台计算机的ip地址,此处为:

192.168.0.1 

 192.168.0.2 


 sudo vi /etc/hosts命令后,我们将两者的hosts文件原来IPv4的内容删除后都修改如下: 

 192.168.0.1 grid1-desktop 

 192.168.0.2 grid2-desktop 


 然后在两台计算机各自ping自己和对方,检验是否正确配置了hosts文件 

 ping grid1-desktop 

 ping grid2-desktop




注意:这一步如果出现问题的话很难察觉,我们到了后期通过hadoop dfsadmin -report命令的时候仔细观察两台计算机结果的差异才发现这里hosts文件设置出现的问题。


3. SSH

如果不需要输入口令即可成功登录则配置成功 

sudo apt-get install ssh rsync 


 为了在ssh登录的时候不用输入口令,我们要生成公钥和私钥,并且把公钥加入授权 


 在~/目录下 

 mkdir .ssh 

 新建ssh的设置文件夹 

 cd .ssh 

 ssh-keygen -t rsa  

 之后的几个选项全点回车 

 然后ls查看文件就能够看到生成了两个文件 

 id_rsa  id_rsa.pub 

 然后将公钥加入授权 

 cp id_rsa.pub authorized_keys 

 然后将.ssh整个文件夹复制到另外的计算机上 ,比如从本地拷贝到grid@grid2-desktop的~/目录下 

 scp -r ~/.ssh grid@grid2-desktop:~/ 

 然后互相 

 ssh grid@grid1-desktop 

 ssh grid@grid2-desktop



注意:在安装hadoop成功后,如果需要重新配置.ssh文件,要确保所有hadoop相关进程是关闭的,否则ssh 时候会出现错误。


4. JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK jdk-7u2-linux-i586.tar.gz


解压到~/目录下,然后设置环境变量


sudo vi /etc/profile 

 在文件的最后添加代码如下 

 JAVA_HOME=/home/grid/jdk1.7.0_02 

 export JRE_HOME=$JAVA_HOME/jre 

 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 

 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


每台计算机重复上面的步骤 (可以scp哦)


5. Hadoop


http://hadoop.apache.org/common/releases.html下载 

 hadoop-0.20.203.0 

 解压到~/目录下,然后设置环境变量 

 sudo vi /etc/profile 

 在文件的最后添加代码如下 

 export HADOOP_HOME=/home/grid/hadoop-0.20.203.0 

 export PATH=$HADOOP_HOME/bin:$PATH 


 然后配置hadoop-0.20.203.0/conf下面的文件,我们的设置中master是grid1-desktop,slave是grid1-desktop和grid2-desktop 


 =====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>hadoop.tmp.dir</name> 

     <value>/home/grid/tmp</value> 

     <description>temp dir</description> 

   </property> 

   

 <!--file system properties--> 

   <property> 

     <name>fs.default.name</name> 

     <value>hdfs://grid1-desktop:9000</value> 

   </property> 

 </configuration> 


 =====hadoop-env.sh===== 

  在文件最后加入一行 

 export JAVA_HOME=/home/grid/jdk1.7.0_02 


 =====hdfs-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>dfs.replication</name> 

 <value>1</value> 

 </property> 

 </configuration> 


 =====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>grid1-desktop:9001</value> 

 </property> 

 </configuration> 


 =====masters===== 

 grid1-desktop 


 =====slaves===== 

 grid1-desktop 

 grid2-desktop

两台计算机重复上面的设置(可以scp哦)


6. 小试牛刀

首先要格式化namenode否则没法用


hadoop namenode -format


开启hadoop所有的服务


start-all.sh


稍等一会儿,我们可以通过下面两个链接查看HDFS和MapReduce 的情况


http://grid1-desktop:50070/


http://grid1-desktop:50030/


或者


hadoop dfsadmin -report


来查看运行情况



我们来运行一下经典的wordcount的例子,我们用hadoop来数数conf文件夹下所有文本中各种单词出现的数量


首先上传conf文件夹到hdfs,命名为input


hadoop fs -copyFromLocal ~/hadoop-0.20.203.0/conf input


运行自带的例子,输出到HDFS上面的output文件夹中


hadoop jar ~/hadoop-0.20.203.0/hadoop-examples-0.20.203.0.jar wordcount input output


查看生成的文件


hadoop fs -ls output


看到生成了三个文件,查看其中的


hadoop fs -cat output/part-r-00000


我们就可以查看结果。



到此,hadoop安装成功。