在一个全配置的集群上,“运行Hadoop”意味着在网络分布的不同服务器上运行一组daemons。这些daemons包括:

  •   NameNode
  •   DataNode
  •   Secondary NameNode
  •   JobTracker
  •   TaskTracker

  NameNode位于HDFS的主端,指导从端的DataNode执行底层的I/O任务。

  DataNode将HDFS数据块读取或者写入到本地系统的实际文件中

  Secondary NameNode是一个用于监测HDFS集群状态的辅助daemon。

  JobTracker是应用程序和Hadoop之间的纽带。一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件、为不同的任务分配节点以及监控所有任务的运行。

  TaskTracker管理各个任务在每个从节点上的执行情况。

  下图为Hadoop集群的典型拓扑图。这是一个主/从架构,其中NameNode和JobTracker为主端,DataNode和TaskTracker为从端。

  

  安装一个Hadoop集群时,需要专门指定一个服务器作为主节点。这个服务器通常会运行NameNode和JobTracker。它也将作为一个基站,负责联络并激活所有从节点上的DataNode和TaskTracker。Hadoop使用SSH协议来通信。

  安装Hadoop集群前,要先定义一个公共账号。这里使用xiaoruoen

  安装Hadoop集群时要先验证SSH是否安装。

  如果没有安装,使用yum install openssh来安装,如下

  1. [xiaoruoen@localhost ~]# yum install openssh 
  2. Loaded plugins: fastestmirror 
  3. Loading mirror speeds from cached hostfile 
  4.  * base: mirrors.163.com 
  5.  * extras: mirrors.163.com 
  6.  * updates: mirrors.163.com 
  7. Setting up Install Process 
  8. Resolving Dependencies 
  9. --> Running transaction check 
  10. --> Processing Dependency: openssh = 4.3p2-36.el5 for package: openssh-clients 
  11. --> Processing Dependency: openssh = 4.3p2-36.el5 for package: openssh-askpass 
  12. --> Processing Dependency: openssh = 4.3p2-36.el5 for package: openssh-server 
  13. ---> Package openssh.i386 0:4.3p2-82.el5 set to be updated 
  14. --> Running transaction check 
  15. ---> Package openssh-askpass.i386 0:4.3p2-82.el5 set to be updated 
  16. ---> Package openssh-clients.i386 0:4.3p2-82.el5 set to be updated 
  17. ---> Package openssh-server.i386 0:4.3p2-82.el5 set to be updated 
  18. --> Finished Dependency Resolution 
  19.  
  20. Dependencies Resolved 
  21.  
  22. ===================================================================================================================================================== 
  23.  Package                                  Arch                          Version                                  Repository                     Size 
  24. ===================================================================================================================================================== 
  25. Updating: 
  26.  openssh                                  i386                          4.3p2-82.el5                             base                          291 k 
  27. Updating for dependencies: 
  28.  openssh-askpass                          i386                          4.3p2-82.el5                             base                           42 k 
  29.  openssh-clients                          i386                          4.3p2-82.el5                             base                          455 k 
  30.  openssh-server                           i386                          4.3p2-82.el5                             base                          275 k 
  31.  
  32. Transaction Summary 

  成功安装SSH之后,使用主节点上的ssh-keygen来生成一RSA密钥对。

  1. [xiaoruoen@localhost ~]$ ssh-keygen -t rsa 
  2. Generating public/private rsa key pair. 
  3. Enter file in which to save the key (/home/xiaoruoen/.ssh/id_rsa):  
  4. Created directory '/home/xiaoruoen/.ssh'
  5. Enter passphrase (empty for no passphrase):  
  6. Enter same passphrase again:  
  7. Your identification has been saved in /home/xiaoruoen/.ssh/id_rsa. 
  8. Your public key has been saved in /home/xiaoruoen/.ssh/id_rsa.pub. 
  9. The key fingerprint is: 
  10. 33:47:bc:c0:cf:82:92:d2:69:3a:73:f1:3a:14:74:f8 xiaoruoen@localhost.localdomain 
  11. [xiaoruoen@localhost ~]$ more /home/xiaoruoen/.ssh/id_rsa.pub  
  12. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnYAiD7YCrZR3L8Ps1KKqy1FoA3azcnrFP481zJfGGVKC2judapiZJcjca48B99Zqa4jNyRgREAzTQHxbSRKkQqnA1TB5BK7sKrXp6yl3lCQ/E4k05i6aLHU6DImufWJlmbBr 
  13. 3ILrxG+sNiD/ihcZ66o74/lXUemTHcNomRLEUgJoI8U6X2PiTmD5HqW7VxelseJ2yIZ8cfx9n+0MQbEQBj5Nme8JR7XBFEGWFzySfp2hWR9SfTwqcRRuiVgEczics4ebdk22SsP13lAdltSS/mqJfVG2G6neVBTt+E0+0AI8 
  14. 27DBza9oY2bMiR0HCCihEU2vuLTaKpAzigna1/h2nQ== xiaoruoen@localhost.localdomain 

  将公钥分布到从服务器上

  1. [xiaoruoen@localhost ~]$ scp ~/.ssh/id_rsa.pub xiaoruoen@192.168.0.107:~/master_key 
  2. The authenticity of host '192.168.0.107 (192.168.0.107)' can't be established. 
  3. RSA key fingerprint is d1:ac:46:8f:97:32:0b:88:82:2b:14:60:b0:e6:70:c4. 
  4. Are you sure you want to continue connecting (yes/no)? y 
  5. Please type 'yes' or 'no': yes 
  6. Warning: Permanently added '192.168.0.107' (RSA) to the list of known hosts. 
  7. xiaoruoen@192.168.0.107's password:  
  8. id_rsa.pub                                                                                                                            100%  413     0 

  登录到从服务器上进行验证

  1. [xiaoruoen@localhost ~]$ mkdir ~/.ssh 
  2. [xiaoruoen@localhost ~]$ chmod 700 ~/.ssh 
  3. [xiaoruoen@localhost ~]$ mv ~/master_key ~/.ssh/authorized_keys 
  4. [xiaoruoen@localhost ~]$ chmod 600 ~/.ssh/authorized_keys  

  尝试从主节点登录到目标节点来验证它的正确性

  1. [xiaoruoen@localhost ~]$ ssh 192.168.0.107 
  2. Last login: Thu Apr 12 22:07:21 2012 from 192.168.0.102 

  到Hadoop根目录下的conf目录下找到hadoop-env.sh,修改JAVA_HOME

  1. [xiaoruoen@localhost ~]$ cd $HADOOP_HOME/conf 
  2. [xiaoruoen@localhost conf]$ ll 
  3. total 140 
  4. -rw-rw-r-- 1 root root 7457 Mar 25 08:01 capacity-scheduler.xml 
  5. -rw-rw-r-- 1 root root  535 Mar 25 08:01 configuration.xsl 
  6. -rw-rw-r-- 1 root root  178 Mar 25 08:01 core-site.xml 
  7. -rw-rw-r-- 1 root root  327 Mar 25 08:01 fair-scheduler.xml 
  8. -rw-rw-r-- 1 root root 2237 Mar 25 08:01 hadoop-env.sh 
  9. -rw-rw-r-- 1 root root 1488 Mar 25 08:01 hadoop-metrics2.properties 
  10. -rw-rw-r-- 1 root root 4644 Mar 25 08:01 hadoop-policy.xml 
  11. -rw-rw-r-- 1 root root  178 Mar 25 08:01 hdfs-site.xml 
  12. -rw-rw-r-- 1 root root 4441 Mar 25 08:01 log4j.properties 
  13. -rw-rw-r-- 1 root root 2033 Mar 25 08:01 mapred-queue-acls.xml 
  14. -rw-rw-r-- 1 root root  178 Mar 25 08:01 mapred-site.xml 
  15. -rw-rw-r-- 1 root root   10 Mar 25 08:01 masters 
  16. -rw-rw-r-- 1 root root   10 Mar 25 08:01 slaves 
  17. -rw-rw-r-- 1 root root 1243 Mar 25 08:01 ssl-client.xml.example 
  18. -rw-rw-r-- 1 root root 1195 Mar 25 08:01 ssl-server.xml.example 
  19. -rw-rw-r-- 1 root root  382 Mar 25 08:01 taskcontroller.cfg 
 
  1. [xiaoruoen@localhost conf]$ vim hadoop-env.sh  
  2.  
  3. # Set Hadoop-specific environment variables here. 
  4.  
  5. # The only required environment variable is JAVA_HOME.  All others are 
  6. # optional.  When running a distributed configuration it is best to 
  7. # set JAVA_HOME in this file, so that it is correctly defined on 
  8. # remote nodes. 
  9.  
  10. # The java implementation to use.  Required. 
  11. export JAVA_HOME=/home/samba/jdk1.6.0_30 

  Hadoop的设置主要包含在XML配置文件中。在0.20版本前,它们是hadoop-default.xml和hadoop-site.xml。在版本0.20中,这hadoop-site.xml被分离成3个xml文件:core-site.xml,hdfs-stie.xml与mapred-site.xml。

  分布式运行hadoop,就要修改这三个文件

  在core-site.xml配置NameNode

  1. <?xml version="1.0"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <!-- Put site-specific property overrides in this file. --> 
  5.  
  6. <configuration> 
  7. <property> 
  8.  <name>fs.default.name</name> 
  9.  <value>hdfs://master:9000</value> 
  10. </property> 
  11.  
  12. </configuration> 

  在mapred-site.xml中配置JobTracker

  1. <?xml version="1.0"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <!-- Put site-specific property overrides in this file. --> 
  5.  
  6. <configuration> 
  7. <property> 
  8.  <name>mapred.job.tracker</name> 
  9.  <value>hdfs://master:9001</value> 
  10. </property> 
  11.  
  12. </configuration> 

 在hdfs-site.xml中配置增大HDFS备份参数

  1. <?xml version="1.0"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <!-- Put site-specific property overrides in this file. --> 
  5.  
  6. <configuration> 
  7. <property> 
  8.  <name>dfs.replication</name> 
  9.  <value>3</value> 
  10. </property> 
  11.  
  12. </configuration> 

更新masters和slaves文件来指定共它daemon的位置。

设定主服务器所在位置,也就是NameNode与JobTracker所在位置

  1. vim masters 
  2. localhost 

设定从服务器所在位置,也就是DataNode与TaskTracker所在位置

  1. vim slaves 
  2. 192.168.0.108 
  3. 192.168.0.109 

格式化HDFS文件系统

hadoop namenode -format

(如果提示未找到类,可以在~/.bash_profile里设置CLASSPATH为$HADOOP_HOME/hadoop-core-*.jar;$HADOOP_HOME/hadoop-tool-*.jar;)

启动所有的节点

  1. ./start-all.sh 

 使用JPS来查看节点

  1. jps 
  2. 30879 JobTracker 
  3. 30717 NameNode 
  4. 30965 jps 

  1. jps 
  2. 7101 TaskTracker 
  3. 7617 Jps 
  4. 6988 DataNode