前置条件:
1、三台机器,这里通过创建三个VMware虚拟机来模拟三台物理机器2、Linux系统,例如Ubuntu、CentOS、Fedora等,这里是Ubuntu10.04
3、jdk for linux版本,这里是jdk-6u25-linux-i586.bin
4、Hadoop文件,这里我们选的是hadoop-0.20.1.tar.gz文件
一、安装Linux系统
$sudo apt-get update #更新系统,需连网二、更改主机名,映射IP地址
1、$sudo gedit /etc/hostname #主机名master、backup、slave
$source /etc/hostname
2、
$ifconfig #查看IP地址
$sudo gedit /etc/hosts #IP地址与主机名的映射
192.168.117.138 master
192.168.117.136 backup
192.168.117.139 slave
$source /etc/hosts #使文件修改生效(需要重启生效)
三、安装jdk
1、将jdk-6u25-linux-i586.bin拷贝到/home/tom目录下或用命令$cp ~/Desktop/jdk-6u25-linux-i586.bin /home/tom
2、tom@master:~/home/tom$ chmod u+x jdk-6u25-linux-i586.bin
为文件所有者增加可执行权限
3、执行安装文件:
$./jdk-6u25-linux-i586.bin
4、$sudo gedit /etc/profile
在profile文件中添加如下内容:
export JAVA_HOME=/home/tom/jdk1.6.0_25
export JRE_HOME=/home/tom/jdk1.6.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
$source /etc/profile #使修改生效
5、
$java -version
显示java version "1.6.0_25"。。。jdk安装成功
四、安装ssh服务
1、$which ssh
$which sshd
$which ssh-keygen
$ssh localhost
$ps -e | grep ssh
$sudo apt-get install ssh #Ubuntu下必须要连网安装
2、master生成SSH密钥对
[tom@master]$ssh-keygen -t rsa #密钥生成过程中务必使用空口令(一路回车)
$cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys #复制密钥
$more /home/tom/.ssh/id_rsa.pub #查看公钥内容
3、将公钥复制到主节点和每个从节点
[tom@master]$scp ~/.ssh/id_rsa.pub tom@backup:~/.ssh/master_key
[tom@master]$scp ~/.ssh/id_rsa.pub tom@slave:~/.ssh/master_key
4、在从节点上,并设置主节点的密钥为授权密钥
[tom@backup/slave]$ mkdir ~/.ssh
$chmod 700 ~/.ssh
$mv ~/.ssh/master_key ~/.ssh/authorized_keys #重命名为authorized_keys
$chmod 600 ~/.ssh/authorized_keys
5、远程登录验证SSH
[tom@master]$ ssh 192.168.117.136
或[tom@master]$ ssh backup
[tom@master]$ ssh 192.168.117.139
或[tom@master]$ ssh slave
五、配置hadoop环境--全分布模式
1、将hadoop-0.20.1.tar.gz文件拷贝到/home/tom目录下2、tom@master:$ tar -xzvf hadoop-0.20.1.tar.gz #解压文件
3、tom@master:$ chown tom:tom hadoop-0.20.1 #将文件夹所有者改成tom(注意区别chmod命令和chown命令)
4、tom@master:$ sudo gedit /etc/profile
在profile文件中添加如下信息,配置环境变量:
export HADOOP_HOME=/home/tom/hadoop-0.20.1
export PATH=$HADOOP_HOME/bin:$PATH
5、第五步:更改/home/tom/hadoop-0.20.1/conf目录下文件
文件①:[tom@master:~/home/tom/hadoop-0.20.1/conf/]$sudo gedit hadoop-env.sh
添加如下信息。
export JAVA_HOME=/home/tom/jdk1.6.0_25
文件②:[tom@master:~/home/tom/hadoop-0.20.1/conf]$sudo gedit masters
添加如下信息:
192.168.117.136
文件③:[tom@master:~/home/tom/hadoop-0.20.1/conf]$sudo gedit slaves
添加如下信息:
192.168.117.139
文件④:[tom@master:~/home/tom/hadoop-0.20.1/conf]$sudo gedit core-site.xml
core-site.xml指定了NameNode的主机名和端口号
添加如下信息: 先建立tmp文件夹
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/tom/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.117.138:9000</value>
</property>
</configuration>
文件⑤:[tom@master:~/home/tom/hadoop-0.20.1/conf/]$sudo gedit hdfs-site.xml
hdfs-site.xml指定了HDFS的默认副本数
添加如下信息:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/home/tom/hdfs/namesecondary</value>
</property>
</configuration>
文件⑥:[tom@master:~/home/tom/hadoop-0.20.1/conf]$sudo gedit mapred-site.xml
mapred-site.xml指定了JobTracker的主机名和端口号
添加如下信息:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.117.138:9001</value>
</property>
</configuration>
6、
[tom@master:~/]$ scp hadoop-0.20.1 tom@backup:/home/tom/hadoop-0.20.1
[tom@master:~/]$ scp hadoop-0.20.1 tom@slave:/home/tom/hadoop-0.20.1
将master中配置好的Hadoop-0.20.1文件夹拷入backup和slave 中对应的/home/tom目录下
六、执行Wordcount程序
1、格式化一个新的分布式文件系统[tom@master:~/hadoop-0.20.1/bin/]$ hadoop namenode –format
2、启动所有的守护进程
第二步:[tom@master:~/hadoop-0.20.1/]$ bin/start-all.sh
3、[tom@master:~/hadoop-0.20.1]/$ jps
全分布模式下:
NameNode
JobTracker
Jps
[tom@backup:~/hadoop-0.20.1]/$ jps
SecondaryNameNode
Jps
[tom@slave:~/hadoop-0.20.1]/$ jps
DataNode
TaskTracker
Jps
4、
[tom@master:~/soft/]$ echo “Hello LNU Hello 208” > file01
[tom@master:~/soft/]$ echo “Hello Hadoop Goodbye Hadoop” > file02
5、
[tom@master:~/hadoop-0.20.1]$ hadoop fs -mkdir input
#在当前目录下建文件夹input
[tom@master:~/hadoop-0.20.1]$ bin/hadoop fs -put file01 input
[tom@master:~/hadoop-0.20.1]$ bin/hadoop fs -copyFromLocal file02 input
6、
[tom@master:~/hadoop-0.20.1]$ hadoop jar hadoop-0.20.1-examples.jar wordcount input output
执行wordcount程序
7、
[tom@master:~/hadoop-0.20.1/]$ hadoop fs -cat output/*
或者[tom@master:~/hadoop-0.20.1/]$ more output/part-r-00000
结果:
Hello 3
LNU 1
208 1
Hadoop 2
Goodbye 1
七、单机(本地)模式和伪分布模式
单机模式、伪分布模式与全分布模式的许多配置过程都是相同的,下面只说一下与全分布模式配置过程的不同之处。1、单机模式
在这种默认模式下,hadoop-0.20.1/conf目录下的三个配置文件core-site.xml、mapred-site.xml和hdfs-site.xml均为空,/etc/hosts文件中只有自身localhost。
当配置文件为空时,Hadoop会完全运行在本地,不需要与其他节点交互,不用HDFS,也不加载任何Hadoop的守护进程,也不会与守护进程交互,避免引起额外的复杂性,主要用于开发调试MapReduce程序的应用逻辑。
2、伪分布模式
伪分布模式是在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上,相当于一台服务器同时具有master、backup和slave多台服务器的功能,这是一种伪分布。
在/etc/hosts文件中,master、backup和slave都映射到同一个IP地址,即是本地主机的IP地址。
在hadoop-0.20.1/conf目录下,core-site.xml、hdfs-site.xml和mapred-site.xml、hadoop-env.sh的配置和全分布模式下相同,masters文件存的是本地主机localhost,salves文件中存的也是本地主机localhost。
用命令$start-all.sh启动服务器上的所有守护进程并用jps命令查看:
[tom@master] $ start-all.sh
[tom@master] $ jps
NameNode
JobTracker
SecondaryNameNode
DataNode
TaskTracker
Jps
八、几点注意
1、执行Linux命令时尤其是对文件进行操作时,注意绝对路径和相对路径。2、Ubuntu系统自身不带ssh-server,在生成RSA密钥前需要在连网的情况下使用$sudo apt-get install ssh命令安装ssh-server,否则配置工作无法继续。
3、在 生成RSA密钥的过程中务必使用空口令(按回车跳过),否则后面master主节点每次访问其他节点时,都要求手动输入该口令。
4、对于Hadoop而言,当遇到错误时,第一时间应是查看日志,日志里通产会有详细的错误原因提示。
5、 各个机器必须要有相同的用户名(username)和用户目录(/home/username),而机器名(hostname)不同!
OVER!