Hadoop2.2.0 CentOS 32/64位 集群配置

1.准备工作

  1.1 集群搭建基础环境:

    3台(或以上)CentOS 虚拟机,32位/64位均可

  1.2 下载所需的压缩包:

     1.2.1 jdk1.7

         根据实际情况,下载相应的jdk:http://www.webkfa.com/one1/w292.html

     1.2.2 hadoop2.2.0(在此不给出下载链接)

         几点说明:

          (1)如果选用32位虚拟机,直接下载对应压缩包;如果选用64位的可以选择直接下载编译好的64位包(官网不提供),也可以下载32位包,自己重新编译位64位包(不推荐,因为重新编译的过程比较繁琐,且重新编译过程中需要用到maven仓库中的一些jar包,可能需要FQ,且重新编译等待时间较长,实在想尝试的同学可以参考这位的博客,我觉得写得比较详细,很有参考价值:http://blog.csdn.net/w13770269691/article/details/16883663/ ,单纯用于学习的同学建议直接下载64位包使用)

          (2)一定要看清楚下载的是32位还是64位的压缩包,网上有很多所谓的32位压缩包实际上是64位的(选用错误会导致无法启动集群等一系列严重后果,务必重视这一问题)

          (3)现在关于hadoop2的教学材料还比较少,针对hadoop1的相对较多,两者内容及使用差异较大,同学们可以自行选择学习、使用的版本,此文主要介绍hadoop2.2.0的安装和配置

          (4)没有特殊说明,就是三台都要进行的操作、配置

  1.3 将下载的压缩包放到对应目录下

      1.3.1 jdk直接放在/root下,查看是否正确对应系统位数,一般而言,i586对应32位,x86_64对应64位,如下为jdk1.7.0_67 (32位):

1 # ls -l jdk-7u67-linux-i586.rpm 
2 -rw-r--r--. 1 root root 125480893 12月 10 19:06 jdk-7u67-linux-i586.rpm

      1.3.2 hadoop压缩包放在/opt目录下,并解压到当前目录下:

1 # cd /opt
2 # ls -l
3 总用量 XXXX
4 -rw-r--r--.  1 root   root   96118203 12月  2 22:14 hadoop-2.2.0.tar.gz

     解压命令:

# tar -zxvf hadoop-2.2.0.tar.gz

   解压完成,查看是否成功:

1 # ls -l
2 总用量 XXXX
3 drwxr-xr-x. 10 hadoop hadoop     4096 12月 15 21:44 hadoop-2.2.0
4 -rw-r--r--.  1 root   root   96118203 12月  2 22:14 hadoop-2.2.0.tar.gz

  1.4 设计、规划集群分布

     我采用的是一台master,两台slaves的模式,IP、hostname规划如下:

1 192.255.241.164 master
2 192.255.241.214 slave1
3 192.255.241.165 slave2

  1.5 jdk 安装配置

    1.5.1 安装jdk

# rpm -ivh jdk-7u67-linux-i586.rpm 

    1.5.2 配置环境变量

    进入/etc/profile

# vim /etc/profile

    在底部加入如下内容:(此处以jdk1.7.0_67位例,请自行调整相应路径及名称)

1 JAVA_HOME=/usr/java/jdk1.7.0_67
2 JRE_HOME=/usr/java/jdk1.7.0_67/jre
3 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
4 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
5 export JAVA_HOME JRE_HOME PATH CLASSPATH

    退出编辑,并使其生效:

# source /etc/profile

   注意:

     (1)需要记住在此处设置的jdk路径,在后面的配置中还有两处要用到

     (2)CentOS安装默认自带open jdk,如果版本不适合,或者为了方便后面的配置等考虑,可以先卸载原来系统自带的jdk,在按照上面的步骤安装自己下载的jdk,详细方法可以参考这位的博客http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891608.html,此文是针对64位jdk安装配置的,但是32位其实没有什么区别,写的很详细

     (3)这里还有一点要说明,如果选择在root用户下使用hadoop集群,那么所有配置都可以设置root权限,如果选择新建一个用户,并在那个用户下使用hadoop集群,相应的环境变量就可以仅配置在那个用户下,没有特殊需求可以按照本文的做法,将jdk加入到全局环境变量

  1.6 关闭防火墙(此步骤很重要,否则影响机器之间的ssh通信,造成集群建立失败)

   1.6.1 查看防火墙状态

1 # /etc/init.d/iptables status
2 iptables:未运行防火墙。

   1.6.2 关闭防火墙

     如果像上面一样显示未运行,表示已经关闭,无须额外设置;如果不是,务必关闭防火墙(注意关的时候要在root用户下操作)

 1  重启后永久性生效:
 2 
 3 开启:chkconfig iptables on
 4 
 5 关闭:chkconfig iptables off
 6 
 7  即时生效,重启后失效:
 8 
 9 开启:service iptables start
10 
11 关闭:service iptables stop

  1.7 主机名、hosts的配置

   1.7.1 主机名设置

     进入/etc/sysconfig/network文件

# vim /etc/sysconfig/network

    将hostname改为master(在master,即选为主节点的那台上,另外两台分别改为slave1,slave2,与上面的设计、规划一致即可)

1 NETWORKING=yes
2 HOSTNAME=master

    退出编辑,执行hostname master 更改主机名(slave1,slave2操作类似,不再赘述)

# hostname master

   重新打开,看到生效

[root@master ~]#

   1.7.2 hosts 设置 

    进入/etc/hosts

# vim /etc/hosts

   在底部添加如下内容(根据实际ip,和主机名设置,此处依据上方设计来填写)

1 192.255.241.164 master
2 192.255.241.214 slave1
3 192.255.241.165 slave2

  1.8 解压hadoop-2.2.0

    到/opt目录下,解压hadoop压缩包

1 [root@master ~]# cd /opt
2 [root@master opt]# ls -l
3 总用量 XXXX
4 -rw-r--r--.  1 root   root   96118203 12月  2 22:14 hadoop-2.2.0.tar.gz
5 [root@master opt]# tar -zxvf hadoop-2.2.0.tar.gz

  1.9 添加hadoop环境变量

    进入以下配置文件

[root@master opt]# vim /etc/profile

   在底部加入如下内容

1 export HADOOP_HOME=/opt/hadoop-2.2.0
2 export PAHT=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3 export HADOOP_LOG_DIR=/opt/hadoop-2.2.0/logs
4 export YARN_LOG_DIR=$HADOOP_LOG_DIR

 

2 配置master(之前选定的主节点)上的hadoop环境

  准备工作基本完成,可以开始进行配置了

  2.1 创建hadoop用户(可以是任何名字,但是注意之后的配置要一致)

useradd hadoop

  注意:

    (1)不用设置用户登录密码,也是为了之后的配置、操作方便

    (2)之后的hadoop使用如果是在hadoop用户下进行的,那么在权限设置上要特别留意,在下文中会详细指出具体是哪些

  2.2 添加2个jdk路径,修改4个配置文件、建立(若已存在则修改)masters文件、slaves文件(共8个文件

    首先进入以下目录,8个文件的配置均在此目录下进行

[root@master ~]# cd /opt/hadoop-2.2.0/etc/hadoop/

   可以看到目录下内容如下显示

 1 [root@master hadoop]# ls -l
 2 总用量 128
 3 -rw-r--r--. 1 hadoop hadoop 3560 12月 15 21:44 capacity-scheduler.xml
 4 -rw-r--r--. 1 hadoop hadoop 1335 12月 15 21:44 configuration.xsl
 5 -rw-r--r--. 1 hadoop hadoop  318 12月 15 21:44 container-executor.cfg
 6 -rw-r--r--. 1 hadoop hadoop  504 12月 15 21:44 core-site.xml
 7 -rw-r--r--. 1 hadoop hadoop 3589 12月 15 21:44 hadoop-env.cmd
 8 -rw-r--r--. 1 hadoop hadoop 3399 12月 15 21:49 hadoop-env.sh
 9 -rw-r--r--. 1 hadoop hadoop 1774 12月 15 21:44 hadoop-metrics2.properties
10 -rw-r--r--. 1 hadoop hadoop 2490 12月 15 21:44 hadoop-metrics.properties
11 -rw-r--r--. 1 hadoop hadoop 9257 12月 15 21:44 hadoop-policy.xml
12 -rw-r--r--. 1 hadoop hadoop 1239 12月 15 21:44 hdfs-site.xml
13 -rw-r--r--. 1 hadoop hadoop 1180 12月 15 21:44 httpfs-env.sh
14 -rw-r--r--. 1 hadoop hadoop 1657 12月 15 21:44 httpfs-log4j.properties
15 -rw-r--r--. 1 hadoop hadoop   21 12月 15 21:44 httpfs-signature.secret
16 -rw-r--r--. 1 hadoop hadoop  620 12月 15 21:44 httpfs-site.xml
17 -rw-r--r--. 1 hadoop hadoop 9116 12月 15 21:44 log4j.properties
18 -rw-r--r--. 1 hadoop hadoop  918 12月 15 21:44 mapred-env.cmd
19 -rw-r--r--. 1 hadoop hadoop 1383 12月 15 21:44 mapred-env.sh
20 -rw-r--r--. 1 hadoop hadoop 4113 12月 15 21:44 mapred-queues.xml.template
21 -rw-r--r--. 1 hadoop hadoop 1049 12月 15 21:44 mapred-site.xml
22 -rw-r--r--. 1 hadoop hadoop  758 12月 15 21:44 mapred-site.xml.template
23 -rw-r--r--. 1 hadoop hadoop    7 12月 15 21:44 masters
24 -rw-r--r--. 1 hadoop hadoop   14 12月 15 21:44 slaves
25 -rw-r--r--. 1 hadoop hadoop 2316 12月 15 21:44 ssl-client.xml.example
26 -rw-r--r--. 1 hadoop hadoop 2251 12月 15 21:44 ssl-server.xml.example
27 -rw-r--r--. 1 hadoop hadoop 2178 12月 15 21:44 yarn-env.cmd
28 -rw-r--r--. 1 hadoop hadoop 4095 12月 15 21:49 yarn-env.sh
29 -rw-r--r--. 1 hadoop hadoop 1722 12月 15 21:44 yarn-site.xml

   黄色荧光笔标出的是接下来要修改的文件

    2.2.1 hadoop-env.sh

     进入此文件

[root@master hadoop]# vim hadoop-env.sh

    找到”export JAVA_HOME="处,按照之前配置的jdk路径加入相应目录,并退出

export JAVA_HOME=/usr/java/jdk1.7.0_67

    2.2.2 yarn-env.sh

     与上面类此,进入以下文件

[root@master hadoop]# vim yarn-env.sh

    同样找到"JAVA_HOME="修改jdk路径,并退出

JAVA_HOME=/usr/java/jdk1.7.0_67

    2.2.3 core-site.xml

    进入以下文件

[root@master hadoop]# vim core-site.xml

   在<configuration>标签中加入相应内容,使其变为以下样子

 1 <configuration>
 2 
 3 
 4 <property>
 5     <name>fs.defaultFS</name>
 6     <value>hdfs://master:9000</value>   //系统分布式URL
 7 </property>
 8 
 9 <property>
10     <name>io.file.buffer.size</name>
11     <value>131072</value>
12 </property>
13 
14 <property>
15     <name>hadoop.tmp.dir</name>
16     <value>file:/home/hadoop/temp</value>
17 </property>
18 
19 <property>
20     <name>hadoop.proxyuser.hadoop.hosts</name>
21     <value>*</value>
22 </property>
23 
24 <property>
25     <name>hadoop.proxyuser.hadoop.groups</name>
26     <value>*</value>
27 </property>
28 
29 </configuration>

   其中的master就是主节点的主机名,也可以写为具体的IP

    2.2.4 hdfs-site.xml

     进入以下文件

[root@master hadoop]# vim hdfs-site.xml

    在<configuration>标签中加入相应内容,使其变为以下样子

 1 <configuration>
 2 <property>
 3     <name>dfs.namenode.secondary.http-address</name>
 4     <value>master:9001</value>
 5 </property>
 6 
 7 <property>
 8     <name>dfs.namenode.name.dir</name>
 9     <value>/home/hadoop/dfs/name</value>
10 </property>
11 
12 <property>
13     <name>dfs.datanode.data.dir</name>
14     <value>/home/hadoop/dfs/data</value>
15 </property>
16 
17 <property>
18     <name>dfs.replication</name>
19     <value>2</value>
20 </property>
21 
22 <property>
23     <name>dfs.webhdfs.enabled</name>
24     <value>true</value>
25 </property>
26 </configuration>

    2.2.5 yarn-site.xml

     进入以下文件

[root@master hadoop]# vim yarn-site.xml

     在<configuration>标签中加入相应内容,使其变为以下样子

 1 <configuration>
 2 
 3 <!-- Site specific YARN configuration properties -->
 4 <property>
 5     <name>yarn.nodemanager.aux-services</name>
 6     <value>mapreduce_shuffle</value>
 7 </property>
 8 
 9 <property>
10     <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
11     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
12 </property>
13 
14 <property>
15     <name>yarn.resourcemanager.address</name>
16     <value>master:8032</value>
17 </property>
18 
19 <property>
20     <name>yarn.resourcemanager.scheduler.address</name>
21     <value>master:8030</value>
22 </property>
23 
24 <property>
25     <name>yarn.resourcemanager.resource-tracker.address</name>
26     <value>master:8031</value>
27 </property>
28 
29 <property>
30     <name>yarn.resourcemanager.admin.address</name>
31     <value>master:8033</value>
32 </property>
33 
34 <property>
35     <name>yarn.resourcemanager.webapp.address</name>
36     <value>master:8088</value>
37 </property>
38 
39 <property>
40     <name>yarn.nodemanager.resource.memory-mb</name> //配置内存
41     <value>15360</value>
42 </property>
43 </configuration>

   2.2.6 mapred-site.xml

    进入以下文件

[root@master hadoop]# vim mapred-site.xml

   在<configuration>标签中加入相应内容,使其变为以下样子

 1 <configuration>
 2 <property>
 3     <name>mapreduce.framework.name</name>
 4     <value>yarn</value>
 5 </property>
 6 
 7 <property>
 8     <name>mapreduce.jobhistory.address</name>
 9     <value>>master:10020</value>
10 </property>
11 
12 <property>
13     <name>mapreduce.jobhistory.webapp.address</name>
14     <value>master:19888</value>
15 </property>
16 </configuration>

    2.2.7 masters

    进入以下文件

[root@master hadoop]# vim masters

   其中只需要一行内容,即主节点的主机名

master

    2.2.8 slaves

    进入以下文件

[root@master hadoop]# vim slaves

   只需要slave的主机名

1 slave1
2 slave2

   注意:

   (1)以上配置内容一定要仔细核对,任何一个文件配置错误都会导致之后集群启动不成功

   (2)这些配置无须一台一台配置,同一个集群中的节点,配置文件相同,可以在节点间建立完ssh链接之后直接用scp命令传过去,下面会详细介绍

  2.3 建立节点间ssh免登陆连接(这一步要在三台上同时操作,注意切换系统和用户)

   2.3.1 先查看ssh,看是否缺少openssh-clients

1 [root@master hadoop]# rpm -qa|grep ssh 
2 openssh-server-5.3p1-84.1.el6.i686
3 libssh2-1.4.2-1.el6.i686
4 openssh-clients-5.3p1-84.1.el6.i686
5 openssh-askpass-5.3p1-84.1.el6.i686
6 openssh-5.3p1-84.1.el6.i686

   2.3.2 若缺少,则下载安装

# yum install openssh-clients

   2.3.3 修改/etc/ssh/sshd_config

# vim /etc/ssh/ssh_config

放开三行注释(去掉这三行前面的#)

1 RSAAuthentication yes
2 PubkeyAuthentication yes
3 AuthorizedKeysFile      .ssh/authorized_keys

 并执行service sshd restart ,使其生效

# service sshd restart

   2.3.4 配置无密码登陆,创建公钥(su hadoop 进入hadoop用户)

1 [root@master hadoop]# su hadoop
2 [hadoop@master hadoop]$ cd /home/hadoop/
3 [hadoop@master ~]$ ssh-keygen -t rsa

  一路回车

   2.3.5 发送公钥

1 [hadoop@master ~]$ cd .ssh/
2 [hadoop@master .ssh]$ cp id_rsa.pub authorized_keys
[root@master .ssh]# scp authorized_keys root@192.168.10.11:/home/hadoop/.ssh/

  此处要以root用户进行操作,否则会报错

  2.3.6 建立连接

   在两台slave上也进行2.3.1~2.3.4操作,并将产生的公钥加入到authorized_keys文件中(以slave1为例,slave2上相似)

[hadoop@slave1 .ssh]$ cat id_rsa.pub >> .ssh/authorized_keys

   2.3.7 验证连接

   回到master的hadoop用户的.ssh目录下

1 [hadoop@master .ssh]$ ssh slave1  
2 Last login: Wed Dec 17 16:07:25 2014 from master 

  看到以下内容,说明ssh无密码登录建立成功

[hadoop@slave1 ~]$ 

   如果还需要输入密码,可以检查是否配置正确,或者参考其他博客ssh配置方法,这不是本文的重点

 2.4 将master上的8个文件分别传到两个slave上(前提是ssh连接成功建立)

   2.4.1 发送文件(过程类此,仅举一例)

    仅以从master将hadoop-env.sh传到slave1的相应目录为例(注意在hadoop用户下操作)

1 [hadoop@master .ssh]$ cd /opt/hadoop-2.2.0/etc/hadoop/
2 [hadoop@master hadoop]$ ls -l
3 [hadoop@master hadoop]$ scp hadoop-env.sh root@192.255.241.214:/opt/hadoop-2.2.0/etc/hadoop/

   2.4.2 验证是否成功,有需要的话修改权限

     若需要输入密码,输入登录密码即可。完成传送后,到slave1,slave2上分别验证是否覆盖成功,同时注意这两个slave下的hadoop-2.2.0目录的用户权限,如果不是hadoop,统一用以下命令进行修改(注意要进入root用户修改)

1 [root@master opt]# chown -R hadoop hadoop-2.2.0
2 [root@master opt]# chgrp -R hadoop hadoop-2.2.0

  并查看是否修改成功

[root@master opt]# ls -l
总用量 XXXX
drwxr-xr-x. 10 hadoop hadoop     4096 12月 15 21:44 hadoop-2.2.0

 

3 启动hadoop集群,查看是否配置成功

  激动人心的时刻就要到来了,不要大意地进入hadoop用户,并且一定要注意是在master上进行下列操作,如果在slave上进行namenode的格式化或者启动hadoop是会出问题的!

 3.1 建立三个目录,用来放hadooop文件和日志数据

1 [hadoop@master ~]$mkdir -p dfs/name
2 [hadoop@master ~]$mkdir -p dfs/data
3 [hadoop@master ~]$mkdir -p temp

 3.2 格式化namenode

1 [hadoop@master hadoop]$ cd /home/hadoop/hadoop-2.2.0/bin/
2 [hadoop@master bin]$ ./hdfs namenode -format

   会看到一长串INFO输出,最后几行如果有successfully formated出现,就格式化成功了(这里要注意一下,如果不是第一次格式化了,先要把之前建立的三个目录下的内容删掉,再进行格式化,同时要注意查看slave上的clusterID是否与master上的一致,不一致的话,要把master上的clusterID改成和slave上一样的)

  3.3 启动集群

     确定进入sbin目录下,深吸一口气

1 [hadoop@master opt]$ cd hadoop-2.2.0/sbin/
2 [hadoop@master sbin]$ ./start-all.sh

   如果看到以下提示信息,就说明启动成功了

 1 This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
 2 Starting namenodes on [master]
 3 master: starting namenode, logging to /opt/hadoop-2.2.0/logs/hadoop-hadoop-namenode-master.out
 4 slave2: starting datanode, logging to /opt/hadoop-2.2.0/logs/hadoop-hadoop-datanode-slave2.out
 5 slave1: starting datanode, logging to /opt/hadoop-2.2.0/logs/hadoop-hadoop-datanode-slave1.out
 6 Starting secondary namenodes [master]
 7 master: starting secondarynamenode, logging to /opt/hadoop-2.2.0/logs/hadoop-hadoop-secondarynamenode-master.out
 8 starting yarn daemons
 9 starting resourcemanager, logging to /opt/hadoop-2.2.0/logs/yarn-hadoop-resourcemanager-master.out
10 slave2: starting nodemanager, logging to /opt/hadoop-2.2.0/logs/yarn-hadoop-nodemanager-slave2.out
11 slave1: starting nodemanager, logging to /opt/hadoop-2.2.0/logs/yarn-hadoop-nodemanager-slave1.out

 但是还不能说明完全配置正确,用jps命令分别看一下master,slave1,slave2上的进程是否都正常启动(仅以master为例,slave上有DataNode,无NameNode)

1 [hadoop@master sbin]$ jps
2 12509 Jps
3 12108 SecondaryNameNode
4 11932 NameNode
5 12254 ResourceManager

 还可以通过/bin下的hdfs dfsadmin -report命令查看datanode是否连接正确

 1 [hadoop@master sbin]$ cd ..
 2 [hadoop@master hadoop-2.2.0]$ cd bin/
 3 [hadoop@master bin]$ ./hdfs dfsadmin -report
 4 Configured Capacity: 64552194048 (60.12 GB)
 5 Present Capacity: 51613696000 (48.07 GB)
 6 DFS Remaining: 51613646848 (48.07 GB)
 7 DFS Used: 49152 (48 KB)
 8 DFS Used%: 0.00%
 9 Under replicated blocks: 0
10 Blocks with corrupt replicas: 0
11 Missing blocks: 0
12 
13 -------------------------------------------------
14 Datanodes available: 2 (2 total, 0 dead)
15 
16 Live datanodes:
17 Name: 192.255.241.165:50010 (slave2)
18 Hostname: slave2
19 Decommission Status : Normal
20 Configured Capacity: 37560725504 (34.98 GB)
21 DFS Used: 24576 (24 KB)
22 Non DFS Used: 6651928576 (6.20 GB)
23 DFS Remaining: 30908772352 (28.79 GB)
24 DFS Used%: 0.00%
25 DFS Remaining%: 82.29%
26 Last contact: Wed Dec 17 16:26:25 CST 2014
27 
28 
29 Name: 192.255.241.214:50010 (slave1)
30 Hostname: slave1
31 Decommission Status : Normal
32 Configured Capacity: 26991468544 (25.14 GB)
33 DFS Used: 24576 (24 KB)
34 Non DFS Used: 6286569472 (5.85 GB)
35 DFS Remaining: 20704874496 (19.28 GB)
36 DFS Used%: 0.00%
37 DFS Remaining%: 76.71%
38 Last contact: Wed Dec 17 16:26:25 CST 2014

  有这些信息基本可以放心,配置成功,hadoop集群启动完成~

posted on 2014-12-17 18:04  nmj_93  阅读(659)  评论(0)    收藏  举报

导航