前期准备:
1.我这里用了三台虚拟机,.默认已经配置好静态IP和IP域名映射,它们相互之间可以ping通
第一台:192.168.174.131 hadoopNumber01.medal.com
第二台:192.168.174.132 hadoopNumber02.meda.com
第三台:192.168.174.133 hadoopNumber03.medal.com
2.虚拟机最好不要连上网,因为我们后面用的是离线方式安装
一、搭建前的系统设置
1.将三台虚拟机切换到root用户,禁用IPv6
命令是:#echo "alias net-pf-10 off" >> /etc/modprobe.d/dist.conf
#echo "alias ipv6 off" >> /etc/modprobe.d/dist.conf
2.配置普通用户的sudo权限
命令是:#chmod u+w /etc/sudoers
#vi /etc/sudoers
在第一行加上:用户名 ALL=(root)NOPASSWD:ALL
因为我是以xunzhang这个用户登录的,所以我加上xunzhang ALL=(root)NOPASSWD:ALL
#chmod u-w /etc/sudoers
3.关闭防火墙
命令是:$sudo service iptables stop
$sudo chkconfig iptables off
4.禁用selinux
命令是:$sudo vi /etc/sysconfig/selinux
修改内容:SELINUX= disabled
5.卸载JdK
命令是:$sudo rpm -qa | grep java
$sudo rpm -e --nodeps xxx yyy zzz
6.设置文件打开数量和用户最大进程数
命令是:$sudo vi /etc/security/limits.conf
加上内容:
* soft nofiles 65535
* hard nofiles 65535
* soft nproc 32000
* hard nproc 32000
7.设置集群时间同步(ntp),前提是三台虚拟机之间已经配置ssh免密钥登录
比如说我现在设置第二台和第三台虚拟机与第一台虚拟机进行时间同步
1>首先检查第一台虚拟机有没有安装ntp软件,命令是:#rpm -qa | grep ntp,默认系统已经自带了
2>编辑配置文件ntp.conf
命令是:#vi /etc/ntp.conf
去掉一行注释,将#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap,去掉注释,并将其改成192.168.174.0,因为我的ip是在这个网段里面
加上三行注释,将service 0.centos.pool.ntp.ort和service 1.centos.pool.ntp.org还有service 2.centos.pool.ntp.org这三行注释掉
去掉两行注释,将末尾的server 127.127.1.0 #local clock 和 fudge 127.127.1.0 stratum 10 ,这两行的注释去掉
3>编辑配置文件ntpd
命令是:#vi /etc/sysconfig/ntpd
内容是:# Drop root to id 'ntp:ntp' by default.
SYNC_HWCLOCK =yes
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
4>启动服务
命令是:#service ntpd start
#chkconfig ntpd on
5>在另外两台虚拟机上,写脚本,进行时间的同步
在第二台虚拟机上,切换到root用户,设置同步
命令是:crontab -e
加上如下内容:
0-59 * * * * /usr/sbin/ntpdate hadoopNumber01.medal.com
注意:在这里每个*号之间有一个空格,后面这个域名是我第一台主机的主机名
在第三台虚拟机上,也做如第二台虚拟机相同的操作
二、搭建Hadoop2.x集群
1、安装JDK
1>上传JDK安装包,并将其解压到/opt/modules目录下
2>配置环境变量
命令是:sodu /etc/profile
在最后加上:########### JAVA_HOME ##################
export JAVA_HOME=/opt/modules/jdk1.7.0_79 (jdk所在的路径),我的jdk是在/opt/modules/下
export CLASSPATH=/opt/modules/jdk1.7.0_79/lib
export PATH=$PATH:$JAVA_HOME/bin
3>重启配置文件/etc/profile
命令是:source /etc/profile
4>将jdk分发到另外两台虚拟机中
命令是:cd /opt/modules/
scp -r * xunzhang@hadoopNumber02.medal.com:/opt/modules
scp -r * xunzhang@hadoopNumber03.medal.com:/opt/modules
最后在另外两台虚拟机上配置java环境变量
2.安装Hadoop2.x(我这里是2.5.0)
1>上传hadoop安装包,并将其解压到/opt/modules目录下,进入hadoop-2.5.0-cdh5.3.6目录下,创建临时缓存目录
命令是:mkdir -p tmp/dir
2>进入hadoop-2.5.0-cdh5.3.6/ect/hadoop目录下,修改配置文件
第一个:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopNumber01.medal.com:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0-cdh5.3.6/tmp/dir</value>
</property>
</configuration>
第二个:hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoopNumber02.medal.com:50090</value>
</property>
</configuration>
第三个:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
第四个:yarn -site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoopNumber01.medal.com</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
第五个:slaves
hadoopNumber01.medal.com
hadoopNumber02.medal.com
hadoopNumber03.medal.com
第六个:hadoop-env.sh
配置java的路径:export JAVA_HOME=/opt/modules/jdk1.7.0_79
第七个:mapred-env.sh
配置java的路径:export JAVA_HOME=/opt/modules/jdk1.7.0_79
3.将hadoop分发到其它虚拟机上
前提:三台虚拟机它们的目录结构,和用户名完全一样
命令: scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves hadoop-env.sh mapred-env.sh xunzhang@hadoopNumber02.medal.com:/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop/
scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves hadoop-env.sh mapred-env.sh xunzhang@hadoopNumber03.medal.com:/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop/
4.格式化hdfs文件系统
在第一台虚拟机上
命令:bin/hdfs namenode -format
如果没有错误,就继续向下执行,有错误就查看日志信息,进行改正
sbin/start-dfs.sh
sbin/start-yarn.sh
至此,集群搭建完成