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集群启动完成~
浙公网安备 33010602011771号