1 介绍
Hadoop的安装有三种形式:
(1)单机分布模式:所有的服务全部安装在一个节点上,当进行MapReduce时,所有的任务都是放生在一个JVM中的
(2)伪分布式模式:所有的服务全部安装在一个节点上,但进行MapReduce时,任务是分在不同的JVM中的
(3)完全部分模式:NameNod、DataNode等节点是分布在不同的节点上,并且MapReduce的任务在执行时是分布在每个DataNode中的JVM中的,实现处理的并行
下面我们将介绍完全分布模式的安装。安装过程中需要:JDK1.7、Hadoop-1.2.1-bin.tar.gz等工具。
单机分布模式安装请参考:http://freewxy.iteye.com/blog/1027569
伪分布式模式安装请参考:http://blog.itpub.net/8782499/viewspace-1120037/
2 安装
(1)安装配置
使用三个节点,分别列出了三个节点的节点名称、操作系统、位数、内存大小和IP地址
hadoop1 Centos6.6 64位 4G内存 10.1.40.191
hadoop2 Centos6.6 64位 4G内存 10.1.40.192
hadoop3 Centos6.6 64位 4G内存 10.1.40.193
(2)实现SSH免密码登录
Centos6.6自带了ssh服务,因此不需要安装,如果您的节点上没有ssh的话,可以查询相应的安装教程进行安装。
1)生成一个用户的公钥(id_rsa.pub)和私钥(id_rsa)
[root@hadoop1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
36:64:68:07:5c:b9:0b:ad:ae:1f:fa:80:3c:6a:ce:9a root@Centos
The key's randomart image is:
+--[ RSA 2048]----+
| ..... |
| .o. |
| o.+. |
| ..+o |
| oS. |
| . . .... |
| + ... |
|.+ . o.. |
|Eo o+o |
+-----------------+
[root@hadoop1 ~]# cd .ssh/
[root@hadoop1 .ssh]# ls
id_rsa id_rsa.pub
2)将公钥传给相应的用户
[root@hadoop1 .ssh]# scp id_rsa.pub root@10.1.40.192:/root/.ssh/authorized_keys
The authenticity of host 'hadoop2 (192.168.149.130)' can't be established.
RSA key fingerprint is 1d:50:e5:a5:bb:e1:b6:34:97:97:b4:a7:73:73:16:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop2,192.168.149.130' (RSA) to the list of known hosts.
root@hadoop2's password:
id_rsa 100% 1679 1.6KB/s 00:00
[root@hadoop1 .ssh]#
查看hadoop2节点上的.ssh文件夹
[root@hadoop2 .ssh]# ls
authorized_keys id_rsa id_rsa.pub
[root@hadoop2 .ssh]#
因为hadoop2节点上的root用户有用hadoop1节点root用户的公钥,则hadoop1的root用户可以免密码链接到hadoop2 的root用户上。如果要实现多台节点的相互无密码访问,只要将公钥复制到相应节点的authorized_keys文件中即可。
注意:在hadoop1.2.1安装过程中,要求hadoop的namenode节点能够与所有节点进行相互的访问。因此datanode节点的authorized_keys文件中有所有节点的公钥,包括namenode节点的。而其他datanode节点的authorized_keys文件则至少有namenode节点的公钥。
这里的免密码是制作给root用户的,因为我的hadoop用户已经制作了免密码,所以当您在制作ssh免密码登录时记得注意用户的切换,以保证hadoop能够正常执行。
(2)更改hosts文件
更改每个节点的hosts文件。在hosts文件中存放电脑主机与IP地址的对应关系,起作用相当于DNS服务器。
[hadoop@hadoop1 etc]$ cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.40.191 hadoop1
10.1.40.192 hadoop2
10.1.40.193 hadoop3
[hadoop@hadoop1 etc]$ ping hadoop3
PING hadoop3 (10.1.40.193) 56(84) bytes of data.
64 bytes from hadoop3 (10.1.40.193): icmp_seq=1 ttl=64 time=0.224 ms
64 bytes from hadoop3 (10.1.40.193): icmp_seq=2 ttl=64 time=0.335 ms
64 bytes from hadoop3 (10.1.40.193): icmp_seq=3 ttl=64 time=0.172 ms
64 bytes from hadoop3 (10.1.40.193): icmp_seq=4 ttl=64 time=0.339 ms
^C
--- hadoop3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3264ms
rtt min/avg/max/mdev = 0.172/0.267/0.339/0.073 ms
(3)安装KDK1.7 64位
下载jdk1.7 64位地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
安装JDK1.7
1)进行JDK的解压和移动
[hadoop@hadoop1 sources]$ tar -zxf jdk-7u75-linux-x64.tar.gz
[hadoop@hadoop1 sources]$ ls
apache-hive-0.13.1-bin.tar.gz hbase-0.94.27.tar.gz jdk-7u75-linux-x64.tar.gz phoenix-3.3.1-bin.tar.gz zookeeper-3.4.6.tar.gz
hadoop-1.2.1.tar.gz jdk1.7.0_75 phoenix-1.2.1-install.tar pig-0.13.0.tar.gz
[hadoop@hadoop1 sources]$ sudo mv jdk1.7.0_75/ /usr/
2)配置/etc/profile文件
在/etc/profile处配置的环境变量,会在系统中任何一个登录时进行加载,当在/etc/profile配置了java环境后,所有用户都能使用java
JAVA_HOME=/usr/jdk1.7.0_75
CLASSPATH=/usr/jdk1.7.0_75/lib/dt.jar:.:/usr/jdk1.7.0_75/lib/tools.jar:/home/hadoop/phoenix-3.3.1-bin/hadoop1/phoenix-3.3.1-client-hadoop1.jar
PATH=$PATH://usr/jdk1.7.0_75/bin:/usr/jdk1.7.0_75/jre/bin
export PATH JAVA_HOME CLASSPATH
编辑完成后,使用root用户进行source /etc/profile命令使该文件生效,然后重新登录hadoop用户
(4)安装hadoop-1.2.1
1)下载hadoop-1.2.1
下载地址为:http://www.apache.org/dyn/closer.cgi/hadoop/common
可以从该网页给出的多个地址中下载所需要的hadoop-1.2.1
2)解压hadoop-1.2.1
[hadoop@hadoop1 sources]$ ls
apache-hive-0.13.1-bin.tar.gz hbase-0.94.27.tar.gz jdk-7u75-linux-x64.tar.gz phoenix-3.3.1-bin.tar.gz zookeeper-3.4.6.tar.gz
hadoop-1.2.1.tar.gz jdk1.7.0_75 phoenix-1.2.1-install.tar pig-0.13.0.tar.gz
[hadoop@hadoop1 sources]$ tar -zxf hadoop-1.2.1.tar.gz
[hadoop@hadoop1 sources]$ ls
apache-hive-0.13.1-bin.tar.gz hadoop-1.2.1.tar.gz jdk1.7.0_75 phoenix-1.2.1-install.tar pig-0.13.0.tar.gz
hadoop-1.2.1 hbase-0.94.27.tar.gz jdk-7u75-linux-x64.tar.gz phoenix-3.3.1-bin.tar.gz zookeeper-3.4.6.tar.gz
[hadoop@hadoop1 sources]$ pwd
/home/hadoop/sources
[hadoop@hadoop1 sources]$ mv hadoop-1.2.1 ../
讲hadoop-1.2.1-bin.tar.gz进行解压,然后移动至用户hadoop的家目录中/home/hadoop中
3)进行hadoop的配置文件的设置
所有的配置文件在/home/hadoop/hadoop-1.2.1/conf/ 文件夹下面,进入到这个文件夹中
[hadoop@hadoop1 conf]$ ls
capacity-scheduler.xml fair-scheduler.xml hadoop-policy.xml mapred-queue-acls.xml slaves taskcontroller.cfg
configuration.xsl hadoop-env.sh hdfs-site.xml mapred-site.xml ssl-client.xml.example task-log4j.properties
core-site.xml hadoop-metrics2.properties log4j.properties masters ssl-server.xml.example
[hadoop@hadoop1 conf]$
(A)core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://10.1.40.191:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-1.2.1/tmp</value>
</property>
</configuration>
fs.default.name属性:设定hdfs文件系统的入口位置,这里设定为hadoop1节点的9000号端口
hadoop.tmp.dir属性:hadoop1.x在运行过程中的数据(namenode的元数据等、datanode的数据块等)都是放在tmp文件中,默认的tmp文件是在系统文件/tmp文件中,该文件的特点是,当系统重新启动时,/tmp中的所有文件被清空,所以为了保留数据将tmp文件改到hadoop-1.2.1的文件中。
(B)hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
dfs.replication属性:hadoop的高安全性就是hadoop的冗余机制,意思就是将一份数据复制多份后并分块放在不同的节点上,如果一个数据块被破坏后,其他节点上也有该数据块的备份,dfs.replication属性就是定义数据备份多少份。
(C)mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>10.1.40.191:9001</value>
</property>
</configuration>
maprep.job.tracker属性:MapReduce任务的进入地址。
(D)hadoop-env.sh
将hadoop-env.sh文件中的JAVA_HOME进行相应的设置
(E)master和slave
masters文件中存放的是namenode街低昂的IP地址,slaves文件中存放的是datanode节点中的IP地址
[hadoop@hadoop1 conf]$ cat masters
10.1.40.191
[hadoop@hadoop1 conf]$ cat slaves
10.1.40.192
10.1.40.193
当这些文件全部配置完成以后,然后通过scp命令将hadoop-1.2.1文件复制到每一个节点上,然后格式化整个hdfs
scp -r hadoop-1.2.1/ hadoop2:/home/hadoop/
scp -r hadoop-1.2.1/ hadoop3:/home/hadoop/
hadoop namenode -format
当出现下面这句话表示格式化成功了
14/03/27 10:46:41 INFO common.Storage: Storage directory /tmp/hadoop-myhadoop/dfs/name has been successfully formatted.
(5)启动Hadoop集群
执行hadoop-1.2.1文件下bin目录中的start-all.sh脚本即可
[hadoop@hadoop1 ~]$ cd hadoop-1.2.1/
[hadoop@hadoop1 hadoop-1.2.1]$ cd bin/
[hadoop@hadoop1 bin]$ ls
hadoop hadoop-daemon.sh rcc start-all.sh start-dfs.sh start-mapred.sh stop-balancer.sh stop-jobhistoryserver.sh task-controller
hadoop-config.sh hadoop-daemons.sh slaves.sh start-balancer.sh start-jobhistoryserver.sh stop-all.sh stop-dfs.sh stop-mapred.sh
[hadoop@hadoop1 bin]$ ./start-all.sh
如果出现相应的继承则表示其群成功:
namenode节点:
[hadoop@hadoop1 ~]$ jps
7381 NameNode
7568 SecondaryNameNode
7656 JobTracker
6523 Jps
[hadoop@hadoop1 ~]$
datanode节点:
[hadoop@hadoop2 ~]$ jps
5223 TaskTracker
23895 Jps
5111 DataNode
[hadoop@hadoop2 ~]$
当出现以上几个进程时,则表示hadoop集群已经成功安装。
(6)总结
我们在以上的配置文件中只是简简单单的配了几个属性而已,其实hadoop有很多默认的属性配置,如果想要详细了解这些文件中的属性及其配置,请打开下面的链接:
http://blog.csdn.net/jediael_lu/article/details/38680013