完全分布式就是克隆三台虚拟机,用来近似模拟生产环境下各进程的分布与机器运行情况。
集群部署规划:
准备:
三台可以联网的虚拟机(ping www.baidu.com 可以通),为了便于阅读以下内容,
约定主机名分别是hadoop102、hadoop103、hadoop104
编写集群分发脚本xsync
scp:
secure copy 服务器间数据的安全拷贝
示例:scp -r /opt/module/* root@hadoop102:/opt/module
rsync:
rsync远程同步工具,主要用于备份和镜像。
具有速度快、避免复制相同内容和支持符号链接的优点
rsync和scp区别:
用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。
scp是把所有文件都复制过去。
参考脚本如下:(将文件分别分发到103与104上)
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo --------------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
SSH无密登录配置
生成一对秘钥:ssh-keygen -t rsa
公钥的分发:ssh-copy-id hadoop103
注意自身也要保证可以无密登录
最后登录试一下,如下图所示:(如在hadoop102,可以ssh hadoop103)
配置集群
(1) 核心配置文件
vim core-site.xml
<!-- 指定HDFS中NameNode的地址,102节点 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(2) hdfs配置文件
vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_171
vim hdfs-site.xml
<!-- 文件副本数,3份 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
vim slaves
<!-- 指定集群节点的域名 -->
hadoop102
hadoop103
hadoop104
(3) yarn配置文件
vim yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_171
vim yarn-site.xml
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
(4) mapreduce配置文件
vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_171
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在集群上分发配置好的Hadoop配置文件
分发后最好自己检查下是否分发成功。
比如slaves文件开始写的local本地,看是否改成
hadoop102
hadoop103
hadoop104
启动集群
如果集群是第一次启动,需要格式化NameNode(注意删除data/ logs/两个文件夹)
[root@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
启动hdfs: sbin/start-dfs.sh
注意:之前配置文件已经设定好,只能在hadoop102上运行此命令
与yarn类似,yarn设定在hadoop103上,启动yarn的命令只能在103运行
启动yarn:sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,
不能在NameNode 上启动 yarn,
应该在ResouceManager所在的机器上启动yarn。
对于集群的启动与停止,常用群起脚本
配置时间同步实操:
- 时间服务器配置(必须root用户)
(1)检查ntp是否安装
[root@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
(2)修改ntp配置文件
[root@hadoop102 桌面]# vi /etc/ntp.conf
修改内容如下
a)修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改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
c)添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd
[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在启动 ntpd: [确定]
(5)执行:
[root@hadoop102 桌面]# chkconfig ntpd on - 其他机器配置(必须root用户)
(1)在其他机器配置2分钟与时间服务器同步一次
[root@hadoop103 hadoop-2.7.2]# crontab -e
编写脚本(每两分钟与hadoop102同步一次时间)
*/2 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意机器时间
[root@hadoop103 hadoop]# date -s “2017-9-11 11:11:11”
(3)2分钟后查看机器是否与时间服务器同步
[root@hadoop103 hadoop]# date
小技巧:可以使用命令一键全发,免得切换耽误时间