集群准备
- 准备三台客户机(关闭防火墙、静态ip、主机映射、主机名称),主机名分别为Hadoop2,Hadoop3,Hadoop4(具体虚拟机安装步骤在我之前的博客有写到)
- 安装jdk,配置环境变量(具体步骤在我之前的博客里也有写到)
- 配置虚拟机免密以及互联免密(具体步骤在我之前的博客里也有写到)
- 配置时间同步
集群规划
hadoop2 | hadoop3 | hadoop4 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
具体步骤
提示:我们可以先在一台虚拟机上安装hadoop和修改hadoop配置文件,然后再远程复制到其他两台虚拟机上,可以节省很多时间。
(具体hadoop安装步骤在我之前的博客里有写过)
搭建真分布式主要就是修改配置文件
(以下的配置文件在hadoop软件文件夹中的etc文件夹下的hadoop文件夹中)
- hadoop-env.sh
找到配置JAVA_HOME的位置,把后面改成自己jdk安装的路径位置 - core-site.xml
在configuration标签中添加如下配置:
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop2:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop/data/tmp</value>
</property>
- hdfs-site.xml
在configuration标签中添加如下配置:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop4:50090</value>
</property>
- yarn-env.sh
随便找个位置添加自己JAVA_HOME的路径地址
export JAVA_HOME=自己jdk的安装路径
- yarn-site.xml
在configuration标签中添加如下配置:
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop3</value>
</property>
- mapred-site.xml
在configuration标签中添加如下配置:
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- slaves
进入slaves中,删除原文件中的localhost,添加你三台虚拟机的主机名,如下:
hadoop2
hadoop3
hadoop4
至此就全部安装配置完毕,然后远程拷贝到其他两台虚拟机
首先进入到安装hadoop文件的上一层目录文件夹
#远程拷贝到其他两台虚拟机
scp -r hadoop/ root@hadoop3:$PWD
scp -r hadoop/ root@hadoop4:$PWD
#PWD代表拷贝到与Hadoop2相同的目录下,如果不需要可以自己定义路径
启动集群
在启动之前首先格式化HDFS
hadoop namenode -format
启动HDFS【hadoop2】
start-dfs.sh
启动Yarn【hadoop3】
start-yarn.sh
然后jps和web页面查看【50070和8088端口】
三台机器的进程结果如下即可表示成功
时间同步
三台机器全部都要安装ntp,然后修改主机的配置文件,其他两台机器不要改
#首先检查自己虚拟机有没有安装过ntp
rpm -qa|grep ntp
#安装ntp
yum -y install ntp
修改配置
vi /etc/ntp.conf
-----------------------
# 修改1(设置本地网络上的主机不受限制。)
#把这句话前面的注释#号去掉
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 修改2(设置为不采用公共的服务器)
#在这四段话前面添加#号
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 添加3(添加默认的一个内部时钟数据,使用它为局域网用户提供服务。)
#在配置文件最后位置添加如下配置
server 127.127.1.0
fudge 127.127.1.0 stratum 10
#更改完成保存退出
vi /etc/sysconfig/ntpd
#增加以下配置(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
重新启动ntpd
service ntpd status
service ntpd start
chkconfig ntpd on
其他机器配置
#在其他两台机器输入:
crontab -e
#然后添加如下配置(每十秒和主机校对一次时间)
*/10 * * * * /usr/sbin/ntpdate hadoop2
修改完成后在两个窗口都输入:
ntpdate hadoop2
#表示其他两台机器都和主机时间同步
最后可以在shell窗口输入date验证一下有没有同步
完全分布式环境搭建完毕!!!