一、安装Linux操作系统
安装过程略,安装完后对系统做一下更新:$sudo apt-get update
二、修改机器名,并与IP地址绑定
每当Ubuntu安装成功时,我们的机器名都默认为:ubuntu ,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。机器名由 /etc/hostname文件决定。步骤如下:
1、$ sudo gedit /etc/hostname,将/etc/hostname文件中的ubuntu改为master。再$ sudo gedit /etc/hosts,将里面的名字也改为master,重启系统后才会生效,或者$sudo source /etc/hostname更新一下文件。其他节点一样修改;
2、测试两台机器之间是否连通:$ ifconfig 查看机器IP地址,$ping 192.168.160.132,并在所有的机器上的"/etc/hosts"文件中都要添加如下内容:
192.168.160.128 master
192.168.160.132 slave
3、$Ping slave 看看是否绑定成功;
三、在Ubuntu下安装JDK
1、将jdk-6u25-linux-i586.bin拷贝到/home/jay目录下:执行命令jay@master:~$ chmod u+x jdk-6u25-linux-i586.bin,将bin文件修改为可执行文件;
2、运行:$./jdk-6u25-linux-i586.bin,安装文件;
3、打开文件:$sudo gedit /etc/profile 添加如下信息:
export JAVA_HOME=/home/jay/jdk1.6.0_25
export JRE_HOME=/home/jay/jdk1.6.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
4、然后$source /etc/profile,使文件内容生效;
5、重启,执行命令:$java -version,查看是否安装成功。若显示:
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing),则安装成功。
四、安装ssh服务
ssh可以实现远程登录和管理,是主节点master和各个从几点slave1、slave2之间可以互相通信,传输数据。
1、验证SSH安装,在所有节点上都执行$sudo apt-get install ssh,更新安装;$which ssh、$which sshd、$which ssh-keygen,查看这三个文件是否存在;
2、生成SSH密钥对:使用主节点上的ssh-keygen来生成一个RSA密钥对,jay@master:~$ssh-keygen -t rsa;
3、生成授权文件jay@master:~$cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys , $more /home/test/.ssh/id_rsa.pub ,该命令用来查看密钥(可不执行);
4、将主节点上的公钥分布到各从节点:逐一将公钥复制到每个从节点上,$scp ~/.ssh/id_rsa.pub jay@slave:~/.ssh/192.168.160.128 ;
5、手动登录到从节点,并设置密钥为授权密钥,如下执行[jay@slave2]$ mkdir ~/.ssh、$chmod 700 ~/.ssh、$mv ~/.ssh/192.168.160.128 ~/.ssh/authorized_keys、$chmod 600 ~/.ssh/authorized_keys;生成该密钥后,可以尝试从主节点登录到目标节点来验证它的准确性:[jay@master]$ ssh 192.168.160.132.或者[jay@master]$ ssh slave。
SSH通信原理:以namenode到datanode为例子:Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥发布到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。
五、安装Hadoop
第一步:将hadoop-0.20.1.tar.gz文件拷贝到/home/jay目录下。
第二步:jay@master:$ tar -xzvf hadoop-0.20.1.tar.gz //将文件解压。
第三步:jay@master:$ chown jay:jay hadoop-0.20.1//将文件所有者改成jay。
第四步:jay@master:$ sudo gedit /etc/profile进入文件将如下信息加到文件里:
export HADOOP_HOME=/home/jay/hadoop-0.20.1
export PATH=$HADOOP_HOME/bin:$PATH
第五步:更改conf目录下的conf/core-site.xml, conf/hdfs-site.xml,conf/mapred-site.xml,conf/hadoop-env.sh,conf/masters,conf/slaves 文件。
a、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit hadoop-env.sh
进入文件加入如下信息:
export JAVA_HOME=/home/jay/jdk1.6.0_25
b、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit masters
进入文件加入如下信息:
192.168.160.128
c、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit slaves
进入文件加入如下信息:
192.168.160.132
d、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit core-site.xml
进入文件加入如下信息:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/jay/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.160.128:9000</value>
</property>
</configuration>
e、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit hdfs-site.xml
进入文件加入如下信息:(replication默认是3,如果不修改,datanode少于三台就会报错)。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
f、jay@master:~/home/jay/hadoop-0.20.1/conf/$sudo gedit mapred-site.xml
进入文件加入如下信息:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.160.128:9001</value>
</property>
</configuration>
第六步:执行jay@master:~/$ scp hadoop-0.20.1 jay@slave:/home/jay/hadoop-0.20.1 //将文件hadoop-0.20.1拷贝到其它两个虚拟机上就可以了。
六、在单机上运行hadoop自带的wordcount程序
第一步:jay@master:~/hadoop-0.20.1/bin/$ hadoop namenode –format //格式化文件系统,新建一个文件系统;
第二步:jay@master:~/hadoop-0.20.1/$ start-all.sh //启动hadoop的所有守护进程;
第三步:jay@master:~/hadoop-0.20.1/$ jps //查看进程,master虚拟机上的结果。要让6个守护进程(namenode、datanode、jobtracker、tasktracker、jps、 scendarynamenode)全部启动才可以;在slave2 虚拟机上 jay@slave2:~/hadoop-0.20.1/$ jps,slave节点上启动3个守护进程;
第四步:先在本地磁盘建立两个输入文件file01 和file02:执行命令jsj@master:~$ echo “Hello World Bye World” > file01、jsj@master:~$ echo “Hello Hadoop Goodbye Hadoop” > file02
第五步: 先建立个文件夹jay@master:~/hadoop-0.20.1$ hadoop fs -mkdir input;
jay@master:~/hadoop-0.20.1$ bin/hadoop fs -put /home/jay/file1 inputTest//把文件file01和file02放到hdfs文件系统中;
jay@master:~/hadoop-0.20.1$ bin/hadoop jar hadoop-0.20.1-examples.jar wordcount inputTest outputTest //执行wordcount程序。
第六步:jsj@master:~/hadoop-0.20.1$ hadoop fs -cat outputTest/* //查看结果:
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2
至此hadoop运行环境已经全部搭建完成。如果要按照此方法搭建请注意每次运行命令的用户和路径。
七、其他说明
1、在eclipse中,我们写完Hadoop的Java程序后,将项目打成一个jar包,放到hadoop的安装目录下,便可在Hadoop平台下运行了。
2、在Eclipse中编写程序之前,先将Hadoop包加入到Java工程中,步骤如下:
新建一个工程,右键--build path--libraries--add library--user library-next--new--ok。点击刚建立的library--add external jars,加入Hadoop中的jar包即可。
3、Eclipse安装Hadoop插件方法:
a、在Hadoop-0.20.2包中--contrib--eclipse-plugin--hadoop-0.20.2-eclipse-plugin.jar包放入到Eclipse--plugins中,重启Eclipse。
b、新建一个工程,file--new--project--Java project--project name--finish。New--class--name--finish。
c、加入Hadoop自带的jar包:工程上右键--build path--configure build path--libraries--add library--user library--next--user library--new--name--ok--add external JARS--Hadoop-0.20.2中的jar包--ok--finish--ok。
d、Eclipse中使用Hadoop:window--open perspective--other--map/reduce。在下方有个大象图标--右键--edit Hadoop location--主机名、用户名、端口号(和conf配置中一致即可)、IP地址--ok。
e、运行:在项目中run configurations--arguments设置参数--运行,去Java的workplace查看结果。