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下载JDKjdk-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安装成功。